|
@@ -343,6 +343,63 @@ THREE.ShaderExtras = {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ /* -------------------------------------------------------------------------
|
|
|
+ // Depth-of-field shader using mipmaps
|
|
|
+ // - from Matt Handley @applmak
|
|
|
+ // - requires power-of-2 sized render target with enabled mipmaps
|
|
|
+ ------------------------------------------------------------------------- */
|
|
|
+
|
|
|
+ 'dofmipmap': {
|
|
|
+
|
|
|
+ uniforms: {
|
|
|
+
|
|
|
+ tColor: { type: "t", value: 0, texture: null },
|
|
|
+ tDepth: { type: "t", value: 1, texture: null },
|
|
|
+ focus: { type: "f", value: 1.0 },
|
|
|
+ maxblur: { 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 focus;",
|
|
|
+ "uniform float maxblur;",
|
|
|
+
|
|
|
+ "uniform sampler2D tColor;",
|
|
|
+ "uniform sampler2D tDepth;",
|
|
|
+
|
|
|
+ "varying vec2 vUv;",
|
|
|
+
|
|
|
+ "void main() {",
|
|
|
+
|
|
|
+ "vec4 depth = texture2D( tDepth, vUv );",
|
|
|
+
|
|
|
+ "float factor = depth.x - focus;",
|
|
|
+
|
|
|
+ "vec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );",
|
|
|
+
|
|
|
+ "gl_FragColor = col;",
|
|
|
+ "gl_FragColor.a = 1.0;",
|
|
|
+
|
|
|
+ "}"
|
|
|
+
|
|
|
+ ].join("\n")
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
/* -------------------------------------------------------------------------
|
|
|
// Sepia tone shader
|
|
|
// - based on glfx.js sepia shader
|