diff --git a/src/pbrt/bxdfs.cpp b/src/pbrt/bxdfs.cpp index 5f4dd46f..0763bb4f 100644 --- a/src/pbrt/bxdfs.cpp +++ b/src/pbrt/bxdfs.cpp @@ -1136,7 +1136,7 @@ SampledSpectrum BxDF::rho(Vector3f wo, pstd::span uc, for (size_t i = 0; i < uc.size(); ++i) { // Compute estimate of $\rho_\roman{hd}$ pstd::optional bs = Sample_f(wo, uc[i], u2[i]); - if (bs) + if (bs && bs->pdf > 0) r += bs->f * AbsCosTheta(bs->wi) / bs->pdf; } return r / uc.size(); @@ -1154,7 +1154,7 @@ SampledSpectrum BxDF::rho(pstd::span u1, pstd::span continue; Float pdfo = UniformHemispherePDF(); pstd::optional bs = Sample_f(wo, uc[i], u2[i]); - if (bs) + if (bs && bs->pdf > 0) r += bs->f * AbsCosTheta(bs->wi) * AbsCosTheta(wo) / (pdfo * bs->pdf); } return r / (Pi * uc.size());