star-sf

Set of surface and volume scattering functions
git clone git://git.meso-star.fr/star-sf.git
Log | Files | Refs | README | LICENSE

commit 8f00487e49d32218b354d9f885868b72bab223c2
parent dd12aef4d278b36f1c0e3fb48103b9a09718d9fe
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 23 Jul 2018 12:02:36 +0200

Fix the pdf evaluation of the microfacet reflection

Diffstat:
Msrc/ssf_beckmann_distribution.c | 1+
Msrc/ssf_microfacet_reflection.c | 1+
2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/ssf_beckmann_distribution.c b/src/ssf_beckmann_distribution.c @@ -92,6 +92,7 @@ beckmann_distribution_sample dir[1] = sin(phi) * sin_theta; dir[2] = cos_theta; d33_muld3(wh, d33_basis(basis, N), dir); + ASSERT(d3_dot(wh, N) > 0); *pdf = exp(-sin2_theta/(cos2_theta*m2)) / (PI*m2*cos_theta*cos2_theta); } diff --git a/src/ssf_microfacet_reflection.c b/src/ssf_microfacet_reflection.c @@ -108,6 +108,7 @@ microfacet_reflection_pdf ASSERT(d3_dot(wo, N) > 0 && d3_dot(wi, N) > 0); ASSERT(bsdf->distrib); d3_normalize(wh, d3_add(wh, wi, wo)); + if(d3_dot(wh, N) < 0) d3_minus(wh, wh); pdf_wh = ssf_microfacet_distribution_pdf(bsdf->distrib, N, wh); return pdf_wh / (4.0*fabs(d3_dot(wo, N))); }