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