34 |
|
* 8 red grn blu rspec u-rough v-rough trans tspec |
35 |
|
*/ |
36 |
|
|
37 |
+ |
#define BSPEC(m) (6.0) /* specularity parameter b */ |
38 |
+ |
|
39 |
|
/* specularity flags */ |
40 |
|
#define SP_REFL 01 /* has reflected specular component */ |
41 |
|
#define SP_TRAN 02 /* has transmitted specular */ |
121 |
|
/* worth using? */ |
122 |
|
if (dtmp > FTINY) { |
123 |
|
copycolor(ctmp, np->scolor); |
124 |
< |
dtmp *= omega / np->pdot; |
124 |
> |
dtmp *= omega * sqrt(ldot/np->pdot); |
125 |
|
scalecolor(ctmp, dtmp); |
126 |
|
addcolor(cval, ctmp); |
127 |
|
} |
146 |
|
/* worth using? */ |
147 |
|
if (dtmp > FTINY) { |
148 |
|
copycolor(ctmp, np->mcolor); |
149 |
< |
dtmp *= np->tspec * omega / np->pdot; |
149 |
> |
dtmp *= np->tspec * omega * sqrt(ldot/np->pdot); |
150 |
|
scalecolor(ctmp, dtmp); |
151 |
|
addcolor(cval, ctmp); |
152 |
|
} |
198 |
|
else |
199 |
|
setcolor(nd.scolor, 1.0, 1.0, 1.0); |
200 |
|
scalecolor(nd.scolor, nd.rspec); |
201 |
+ |
/* improved model */ |
202 |
+ |
dtmp = exp(-BSPEC(m)*nd.pdot); |
203 |
+ |
for (i = 0; i < 3; i++) |
204 |
+ |
colval(nd.scolor,i) += (1.0-colval(nd.scolor,i))*dtmp; |
205 |
+ |
nd.rspec += (1.0-nd.rspec)*dtmp; |
206 |
|
/* check threshold */ |
207 |
|
if (specthresh > FTINY && |
208 |
|
(specthresh >= 1.-FTINY || |