Browse Source

One possible workaround for normal map inconsistencies across models.

Use two component normalScale and set eventual flipping per-model. It's quite ugly but it could do the job if we don't find a better solution.

Do not merge yet.

See #2358
alteredq 13 years ago
parent
commit
25bffd0d3b

File diff suppressed because it is too large
+ 16 - 16
build/three.min.js


+ 1 - 1
examples/misc_camera_fly.html

@@ -118,7 +118,7 @@
 				var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
 
 				uniforms[ "tNormal" ].value = normalTexture;
-				uniforms[ "uNormalScale" ].value = 0.85;
+				uniforms[ "uNormalScale" ].value.set( 0.85, 0.85 );
 
 				uniforms[ "tDiffuse" ].value = planetTexture;
 				uniforms[ "tSpecular" ].value = specularTexture;

+ 1 - 1
examples/webgl_loader_ctm.html

@@ -195,7 +195,7 @@
 					var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
 
 					uniforms[ "tNormal" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Infinite-Level_02_Tangent_SmoothUV.jpg" );
-					uniforms[ "uNormalScale" ].value = 0.8;
+					uniforms[ "uNormalScale" ].value.set( 0.8, 0.8 );
 
 					uniforms[ "tDiffuse" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Map-COL.jpg" );
 					uniforms[ "tSpecular" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Map-SPEC.jpg" );

+ 2 - 0
examples/webgl_materials_normalmap.html

@@ -169,6 +169,8 @@
 				uniforms[ "uDisplacementBias" ].value = - 0.428408;
 				uniforms[ "uDisplacementScale" ].value = 2.436143;
 
+				uniforms[ "uNormalScale" ].value.y = -1;
+
 				uniforms[ "uDiffuseColor" ].value.setHex( diffuse );
 				uniforms[ "uSpecularColor" ].value.setHex( specular );
 				uniforms[ "uAmbientColor" ].value.setHex( ambient );

+ 1 - 1
examples/webgl_materials_normalmap2.html

@@ -125,7 +125,7 @@
 				var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
 
 				uniforms[ "tNormal" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Infinite-Level_02_Tangent_SmoothUV.jpg" );
-				uniforms[ "uNormalScale" ].value = 0.8;
+				uniforms[ "uNormalScale" ].value.set( 0.8, 0.8 );
 
 				uniforms[ "tDiffuse" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Map-COL.jpg" );
 				uniforms[ "tSpecular" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Map-SPEC.jpg" );

+ 1 - 1
examples/webgl_postprocessing.html

@@ -328,7 +328,7 @@
 				var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
 
 				uniforms[ "tNormal" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Infinite-Level_02_Tangent_SmoothUV.jpg" );
-				uniforms[ "uNormalScale" ].value = 0.75;
+				uniforms[ "uNormalScale" ].value.set( 0.75, 0.75 );
 
 				uniforms[ "tDiffuse" ].value = THREE.ImageUtils.loadTexture( "obj/leeperrysmith/Map-COL.jpg" );
 

+ 1 - 1
examples/webgl_trackballcamera_earth.html

@@ -133,7 +133,7 @@
 				uniforms = THREE.UniformsUtils.clone( shader.uniforms );
 
 				uniforms[ "tNormal" ].value = normalTexture;
-				uniforms[ "uNormalScale" ].value = 0.85;
+				uniforms[ "uNormalScale" ].value.set( 0.85, 0.85 );
 
 				uniforms[ "tDiffuse" ].value = planetTexture;
 				uniforms[ "tSpecular" ].value = specularTexture;

+ 2 - 2
src/extras/ShaderUtils.js

@@ -121,7 +121,7 @@ THREE.ShaderUtils = {
 				"tSpecular"	   : { type: "t", value: null },
 				"tAO"		   : { type: "t", value: null },
 
-				"uNormalScale": { type: "f", value: 1.0 },
+				"uNormalScale": { type: "v2", value: new THREE.Vector2( 1, 1 ) },
 
 				"uDisplacementBias": { type: "f", value: 0.0 },
 				"uDisplacementScale": { type: "f", value: 1.0 },
@@ -165,7 +165,7 @@ THREE.ShaderUtils = {
 
 				"uniform samplerCube tCube;",
 
-				"uniform float uNormalScale;",
+				"uniform vec2 uNormalScale;",
 
 				"uniform bool useRefract;",
 				"uniform float uRefractionRatio;",

+ 1 - 1
src/loaders/GeometryLoader.js

@@ -336,7 +336,7 @@ THREE.GeometryLoader.prototype = {
 
 					if ( m.mapNormalFactor ) {
 
-						uniforms[ "uNormalScale" ].value = m.mapNormalFactor;
+						uniforms[ "uNormalScale" ].value.set( m.mapNormalFactor, m.mapNormalFactor );
 
 					}
 

+ 1 - 1
src/loaders/Loader.js

@@ -346,7 +346,7 @@ THREE.Loader.prototype = {
 
 			if ( m.mapNormalFactor ) {
 
-				uniforms[ "uNormalScale" ].value = m.mapNormalFactor;
+				uniforms[ "uNormalScale" ].value.set( m.mapNormalFactor, m.mapNormalFactor );
 
 			}
 

+ 1 - 1
src/loaders/SceneLoader.js

@@ -729,7 +729,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 
 			if ( m.parameters.normalMapFactor ) {
 
-				uniforms[ "uNormalScale" ].value = m.parameters.normalMapFactor;
+				uniforms[ "uNormalScale" ].value.set( m.parameters.normalMapFactor, m.parameters.normalMapFactor );
 
 			}
 

+ 3 - 3
src/materials/MeshPhongMaterial.js

@@ -18,7 +18,7 @@
  *  bumpScale: <float>,
  *
  *  normalMap: new THREE.Texture( <Image> ),
- *  normalScale: <float>,
+ *  normalScale: <Vector2>,
  *
  *  specularMap: new THREE.Texture( <Image> ),
  *
@@ -68,7 +68,7 @@ THREE.MeshPhongMaterial = function ( parameters ) {
 	this.bumpScale = 1;
 
 	this.normalMap = null;
-	this.normalScale = 1;
+	this.normalScale = new THREE.Vector2( 1, 1 );
 
 	this.specularMap = null;
 
@@ -124,7 +124,7 @@ THREE.MeshPhongMaterial.prototype.clone = function () {
 	material.bumpScale = this.bumpScale;
 
 	material.normalMap = this.normalMap;
-	material.normalScale = this.normalScale;
+	material.normalScale.copy( this.normalScale );
 
 	material.specularMap = this.specularMap;
 

+ 1 - 1
src/renderers/WebGLRenderer.js

@@ -4949,7 +4949,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		if ( material.normalMap ) {
 
 			uniforms.normalMap.value = material.normalMap;
-			uniforms.normalScale.value = material.normalScale;
+			uniforms.normalScale.value.copy( material.normalScale );
 
 		}
 

+ 2 - 2
src/renderers/WebGLShaders.js

@@ -375,7 +375,7 @@ THREE.ShaderChunk = {
 		"#ifdef USE_NORMALMAP",
 
 			"uniform sampler2D normalMap;",
-			"uniform float normalScale;",
+			"uniform vec2 normalScale;",
 
 			// Per-Pixel Tangent Space Normal Mapping
 			// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
@@ -1810,7 +1810,7 @@ THREE.UniformsLib = {
 	normalmap: {
 
 		"normalMap" : { type: "t", value: null },
-		"normalScale" : { type: "f", value: 1 }
+		"normalScale" : { type: "v2", value: new THREE.Vector2( 1, 1 ) }
 	},
 
 	fog : {

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