Browse Source

WebGLDeferredRenderer: merged bump and morph normals shaders into single normal shader.

alteredq 12 years ago
parent
commit
a8069fe2bd
2 changed files with 59 additions and 74 deletions
  1. 40 51
      examples/js/ShaderDeferred.js
  2. 19 23
      examples/js/renderers/WebGLDeferredRenderer.js

+ 40 - 51
examples/js/ShaderDeferred.js

@@ -162,15 +162,40 @@ THREE.ShaderDeferred = {
 
 
 	"normals" : {
 	"normals" : {
 
 
-		uniforms: { },
+		uniforms: {
+
+			bumpMap: 	  { type: "t", value: null },
+			bumpScale:	  { type: "f", value: 1 },
+			offsetRepeat: { type: "v4", value: new THREE.Vector4( 0, 0, 1, 1 ) }
+
+		},
 
 
 		fragmentShader : [
 		fragmentShader : [
 
 
+			"#ifdef USE_BUMPMAP",
+
+				"#extension GL_OES_standard_derivatives : enable\n",
+
+				"varying vec2 vUv;",
+				"varying vec3 vViewPosition;",
+
+				THREE.ShaderChunk[ "bumpmap_pars_fragment" ],
+
+			"#endif",
+
 			"varying vec3 normalView;",
 			"varying vec3 normalView;",
 
 
 			"void main() {",
 			"void main() {",
 
 
-				"gl_FragColor = vec4( vec3( normalView * 0.5 + 0.5 ), 1.0 );",
+				"vec3 normal = normalize( normalView );",
+
+				"#ifdef USE_BUMPMAP",
+
+					"normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );",
+
+				"#endif",
+
+				"gl_FragColor = vec4( vec3( normal * 0.5 + 0.5 ), 1.0 );",
 
 
 			"}"
 			"}"
 
 
@@ -180,6 +205,15 @@ THREE.ShaderDeferred = {
 
 
 			"varying vec3 normalView;",
 			"varying vec3 normalView;",
 
 
+			"#ifdef USE_BUMPMAP",
+
+				"varying vec2 vUv;",
+				"varying vec3 vViewPosition;",
+
+				"uniform vec4 offsetRepeat;",
+
+			"#endif",
+
 			THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
 			THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
 
 
 			"void main() {",
 			"void main() {",
@@ -204,57 +238,12 @@ THREE.ShaderDeferred = {
 
 
 				"normalView = normalize( normalMatrix * objectNormal );",
 				"normalView = normalize( normalMatrix * objectNormal );",
 
 
-			"}"
-
-		].join("\n")
-
-	},
-
-	"bump" : {
-
-		uniforms: {
-
-			bumpMap: 	  { type: "t", value: null },
-			bumpScale:	  { type: "f", value: 1 },
-			offsetRepeat: { type: "v4", value: new THREE.Vector4( 0, 0, 1, 1 ) }
-
-		},
-
-		fragmentShader : [
-
-			"#extension GL_OES_standard_derivatives : enable\n",
-
-			"varying vec3 normalView;",
-			"varying vec2 vUv;",
-			"varying vec3 vViewPosition;",
+				"#ifdef USE_BUMPMAP",
 
 
-			THREE.ShaderChunk[ "bumpmap_pars_fragment" ],
+					"vUv = uv * offsetRepeat.zw + offsetRepeat.xy;",
+					"vViewPosition = -mvPosition.xyz;",
 
 
-			"void main() {",
-
-				"vec3 normal = normalize( normalView );",
-				"normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );",
-				"gl_FragColor = vec4( vec3( normal * 0.5 + 0.5 ), 1.0 );",
-
-			"}"
-
-		].join("\n"),
-
-		vertexShader : [
-
-			"varying vec3 normalView;",
-			"varying vec2 vUv;",
-			"varying vec3 vViewPosition;",
-
-			"uniform vec4 offsetRepeat;",
-
-			"void main() {",
-
-				"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
-				"gl_Position = projectionMatrix * mvPosition;",
-				"normalView = normalize( normalMatrix * normal );",
-				"vUv = uv * offsetRepeat.zw + offsetRepeat.xy;",
-				"vViewPosition = -mvPosition.xyz;",
+				"#endif",
 
 
 			"}"
 			"}"
 
 

+ 19 - 23
examples/js/renderers/WebGLDeferredRenderer.js

@@ -40,7 +40,6 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 
 
 	var colorShader = THREE.ShaderDeferred[ "color" ];
 	var colorShader = THREE.ShaderDeferred[ "color" ];
 	var normalShader = THREE.ShaderDeferred[ "normals" ];
 	var normalShader = THREE.ShaderDeferred[ "normals" ];
-	var bumpShader = THREE.ShaderDeferred[ "bump" ];
 	var clipDepthShader = THREE.ShaderDeferred[ "clipDepth" ];
 	var clipDepthShader = THREE.ShaderDeferred[ "clipDepth" ];
 
 
 	//
 	//
@@ -193,42 +192,39 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 		//	bump map
 		//	bump map
 		//	bump scale
 		//	bump scale
 
 
-		if ( originalMaterial.bumpMap ) {
+		if ( originalMaterial.morphTargets || originalMaterial.bumpMap ) {
 
 
-			var uniforms = THREE.UniformsUtils.clone( bumpShader.uniforms );
+			var uniforms = THREE.UniformsUtils.clone( normalShader.uniforms );
+			var defines = { "USE_BUMPMAP": !!originalMaterial.bumpMap };
 
 
 			var normalMaterial = new THREE.ShaderMaterial( {
 			var normalMaterial = new THREE.ShaderMaterial( {
 
 
-				uniforms: 		uniforms,
-				vertexShader: 	bumpShader.vertexShader,
-				fragmentShader: bumpShader.fragmentShader,
-				defines:		{ "USE_BUMPMAP": true }
+				uniforms:       uniforms,
+				vertexShader:   normalShader.vertexShader,
+				fragmentShader: normalShader.fragmentShader,
+				shading:		originalMaterial.shading,
+				defines:		defines
 
 
 			} );
 			} );
 
 
-			uniforms.bumpMap.value = originalMaterial.bumpMap;
-			uniforms.bumpScale.value = originalMaterial.bumpScale;
+			if ( originalMaterial.morphTargets ) {
 
 
-			var offset = originalMaterial.bumpMap.offset;
-			var repeat = originalMaterial.bumpMap.repeat;
-
-			uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );
+				normalMaterial.morphTargets = originalMaterial.morphTargets;
+				normalMaterial.morphNormals = originalMaterial.morphNormals;
 
 
-			deferredMaterials.normalMaterial = normalMaterial;
+			}
 
 
-		} else if ( originalMaterial.morphTargets ) {
+			if ( originalMaterial.bumpMap ) {
 
 
-			var normalMaterial = new THREE.ShaderMaterial( {
+				uniforms.bumpMap.value = originalMaterial.bumpMap;
+				uniforms.bumpScale.value = originalMaterial.bumpScale;
 
 
-				uniforms:       THREE.UniformsUtils.clone( normalShader.uniforms ),
-				vertexShader:   normalShader.vertexShader,
-				fragmentShader: normalShader.fragmentShader,
-				shading:		originalMaterial.shading
+				var offset = originalMaterial.bumpMap.offset;
+				var repeat = originalMaterial.bumpMap.repeat;
 
 
-			} );
+				uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );
 
 
-			normalMaterial.morphTargets = originalMaterial.morphTargets;
-			normalMaterial.morphNormals = originalMaterial.morphNormals;
+			}
 
 
 			deferredMaterials.normalMaterial = normalMaterial;
 			deferredMaterials.normalMaterial = normalMaterial;