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