| 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);
|