177 |
|
if (fl & F_MATRIX) { /* special case for matrix BSDF */ |
178 |
|
const SDMat *m = (const SDMat *)df->comp[0].dist; |
179 |
|
int i = m->ninc; |
180 |
+ |
double diffuseY; |
181 |
|
FVECT vin, vout; |
182 |
|
double fwdY; |
183 |
|
SDValue rev; |
184 |
+ |
if (side1 == side2) |
185 |
+ |
diffuseY = (side1 > 0) ? bsdf->rLambFront.cieY : bsdf->rLambBack.cieY; |
186 |
+ |
else |
187 |
+ |
diffuseY = (side1 > 0) ? bsdf->tLambFront.cieY : bsdf->tLambBack.cieY; |
188 |
+ |
diffuseY /= M_PI; |
189 |
|
while (i--) { |
190 |
|
int o = m->nout; |
191 |
|
if (!mBSDF_incvec(vin, m, i+.5)) |
193 |
|
while (o--) { |
194 |
|
if (!mBSDF_outvec(vout, m, o+.5)) |
195 |
|
continue; |
196 |
< |
fwdY = mBSDF_value(m, o, i); |
196 |
> |
fwdY = mBSDF_value(m, o, i) + diffuseY; |
197 |
|
if (fwdY <= 1e-4) |
198 |
|
continue; |
199 |
|
if (SDreportError( SDevalBSDF(&rev, vout, vin, bsdf), stderr)) |
202 |
|
addStat(&myStats, rdiff(fwdY, rev.cieY)); |
203 |
|
} |
204 |
|
} |
205 |
< |
} if (fl & F_ISOTROPIC) { /* isotropic case */ |
205 |
> |
} else if (fl & F_ISOTROPIC) { /* isotropic case */ |
206 |
|
const double stepSize = sqrt(df->minProjSA/M_PI); |
207 |
|
FVECT vin; |
208 |
|
vin[1] = 0; |