From b73ebd29f3e271ca1629ff0a91b6881698ec45a0 Mon Sep 17 00:00:00 2001 From: Chris Hayes Date: Fri, 25 Apr 2025 02:01:26 -0400 Subject: [PATCH] fix: clamp cosTheta in getFresnel to avoid bad specularity values --- src/scene/shader-lib/chunks/lit/frag/fresnelSchlick.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/scene/shader-lib/chunks/lit/frag/fresnelSchlick.js b/src/scene/shader-lib/chunks/lit/frag/fresnelSchlick.js index 608a13c3189..6b2547fd50c 100644 --- a/src/scene/shader-lib/chunks/lit/frag/fresnelSchlick.js +++ b/src/scene/shader-lib/chunks/lit/frag/fresnelSchlick.js @@ -9,7 +9,8 @@ vec3 getFresnel( float iridescenceIntensity #endif ) { - float fresnel = pow(1.0 - max(cosTheta, 0.0), 5.0); + float safeCosTheta = clamp(cosTheta, 0.0, 1.0); + float fresnel = pow(1.0 - safeCosTheta, 5.0); float glossSq = gloss * gloss; vec3 ret = specularity + (max(vec3(glossSq), specularity) - specularity) * fresnel; #if defined(LIT_IRIDESCENCE) @@ -20,7 +21,8 @@ vec3 getFresnel( } float getFresnelCC(float cosTheta) { - float fresnel = pow(1.0 - max(cosTheta, 0.0), 5.0); + float safeCosTheta = clamp(cosTheta, 0.0, 1.0); + float fresnel = pow(1.0 - safeCosTheta, 5.0); return 0.04 + (1.0 - 0.04) * fresnel; } `;