| 199 |  | } | 
| 200 |  |  | 
| 201 |  |  | 
| 202 | + | /* Macro for test to see if BSDF material uses proxy */ | 
| 203 | + | #define isBSDFproxy(m)  ((m)->otype == MAT_BSDF && (m)->oargs.nsargs && \ | 
| 204 | + | strcmp((m)->oargs.sarg[0], "0")) | 
| 205 | + |  | 
| 206 | + |  | 
| 207 |  | int | 
| 208 |  | rayshade(               /* shade ray r with material mod */ | 
| 209 |  | RAY  *r, | 
| 212 |  | { | 
| 213 |  | OBJREC  *m; | 
| 214 |  |  | 
| 215 | < | r->rt = r->rot;                 /* set effective ray length */ | 
| 215 | > | r->rt = r->rot;                 /* preset effective ray length */ | 
| 216 |  | for ( ; mod != OVOID; mod = m->omod) { | 
| 217 |  | m = objptr(mod); | 
| 218 |  | /****** unnecessary test since modifier() is always called | 
| 223 |  | ******/ | 
| 224 |  | /* hack for irradiance calculation */ | 
| 225 |  | if (do_irrad && !(r->crtype & ~(PRIMARY|TRANS)) && | 
| 226 | + | (ofun[m->otype].flags & (T_M|T_X)) && | 
| 227 |  | m->otype != MAT_CLIP && | 
| 228 | < | (ofun[m->otype].flags & (T_M|T_X))) { | 
| 228 | > | !isBSDFproxy(m)) { | 
| 229 |  | if (irr_ignore(m->otype)) { | 
| 230 |  | raytrans(r); | 
| 231 |  | return(1); |