57 lines
		
	
	
		
			918 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			918 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** | ||
|  |  * Depth-of-field shader using mipmaps | ||
|  |  * - from Matt Handley @applmak | ||
|  |  * - requires power-of-2 sized render target with enabled mipmaps | ||
|  |  */ | ||
|  | 
 | ||
|  | const DOFMipMapShader = { | ||
|  | 
 | ||
|  | 	name: 'DOFMipMapShader', | ||
|  | 
 | ||
|  | 	uniforms: { | ||
|  | 
 | ||
|  | 		'tColor': { value: null }, | ||
|  | 		'tDepth': { value: null }, | ||
|  | 		'focus': { value: 1.0 }, | ||
|  | 		'maxblur': { value: 1.0 } | ||
|  | 
 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	vertexShader: /* glsl */`
 | ||
|  | 
 | ||
|  | 		varying vec2 vUv; | ||
|  | 
 | ||
|  | 		void main() { | ||
|  | 
 | ||
|  | 			vUv = uv; | ||
|  | 			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); | ||
|  | 
 | ||
|  | 		}`,
 | ||
|  | 
 | ||
|  | 	fragmentShader: /* glsl */`
 | ||
|  | 
 | ||
|  | 		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; | ||
|  | 
 | ||
|  | 		}`
 | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | export { DOFMipMapShader }; |