Skip to content

Commit 8de6504

Browse files
committed
Schlick BSDF: Add clamping to avoid some small floating point errors
1 parent cfef261 commit 8de6504

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

include/slg/materials/materialdefs_funcs_generic.cl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,8 @@ OPENCL_FORCE_INLINE float3 SchlickBSDF_CoatingF(const float3 ks, const float rou
228228
const float cosi = fabs(sampledDir.z);
229229

230230
const float3 wh = normalize(fixedDir + sampledDir);
231-
const float3 S = FresnelSchlick_Evaluate(ks, fabs(dot(sampledDir, wh)));
231+
const float cosi_Schlick = clamp(fabs(dot(sampledDir, wh)), 0.f, 1.f);
232+
const float3 S = FresnelSchlick_Evaluate(ks, cosi_Schlick);
232233

233234
const float G = SchlickDistribution_G(roughness, fixedDir, sampledDir);
234235

src/slg/materials/material.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,8 @@ Spectrum slg::SchlickBSDF_CoatingF(const bool fromLight, const Spectrum &ks, con
503503
const float cosi = fabsf(localSampledDir.z);
504504

505505
const Vector wh(Normalize(localFixedDir + localSampledDir));
506-
const Spectrum S = FresnelTexture::SchlickEvaluate(ks, AbsDot(localSampledDir, wh));
506+
const float cosi_Schlick = Clamp(AbsDot(localSampledDir, wh), 0.f, 1.f);
507+
const Spectrum S = FresnelTexture::SchlickEvaluate(ks, cosi_Schlick);
507508
assert (S.IsValid());
508509

509510
const float G = SchlickDistribution_G(roughness, localFixedDir, localSampledDir);

0 commit comments

Comments
 (0)