浏览代码

Skin shader: Removed uniform uPixelSize.

tschw 10 年之前
父节点
当前提交
e35a4ed601
共有 2 个文件被更改,包括 10 次插入25 次删除
  1. 9 13
      examples/js/ShaderSkin.js
  2. 1 12
      examples/webgl_materials_skin.html

+ 9 - 13
examples/js/ShaderSkin.js

@@ -357,9 +357,7 @@ THREE.ShaderSkin = {
 				"opacity": 	  { type: "f", value: 1 },
 
 				"uRoughness": 	  		{ type: "f", value: 0.15 },
-				"uSpecularBrightness": 	{ type: "f", value: 0.75 },
-
-				"uPixelSize":	{ type: "f", value: 0.01 }
+				"uSpecularBrightness": 	{ type: "f", value: 0.75 }
 
 			}
 
@@ -387,7 +385,6 @@ THREE.ShaderSkin = {
 			"uniform sampler2D tBeckmann;",
 
 			"uniform float uNormalScale;",
-			"uniform float uPixelSize;",
 
 			"varying vec3 vNormal;",
 			"varying vec2 vUv;",
@@ -463,22 +460,21 @@ THREE.ShaderSkin = {
 
 				// normal mapping
 
-				"vec2 uz = vec2( vUv.x, vViewPosition.z );",
-				"vec2 uzDx = dFdx( uz ), uzDy = dFdy( uz );",
-				"vec2 tangent2D = normalize( vec2( uzDx.x, uzDy.x ) );",
-				"vec2 zVec2D = vec2( uzDx.y, uzDy.y );",
-				"vec3 tangent = vec3( tangent2D * uPixelSize, dot( tangent2D, zVec2D ) );",
-				"vec3 binormal = normalize( cross( vNormal, tangent ) );",
-				"tangent = cross( binormal, vNormal );",
-				"mat3 tsb = mat3( tangent, binormal, vNormal );",
+				"vec4 posAndU = vec4( -vViewPosition, vUv.x );",
+				"vec4 posAndU_dx = dFdx( posAndU ),  posAndU_dy = dFdy( posAndU );",
+				"vec3 tangent = posAndU_dx.w * posAndU_dx.xyz + posAndU_dy.w * posAndU_dy.xyz;",
+				"vec3 normal = normalize( vNormal );",
+				"vec3 binormal = normalize( cross( tangent, normal ) );",
+				"tangent = cross( normal, binormal );",	// no normalization required
+				"mat3 tsb = mat3( tangent, binormal, normal );",
 
 				"vec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;",
 				"normalTex.xy *= uNormalScale;",
 				"normalTex = normalize( normalTex );",
 
 				"vec3 finalNormal = tsb * normalTex;",
+				"normal = normalize( finalNormal );",
 
-				"vec3 normal = normalize( finalNormal );",
 				"vec3 viewerDirection = normalize( vViewPosition );",
 
 				// point lights

+ 1 - 12
examples/webgl_materials_skin.html

@@ -87,8 +87,6 @@
 			var windowHalfX = window.innerWidth / 2;
 			var windowHalfY = window.innerHeight / 2;
 
-			var pixelSizeUniform = { type: 'f', value: 0.001 };
-
 			var firstPass = true;
 
 			init();
@@ -142,9 +140,6 @@
 				uniforms[ "tNormal" ].value = uniformsUV[ "tNormal" ].value;
 				uniforms[ "passID" ].value = 1;
 
-				// let those refer to the same object for central control
-				uniformsUV[ "pixelSize" ] = pixelSizeUniform;
-				uniforms[ "pixelSize" ] = pixelSizeUniform;
 
 				var parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true, derivatives: true };
 				var parametersUV = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShaderUV, uniforms: uniformsUV, lights: true, derivatives: true };
@@ -162,10 +157,9 @@
 				renderer = new THREE.WebGLRenderer( { antialias: false } );
 				renderer.setClearColor( 0x050505 );
 				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.autoClear = false;
 
-				onWindowResize(); // sets size
-
 				container.appendChild( renderer.domElement );
 
 				// STATS
@@ -274,11 +268,6 @@
 				camera.aspect = window.innerWidth / window.innerHeight;
 				camera.updateProjectionMatrix();
 
-				var projection00 = camera.projectionMatrix.elements[0];
-				// == 1 / windowHalfX, in view space, assuming near == 1
-
-				pixelSizeUniform.value = 1 / ( projection00 * windowHalfX );
-
 				renderer.setSize( window.innerWidth, window.innerHeight );
 
 			}