2 |
|
{ LaFortune reflectance model with N lobes } |
3 |
|
|
4 |
|
{ Sample parameters (change these) } |
5 |
< |
rho_d : 0.136465483630983; |
6 |
< |
rho_s(i) : select(i, 0.144594472775860); |
7 |
< |
Cx(i) : select(i, -0.605122636448704); |
8 |
< |
Cy(i) : select(i, -0.664960041454502); |
9 |
< |
Cz(i) : select(i, 0.586571000768196); |
10 |
< |
n(i) : select(i, 29.629194300125050); |
5 |
> |
rho_d : 0.017615787130711; |
6 |
> |
rho_s : 0.654729812719232; |
7 |
> |
Cx(i) : select(i, -0.75, -0.78); |
8 |
> |
Cy(i) : select(i, -0.91, -.81); |
9 |
> |
Cz(i) : select(i, .75, .83); |
10 |
> |
n(i) : select(i, 30, 15); |
11 |
|
NL : n(0); |
12 |
|
|
13 |
|
{ Useful functions } |
15 |
|
abs(x) : if(x, x, -x); |
16 |
|
noneg(x) : if(x, x, 0); |
17 |
|
|
18 |
< |
{ Normalization factor based on parameters } |
18 |
> |
{ Normalization factor based on parameters } |
19 |
|
snf(i) : (n(i)+2)/(2*PI*max(abs(Cx(i)),max(abs(Cy(i)),abs(Cz(i))))^n(i)); |
20 |
|
|
21 |
< |
{ CHANGE THE FOLOWING TO MATCH NL } |
22 |
< |
snfk(i) : select(i, snf(1)); |
21 |
> |
{ CHANGE THE FOLOWING TO MATCH NL } |
22 |
> |
snfk(i) : select(i, snf(1), snf(2)); |
23 |
|
|
24 |
|
{ Note that we assume i and o vectors are normalized, both pointing away } |
25 |
|
|
26 |
< |
sum(i,dx,dy,dz) : if(.5-i, 0, sum(i-1) + |
27 |
< |
rho_s(i)*snfk(i)*noneg(Cx(i)*dx + Cy(i)*dy + Cz(i)*dz)^n(i)); |
26 |
> |
sum(i,dx,dy,dz) : if(.5-i, 0, sum(i-1,dx,dy,dz) + |
27 |
> |
snfk(i)*noneg(Cx(i)*dx + Cy(i)*dy + Cz(i)*dz)^n(i)); |
28 |
|
|
29 |
< |
lafortune(ix,iy,iz,ox,oy,oz) : if( -iz*oz, 0, rho_d/PI + sum(NL,ix*ox,iy*oy,iz*oz) ); |
29 |
> |
lafortune(ix,iy,iz,ox,oy,oz) : if( -iz*oz, 0, |
30 |
> |
rho_d/PI + rho_s*sum(NL,ix*ox,iy*oy,iz*oz) ); |