| 1 |
greg |
1.3 |
{ RCSid $Id: aniso.cal,v 1.2 2018/12/01 02:06:04 greg Exp $ }
|
| 2 |
greg |
1.1 |
{ Ward-Geisler-Moroder-Duer anisotropic BSDF model }
|
| 3 |
|
|
|
| 4 |
|
|
{ Final 5 real arguments are alpha_x and alpha_y roughnesses and Up vector }
|
| 5 |
|
|
|
| 6 |
|
|
ax = arg(AC-4); { ax is roughness in Up orientation }
|
| 7 |
|
|
ay = arg(AC-3);
|
| 8 |
|
|
|
| 9 |
greg |
1.3 |
arefl(hx,hy,hz) = Exp(-(hx*hx/(ax*ax) + hy*hy/(ay*ay))/(hz*hz)) *
|
| 10 |
greg |
1.1 |
(hx*hx + hy*hy + hz*hz) /
|
| 11 |
|
|
(PI*ax*ay*hz*hz*hz*hz);
|
| 12 |
|
|
|
| 13 |
greg |
1.3 |
axmit(hx,hy,hz) = Exp(-(hx*hx/(ax*ax) + hy*hy/(ay*ay))/(hz*hz)) /
|
| 14 |
greg |
1.1 |
(4*PI*ax*ay);
|
| 15 |
|
|
|
| 16 |
greg |
1.2 |
dobsdf(sdx,sdy,sdz) = if(sdz, arefl(Idx+sdx, Idy+sdy, Idz+sdz),
|
| 17 |
|
|
axmit(Idx+sdx, Idy+sdy, Idz-sdz) / sqrt(-sdz*Idz) );
|
| 18 |
greg |
1.1 |
|
| 19 |
greg |
1.2 |
absdf(ox,oy,oz) = dobsdf(Ldx(ox,oy,oz), Ldy(ox,oy,oz), Ldz(ox,oy,oz));
|