Browse Source

(Mostly) Working independent scale

Scale is fine as long as cc scale <= normal scale
arobertson0 6 years ago
parent
commit
244d91aa8c

File diff suppressed because it is too large
+ 15 - 7
build/three.js


+ 15 - 7
build/three.module.js

@@ -15468,7 +15468,7 @@ var clearcoat_normal_fragment_maps = /* glsl */ `
 
 
 		mat3 vTBN = mat3( tangent, bitangent, clearCoatNormal );
 		mat3 vTBN = mat3( tangent, bitangent, clearCoatNormal );
 		vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
 		vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
-		mapN.xy = normalScale * mapN.xy;
+		mapN.xy = clearCoatNormalScale * mapN.xy;
 		clearCoatNormal = normalize( vTBN * mapN );
 		clearCoatNormal = normalize( vTBN * mapN );
 
 
 	#else
 	#else
@@ -15545,7 +15545,7 @@ var clearcoat_normalmap_pars_fragment = /* glsl */ `
 #ifdef USE_NORMALMAP
 #ifdef USE_NORMALMAP
 
 
 	//uniform sampler2D normalMap;
 	//uniform sampler2D normalMap;
-	//uniform vec2 normalScale;
+	uniform vec2 clearCoatNormalScale;
 
 
 		// Per-Pixel Tangent Space Normal Mapping
 		// Per-Pixel Tangent Space Normal Mapping
 		// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
 		// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
@@ -15568,7 +15568,7 @@ var clearcoat_normalmap_pars_fragment = /* glsl */ `
 
 
 			vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
 			vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
 
 
-			mapN.xy *= normalScale;
+			mapN.xy *= clearCoatNormalScale;
 			mapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );
 			mapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );
 
 
 			return normalize( tsn * mapN );
 			return normalize( tsn * mapN );
@@ -26672,11 +26672,19 @@ function WebGLRenderer( parameters ) {
 		uniforms.clearCoat.value = material.clearCoat;
 		uniforms.clearCoat.value = material.clearCoat;
 		uniforms.clearCoatRoughness.value = material.clearCoatRoughness;
 		uniforms.clearCoatRoughness.value = material.clearCoatRoughness;
 
 
-		uniforms.clearCoatGeometryNormals.value = material.clearCoatGeometryNormals;
-		uniforms.clearCoatNormalMap.value = material.clearCoatNormalMap;
-		uniforms.clearCoatNormalScale.value = material.clearCoatNormalScale;
-		uniforms.clearCoatGeometryNormals.value = material.clearCoatGeometryNormals;
+		if ( material.normalMap || material.clearCoatNormalMap) {
+
+			if(material.clearCoatNormalMap){
+				uniforms.clearCoatNormalMap.value = material.clearCoatNormalMap;
+			}
 
 
+			uniforms.clearCoatNormalScale.value.copy( material.clearCoatNormalScale );
+			if ( material.side === BackSide ) uniforms.clearCoatNormalScale.value.negate();
+
+		}
+
+		uniforms.clearCoatGeometryNormals.value = material.clearCoatGeometryNormals;
+		
 	}
 	}
 
 
 	function refreshUniformsMatcap( uniforms, material ) {
 	function refreshUniformsMatcap( uniforms, material ) {

+ 1 - 1
examples/_.html

@@ -73,7 +73,7 @@
 		const sphereSpacing = 1.25 * sphereSize * 2;
 		const sphereSpacing = 1.25 * sphereSize * 2;
 
 
 		const variationsX = [
 		const variationsX = [
-			(mat, scale, map) => { },
+			(mat, scale, map) => { mat.clearCoatNormalScale.copy(	mat.normalScale); },
 			(mat, scale, map) => { mat.clearCoatNormalScale = new THREE.Vector2(scale, scale); },
 			(mat, scale, map) => { mat.clearCoatNormalScale = new THREE.Vector2(scale, scale); },
 			(mat, scale, map) => {
 			(mat, scale, map) => {
 				mat.clearCoatNormalScale = new THREE.Vector2(scale, scale);
 				mat.clearCoatNormalScale = new THREE.Vector2(scale, scale);

+ 12 - 4
src/renderers/WebGLRenderer.js

@@ -2275,11 +2275,19 @@ function WebGLRenderer( parameters ) {
 		uniforms.clearCoat.value = material.clearCoat;
 		uniforms.clearCoat.value = material.clearCoat;
 		uniforms.clearCoatRoughness.value = material.clearCoatRoughness;
 		uniforms.clearCoatRoughness.value = material.clearCoatRoughness;
 
 
-		uniforms.clearCoatGeometryNormals.value = material.clearCoatGeometryNormals;
-		uniforms.clearCoatNormalMap.value = material.clearCoatNormalMap;
-		uniforms.clearCoatNormalScale.value = material.clearCoatNormalScale;
-		uniforms.clearCoatGeometryNormals.value = material.clearCoatGeometryNormals;
+		if ( material.normalMap || material.clearCoatNormalMap) {
+
+			if(material.clearCoatNormalMap){
+				uniforms.clearCoatNormalMap.value = material.clearCoatNormalMap;
+			}
 
 
+			uniforms.clearCoatNormalScale.value.copy( material.clearCoatNormalScale );
+			if ( material.side === BackSide ) uniforms.clearCoatNormalScale.value.negate();
+
+		}
+
+		uniforms.clearCoatGeometryNormals.value = material.clearCoatGeometryNormals;
+		
 	}
 	}
 
 
 	function refreshUniformsMatcap( uniforms, material ) {
 	function refreshUniformsMatcap( uniforms, material ) {

+ 1 - 1
src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js

@@ -5,7 +5,7 @@ export default /* glsl */ `
 
 
 		mat3 vTBN = mat3( tangent, bitangent, clearCoatNormal );
 		mat3 vTBN = mat3( tangent, bitangent, clearCoatNormal );
 		vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
 		vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
-		mapN.xy = normalScale * mapN.xy;
+		mapN.xy = clearCoatNormalScale * mapN.xy;
 		clearCoatNormal = normalize( vTBN * mapN );
 		clearCoatNormal = normalize( vTBN * mapN );
 
 
 	#else
 	#else

+ 2 - 2
src/renderers/shaders/ShaderChunk/clearcoat_normalmap_pars_fragment.glsl.js

@@ -2,7 +2,7 @@ export default /* glsl */ `
 #ifdef USE_NORMALMAP
 #ifdef USE_NORMALMAP
 
 
 	//uniform sampler2D normalMap;
 	//uniform sampler2D normalMap;
-	//uniform vec2 clearCoatNormalScale;
+	uniform vec2 clearCoatNormalScale;
 
 
 		// Per-Pixel Tangent Space Normal Mapping
 		// Per-Pixel Tangent Space Normal Mapping
 		// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
 		// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
@@ -25,7 +25,7 @@ export default /* glsl */ `
 
 
 			vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
 			vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
 
 
-			mapN.xy *= normalScale;
+			mapN.xy *= clearCoatNormalScale;
 			mapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );
 			mapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );
 
 
 			return normalize( tsn * mapN );
 			return normalize( tsn * mapN );

Some files were not shown because too many files changed in this diff