Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uniform sampler2D sampler0;
- uniform sampler2D sampler1;
- uniform sampler2D sampler2;
- uniform float displayWidth;
- uniform float displayHeight;
- uniform float aspectRatio;
- uniform float near;
- uniform float far;
- float readDepth( vec2 coord );
- void main(void)
- {
- float depth = readDepth( gl_TexCoord[0].st );
- float d;
- float pw = 1.0 / displayWidth;
- float ph = 1.0 / displayHeight;
- float aoCap = 1.0;
- float ao = 0.0;
- float aoMultiplier=250.0;
- float depthTolerance = 0.01;
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- pw*=2.0;
- ph*=2.0;
- aoMultiplier/=2.0;
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- pw*=2.0;
- ph*=2.0;
- aoMultiplier/=2.0;
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- pw*=2.0;
- ph*=2.0;
- aoMultiplier/=2.0;
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y+ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x+pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- d=readDepth( vec2(gl_TexCoord[0].x-pw,gl_TexCoord[0].y-ph));
- ao+=min(aoCap,max(0.0,depth-d-depthTolerance) * aoMultiplier);
- ao/=16.0;
- gl_FragColor = vec4(1.0-ao) * texture2D( sampler0, gl_TexCoord[0].st );
- }
- float readDepth( vec2 coord ) {
- float depth = texture2D( sampler1, coord ).x;
- float depth2 = texture2D( sampler2, coord ).x;
- if ( depth2 < 1.0 ) {
- depth = depth2;
- }
- depth = 2.0 * near * far / ( far + near - ( 2.0 * depth - 1.0 ) * ( far - near ) );
- return depth;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement