| 1 |
greg |
1.1 |
{
|
| 2 |
|
|
Glass Bead Retroreflector BRDF
|
| 3 |
|
|
|
| 4 |
|
|
4/25/2002 Greg Ward
|
| 5 |
|
|
|
| 6 |
|
|
Use with metfunc type, where A4 is estimated total retroreflection
|
| 7 |
|
|
(doesn't need to be accurate) and A5 is the specific intensity
|
| 8 |
|
|
(candelas per lux per square meter) at normal incidence and a
|
| 9 |
|
|
0.5 degree observation angle. If you have a value at some
|
| 10 |
|
|
other angle, simply divide it by obs_mult1(obs_meas_deg)
|
| 11 |
|
|
to get the equivalent value at 0.5 degrees.
|
| 12 |
|
|
|
| 13 |
|
|
Do not use this file with prismatic retroreflectors!
|
| 14 |
|
|
}
|
| 15 |
|
|
ldot(x,y,z) = max(cos(89.5*DEGREE), Nx*x + Ny*y + Nz*z);
|
| 16 |
|
|
normk = A5 / grey(A1,A2,A3) / A4;
|
| 17 |
|
|
normf(x,y,z) = normk / ldot(x,y,z);
|
| 18 |
|
|
|
| 19 |
|
|
{ fitted function of observation angle }
|
| 20 |
|
|
{ based on ray simulation of glass bead }
|
| 21 |
|
|
obs_mult1(a) = if(.5-a,
|
| 22 |
|
|
cos(PI/2/.5*a)*3 + 1,
|
| 23 |
|
|
if(20-a,
|
| 24 |
|
|
.07/sin(7.6*PI/180*a) + .02,
|
| 25 |
|
|
.157/(a-19)
|
| 26 |
|
|
)
|
| 27 |
|
|
);
|
| 28 |
|
|
obs_mult(x,y,z) = obs_mult1(Acos(-Dx*x-Dy*y-Dz*z)/DEGREE);
|
| 29 |
|
|
|
| 30 |
|
|
{ use the following when normal value is unknown }
|
| 31 |
|
|
retro_paint(x,y,z) = normf(x,y,z) * obs_mult(x,y,z);
|
| 32 |
|
|
|
| 33 |
|
|
{ fitted function of entrance angle }
|
| 34 |
|
|
{ based on 3M sheet reflector }
|
| 35 |
|
|
ent_mult1(a) = exp(-a*a/2220);
|
| 36 |
|
|
ent_mult(x,y,z) = ent_mult1(Acos(ldot(x,y,z))/DEGREE);
|
| 37 |
|
|
|
| 38 |
|
|
{ use the following for sheet reflectors }
|
| 39 |
|
|
retro_sheet(x,y,z) = normf(x,y,z) * obs_mult(x,y,z) * ent_mult(x,y,z);
|