2
0
Эх сурвалжийг харах

Added .clearcoatF0, .clearcoatF90 (#22391)

WestLangley 3 жил өмнө
parent
commit
cd862cac0d

+ 3 - 1
src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js

@@ -42,7 +42,7 @@ material.roughness = min( material.roughness, 1.0 );
 
 
 #else
 #else
 
 
-	material.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );
+	material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );
 	material.specularF90 = 1.0;
 	material.specularF90 = 1.0;
 
 
 #endif
 #endif
@@ -51,6 +51,8 @@ material.roughness = min( material.roughness, 1.0 );
 
 
 	material.clearcoat = clearcoat;
 	material.clearcoat = clearcoat;
 	material.clearcoatRoughness = clearcoatRoughness;
 	material.clearcoatRoughness = clearcoatRoughness;
+	material.clearcoatF0 = vec3( 0.04 );
+	material.clearcoatF90 = 1.0;
 
 
 	#ifdef USE_CLEARCOATMAP
 	#ifdef USE_CLEARCOATMAP
 
 

+ 12 - 11
src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js

@@ -6,21 +6,22 @@ struct PhysicalMaterial {
 	vec3 specularColor;
 	vec3 specularColor;
 	float specularF90;
 	float specularF90;
 
 
-#ifdef CLEARCOAT
-	float clearcoat;
-	float clearcoatRoughness;
-#endif
-#ifdef USE_SHEEN
-	vec3 sheenTint;
-#endif
+	#ifdef CLEARCOAT
+		float clearcoat;
+		float clearcoatRoughness;
+		vec3 clearcoatF0;
+		float clearcoatF90;
+	#endif
+
+	#ifdef USE_SHEEN
+		vec3 sheenTint;
+	#endif
 
 
 };
 };
 
 
 // temporary
 // temporary
 vec3 clearcoatSpecular = vec3( 0.0 );
 vec3 clearcoatSpecular = vec3( 0.0 );
 
 
-#define DEFAULT_SPECULAR_COEFFICIENT 0.04
-
 // Analytical approximation of the DFG LUT, one half of the
 // Analytical approximation of the DFG LUT, one half of the
 // split-sum approximation used in indirect specular lighting.
 // split-sum approximation used in indirect specular lighting.
 // via 'environmentBRDF' from "Physically Based Shading on Mobile"
 // via 'environmentBRDF' from "Physically Based Shading on Mobile"
@@ -137,7 +138,7 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricC
 
 
 		#endif
 		#endif
 
 
-		clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), 1.0, material.clearcoatRoughness );
+		clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
 
 
 	#endif
 	#endif
 
 
@@ -164,7 +165,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
 
 
 	#ifdef CLEARCOAT
 	#ifdef CLEARCOAT
 
 
-		clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, vec3( DEFAULT_SPECULAR_COEFFICIENT ), 1.0, material.clearcoatRoughness );
+		clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
 
 
 	#endif
 	#endif
 
 

+ 1 - 1
src/renderers/shaders/ShaderLib/meshphysical_frag.glsl.js

@@ -111,7 +111,7 @@ void main() {
 
 
 		float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );
 		float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );
 
 
-		vec3 Fcc = F_Schlick( vec3( DEFAULT_SPECULAR_COEFFICIENT ), 1.0, dotNVcc );
+		vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
 
 
 		outgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;
 		outgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;