--- ray/src/rt/m_brdf.c 2024/12/05 19:23:43 2.42 +++ ray/src/rt/m_brdf.c 2024/12/18 17:57:06 2.44 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: m_brdf.c,v 2.42 2024/12/05 19:23:43 greg Exp $"; +static const char RCSid[] = "$Id: m_brdf.c,v 2.44 2024/12/18 17:57:06 greg Exp $"; #endif /* * Shading for materials with arbitrary BRDF's @@ -346,10 +346,6 @@ m_brdf2( /* color a ray that hit a BRDF material */ /* always a shadow */ if (r->crtype & SHADOW) return(1); - /* check arguments */ - if ((m->oargs.nsargs < (hasdata(m->otype)?4:2)) | (m->oargs.nfargs < - ((m->otype==MAT_TFUNC)|(m->otype==MAT_TDATA)?6:4))) - objerror(m, USER, "bad # arguments"); /* check for back side */ if (r->rod < 0.0) { if (!backvis) { @@ -360,6 +356,10 @@ m_brdf2( /* color a ray that hit a BRDF material */ flipsurface(r); /* reorient if backvis */ } else raytexture(r, m->omod); + /* check arguments */ + if ((m->oargs.nsargs < (hasdata(m->otype)?4:2)) | (m->oargs.nfargs < + ((m->otype==MAT_TFUNC)|(m->otype==MAT_TDATA)?6:4))) + objerror(m, USER, "bad # arguments"); nd.mp = m; nd.pr = r; @@ -432,8 +432,7 @@ setbrdfunc( /* set up brdf function and variables */ varset("NxP`", '=', vec[0]/funcxf.sca); varset("NyP`", '=', vec[1]/funcxf.sca); varset("NzP`", '=', vec[2]/funcxf.sca); - varset("RdotP`", '=', np->pdot <= -1.0 ? -1.0 : - np->pdot >= 1.0 ? 1.0 : np->pdot); + varset("RdotP`", '=', np->pdot); scolor_color(ctmp, np->mcolor); /* should use scolor_rgb()? */ varset("CrP", '=', colval(ctmp,RED)); varset("CgP", '=', colval(ctmp,GRN));