1 |
{ RCSid $Id: WalterBTDF.cal,v 1.1 2014/03/18 16:16:37 greg Exp $ } |
2 |
{ |
3 |
Isotropic BSDF model by Walter et al. |
4 |
} |
5 |
{ BRDF parameters (change these) } |
6 |
kdinr : 0.; |
7 |
ksinr : 1.; |
8 |
f0r : 0.277605834967475; |
9 |
alpha_r : 0.077419771872748; |
10 |
{ BTDF parameters (change these) } |
11 |
ksint : 0.126221381019119; |
12 |
sigma_i : 1.434228082595141; |
13 |
sigma_o : 1.656368055960319; |
14 |
f0t : 0.2; |
15 |
alpha_t : 0.149990535073450; |
16 |
|
17 |
{ Useful functions } |
18 |
s(x) : x*x; |
19 |
abs(x) : if(x, x, -x); |
20 |
noneg(x) : if(x, x, 0); |
21 |
|
22 |
{ Reflection functions } |
23 |
Gr(x) : 2/(1 + sqrt(1 + s(alpha_r)*(1-s(x))/s(x))); |
24 |
Fr(w) : f0r + (1-f0r)*(1-w)^5; |
25 |
Dr(htn) : s(alpha_r)/PI/s( s(htn)*(s(alpha_r)-1) + 1 ); |
26 |
|
27 |
lobe3r(wihr,win,won,htn) : Fr(wihr)*Dr(htn)*Gr(win)*Gr(won) / (4*win*won); |
28 |
lobe2r(ix,iy,iz,ox,oy,oz,htx,hty,htz,nf) : lobe3r((ix*htx+iy*hty+iz*htz)*nf, |
29 |
iz, oz, htz*nf); |
30 |
lobe1r(ix,iy,iz,ox,oy,oz,htx,hty,htz) : lobe2r(ix,iy,iz,ox,oy,oz,htx,hty,htz, |
31 |
1/sqrt(s(htx)+s(hty)+s(htz))); |
32 |
|
33 |
{ Transmission functions } |
34 |
Gt(x) : 2/(1 + sqrt(1 + s(alpha_t)*(1-s(x))/s(x))); |
35 |
Ft(w) : f0t + (1-f0t)*(1-w)^5; |
36 |
Dt(htn) : s(alpha_t)/PI/s( s(htn)*(s(alpha_t)-1) + 1 ); |
37 |
|
38 |
lobe3t(wiht,woht,win,won,htn) : abs(wiht*woht/(win*won)) * |
39 |
s(sigma_o)*(1-Ft(wiht))*Dt(htn)*Gt(win)*Gt(won) / |
40 |
s(sigma_i*wiht + sigma_o*woht); |
41 |
|
42 |
lobe2t(ix,iy,iz,ox,oy,oz,htx,hty,htz,nf) : lobe3t((ix*htx+iy*hty+iz*htz)*nf, |
43 |
(ox*htx+oy*hty+oz*htz)*nf, iz, oz, htz*nf); |
44 |
|
45 |
lobe1t(ix,iy,iz,ox,oy,oz,htx,hty,htz) : lobe2t(ix,iy,iz,ox,oy,oz,htx,hty,htz, |
46 |
1/sqrt(s(htx)+s(hty)+s(htz))); |
47 |
|
48 |
{ Final function call - reflection & transmission } |
49 |
{ vectors normalized, pointing away from surface } |
50 |
walter(ix,iy,iz,ox,oy,oz) : if(iz*oz, kdinr/PI + |
51 |
ksinr*lobe1r(ix,iy,iz,ox,oy,oz, |
52 |
ix+ox, iy+oy, iz+oz), |
53 |
ksint*noneg(lobe1t(ix,iy,iz,ox,oy,oz, |
54 |
-sigma_i*ix-sigma_o*ox, |
55 |
-sigma_i*iy-sigma_o*oy, |
56 |
-sigma_i*iz-sigma_o*oz)) ); |