|
@@ -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 ) {
|