提交 839e964e 编写于 作者: M Mr.doob

Merge pull request #7126 from tschw/SkinTangents

Skin shader: Removed uniform uPixelSize.
...@@ -357,9 +357,7 @@ THREE.ShaderSkin = { ...@@ -357,9 +357,7 @@ THREE.ShaderSkin = {
"opacity": { type: "f", value: 1 }, "opacity": { type: "f", value: 1 },
"uRoughness": { type: "f", value: 0.15 }, "uRoughness": { type: "f", value: 0.15 },
"uSpecularBrightness": { type: "f", value: 0.75 }, "uSpecularBrightness": { type: "f", value: 0.75 }
"uPixelSize": { type: "f", value: 0.01 }
} }
...@@ -387,7 +385,6 @@ THREE.ShaderSkin = { ...@@ -387,7 +385,6 @@ THREE.ShaderSkin = {
"uniform sampler2D tBeckmann;", "uniform sampler2D tBeckmann;",
"uniform float uNormalScale;", "uniform float uNormalScale;",
"uniform float uPixelSize;",
"varying vec3 vNormal;", "varying vec3 vNormal;",
"varying vec2 vUv;", "varying vec2 vUv;",
...@@ -463,22 +460,21 @@ THREE.ShaderSkin = { ...@@ -463,22 +460,21 @@ THREE.ShaderSkin = {
// normal mapping // normal mapping
"vec2 uz = vec2( vUv.x, vViewPosition.z );", "vec4 posAndU = vec4( -vViewPosition, vUv.x );",
"vec2 uzDx = dFdx( uz ), uzDy = dFdy( uz );", "vec4 posAndU_dx = dFdx( posAndU ), posAndU_dy = dFdy( posAndU );",
"vec2 tangent2D = normalize( vec2( uzDx.x, uzDy.x ) );", "vec3 tangent = posAndU_dx.w * posAndU_dx.xyz + posAndU_dy.w * posAndU_dy.xyz;",
"vec2 zVec2D = vec2( uzDx.y, uzDy.y );", "vec3 normal = normalize( vNormal );",
"vec3 tangent = vec3( tangent2D * uPixelSize, dot( tangent2D, zVec2D ) );", "vec3 binormal = normalize( cross( tangent, normal ) );",
"vec3 binormal = normalize( cross( vNormal, tangent ) );", "tangent = cross( normal, binormal );", // no normalization required
"tangent = cross( binormal, vNormal );", "mat3 tsb = mat3( tangent, binormal, normal );",
"mat3 tsb = mat3( tangent, binormal, vNormal );",
"vec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;", "vec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;",
"normalTex.xy *= uNormalScale;", "normalTex.xy *= uNormalScale;",
"normalTex = normalize( normalTex );", "normalTex = normalize( normalTex );",
"vec3 finalNormal = tsb * normalTex;", "vec3 finalNormal = tsb * normalTex;",
"normal = normalize( finalNormal );",
"vec3 normal = normalize( finalNormal );",
"vec3 viewerDirection = normalize( vViewPosition );", "vec3 viewerDirection = normalize( vViewPosition );",
// point lights // point lights
......
...@@ -87,8 +87,6 @@ ...@@ -87,8 +87,6 @@
var windowHalfX = window.innerWidth / 2; var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2; var windowHalfY = window.innerHeight / 2;
var pixelSizeUniform = { type: 'f', value: 0.001 };
var firstPass = true; var firstPass = true;
init(); init();
...@@ -142,9 +140,6 @@ ...@@ -142,9 +140,6 @@
uniforms[ "tNormal" ].value = uniformsUV[ "tNormal" ].value; uniforms[ "tNormal" ].value = uniformsUV[ "tNormal" ].value;
uniforms[ "passID" ].value = 1; 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 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 }; var parametersUV = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShaderUV, uniforms: uniformsUV, lights: true, derivatives: true };
...@@ -162,10 +157,9 @@ ...@@ -162,10 +157,9 @@
renderer = new THREE.WebGLRenderer( { antialias: false } ); renderer = new THREE.WebGLRenderer( { antialias: false } );
renderer.setClearColor( 0x050505 ); renderer.setClearColor( 0x050505 );
renderer.setPixelRatio( window.devicePixelRatio ); renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.autoClear = false; renderer.autoClear = false;
onWindowResize(); // sets size
container.appendChild( renderer.domElement ); container.appendChild( renderer.domElement );
// STATS // STATS
...@@ -274,11 +268,6 @@ ...@@ -274,11 +268,6 @@
camera.aspect = window.innerWidth / window.innerHeight; camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix(); 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 ); renderer.setSize( window.innerWidth, window.innerHeight );
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册