Преглед изворни кода

Added unpackDepthRGBA shader.

This is for easier visual checking of RGBA encoded depth maps.
alteredq пре 13 година
родитељ
комит
f83c6a41ae
2 измењених фајлова са 61 додато и 3 уклоњено
  1. 58 0
      examples/js/ShaderExtras.js
  2. 3 3
      examples/webgl_shadowmap.html

+ 58 - 0
examples/js/ShaderExtras.js

@@ -25,6 +25,7 @@
  *  normalmap
  *  ssao
  *  colorify
+ *  unpackDepthRGBA
  */
 
 THREE.ShaderExtras = {
@@ -1684,6 +1685,63 @@ THREE.ShaderExtras = {
 		].join("\n")
 
 	},
+
+	/* -------------------------------------------------------------------------
+	//	Unpack RGBA depth shader
+	//	- show RGBA encoded depth as monochrome color
+	 ------------------------------------------------------------------------- */
+
+	'unpackDepthRGBA': {
+
+		uniforms: {
+
+			tDiffuse: { type: "t", value: 0, texture: null },
+			opacity:  { type: "f", value: 1.0 }
+
+		},
+
+		vertexShader: [
+
+			"varying vec2 vUv;",
+
+			"void main() {",
+
+				"vUv = vec2( uv.x, 1.0 - uv.y );",
+				"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
+
+			"}"
+
+		].join("\n"),
+
+		fragmentShader: [
+
+			"uniform float opacity;",
+
+			"uniform sampler2D tDiffuse;",
+
+			"varying vec2 vUv;",
+
+			// RGBA depth
+
+			"float unpackDepth( const in vec4 rgba_depth ) {",
+
+				"const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );",
+				"float depth = dot( rgba_depth, bit_shift );",
+				"return depth;",
+
+			"}",
+
+			"void main() {",
+
+				"float depth = 1.0 - unpackDepth( texture2D( tDiffuse, vUv ) );",
+				"gl_FragColor = opacity * vec4( vec3( depth ), 1.0 );",
+
+			"}"
+
+		].join("\n")
+
+	},
+
 	// METHODS
 
 	buildKernel: function( sigma ) {

+ 3 - 3
examples/webgl_shadowmap.html

@@ -109,7 +109,7 @@
 
 				light.castShadow = true;
 
-				light.shadowCameraNear = 100;
+				light.shadowCameraNear = 700;
 				light.shadowCameraFar = camera.far;
 				light.shadowCameraFov = 50;
 
@@ -157,7 +157,7 @@
 				cameraOrtho = new THREE.OrthographicCamera( SCREEN_WIDTH / - 2, SCREEN_WIDTH / 2,  SCREEN_HEIGHT / 2, SCREEN_HEIGHT / - 2, -10, 1000 );
 				cameraOrtho.position.z = 10;
 
-				var shader = THREE.ShaderExtras[ "screen" ];
+				var shader = THREE.ShaderExtras[ "unpackDepthRGBA" ];
 				var uniforms = new THREE.UniformsUtils.clone( shader.uniforms );
 
 				hudMaterial = new THREE.ShaderMaterial( { vertexShader: shader.vertexShader, fragmentShader: shader.fragmentShader, uniforms: uniforms } );
@@ -404,7 +404,7 @@
 
 				// Render debug HUD with shadow map
 
-				//hudMaterial.uniforms.tDiffuse.texture = renderer.shadowMap[ 0 ];
+				//hudMaterial.uniforms.tDiffuse.texture = light.shadowMap;
 				//renderer.render( sceneHUD, cameraOrtho );
 
 			}