mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Fix division by zero in clearcoat
Prevents the clearcoat model from generating NaN values at grazing angles
This commit is contained in:
parent
4d1f26e1fd
commit
2096e4c007
2 changed files with 2 additions and 2 deletions
|
|
@ -1448,7 +1448,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, bool is_di
|
||||||
float cLdotH5 = SchlickFresnel(cLdotH);
|
float cLdotH5 = SchlickFresnel(cLdotH);
|
||||||
#endif
|
#endif
|
||||||
float Dr = D_GGX(ccNdotH, mix(0.001, 0.1, clearcoat_roughness));
|
float Dr = D_GGX(ccNdotH, mix(0.001, 0.1, clearcoat_roughness));
|
||||||
float Gr = 0.25 / (cLdotH * cLdotH);
|
float Gr = 0.25 / (cLdotH * cLdotH + 1e-4);
|
||||||
float Fr = mix(.04, 1.0, cLdotH5);
|
float Fr = mix(.04, 1.0, cLdotH5);
|
||||||
float clearcoat_specular_brdf_NL = clearcoat * Gr * Fr * Dr * cNdotL;
|
float clearcoat_specular_brdf_NL = clearcoat * Gr * Fr * Dr * cNdotL;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ void light_compute(hvec3 N, hvec3 L, hvec3 V, half A, hvec3 light_color, bool is
|
||||||
half cLdotH5 = SchlickFresnel(cLdotH);
|
half cLdotH5 = SchlickFresnel(cLdotH);
|
||||||
|
|
||||||
half Dr = D_GGX(ccNdotH, half(mix(half(0.001), half(0.1), clearcoat_roughness)), vertex_normal, H);
|
half Dr = D_GGX(ccNdotH, half(mix(half(0.001), half(0.1), clearcoat_roughness)), vertex_normal, H);
|
||||||
half Gr = half(0.25) / (cLdotH * cLdotH);
|
half Gr = half(0.25) / (cLdotH * cLdotH + half(1e-4));
|
||||||
half Fr = mix(half(0.04), half(1.0), cLdotH5);
|
half Fr = mix(half(0.04), half(1.0), cLdotH5);
|
||||||
half clearcoat_specular_brdf_NL = clearcoat * Gr * Fr * Dr * cNdotL;
|
half clearcoat_specular_brdf_NL = clearcoat * Gr * Fr * Dr * cNdotL;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue