float occlusion( vec2 uv, vec2 duv, float z ){ float z00 = textureLod( texZ, uv+duv.xy, 0 ).r; float z11 = textureLod( texZ, uv-duv.xy, 0 ).r; duv = vec2(duv.y,-duv.x); float z10 = textureLod( texZ, uv+duv, 0 ).r; float z01 = textureLod( texZ, uv-duv, 0 ).r; float z1 = z00 + z11; float z2 = z10 + z01; //return (z1+z2)*0.25; return ( z - min( z1, z2 )*0.5 )/dot(duv,duv); //return max( z1, z2 )*0.5; }
void main(){ vec2 uv = (gl_FragCoord.xy / resolution).xy; float z = textureLod( texZ, uv, 0 ).r; //float dzsum = 0; //float z = textureLod( texZ, uv, 0 ).r; //float dz = z - textureLod( texZ, uv, 3 ).r; dzsum += dz; //float d = 0.02 + 0.008*sin(uv.x*uv.y*48145.0), w = 0.0; //float d = 0.02 + 0.008*sin(z*48145989.0), w = 0.0; //float d = 0.02 + 0.008*sin(z*481009.0), w = 0.0; //float d = 0.02 + 0.005*cos(dot(uv,vec2(1000.0,500.0))) + 0.005*sin(z*3000000.0); float d = 0.01 * ( 1.0+ 0.25*cos(dot(uv,vec2(2000.0,1000.0)))); //duv = d*fract(sin(1548.0*vec2( uv.x*uv.y, 100* uv.x-uv.y ))*43758.5453); //float phi = 1548748.0 * uv.x*uv.y; vec2 duv = 2*d * vec2( sin( phi ), cos( phi ) ); //duv = vec2( 1.4, 1.4 ); float occ; float occ1 = occlusion( uv, vec2( 0.5*d, 0.0 ), z )*1.0; float occ2 = occlusion( uv, vec2( 1.4*d, 1.4*d ), z )*2.0; float occ3 = occlusion( uv, vec2( 4.0*d, 0.0 ), z )*4.0; //occ = max( occ1, occ2 ); //occ = max( occ , occ3 ); occ = occ1 + occ2 + occ3; //occ = occ1; if( occ > 0 ){ occ = 2.0*occ/(0.2 + occ ); vec3 zcolor = vec3( occ, occ, occ ); color = textureLod( texRGB, uv, 0 ).rgb - zcolor; //color = zcolor; }else{ color = textureLod( texRGB, uv, 0 ).rgb; } }
void main()\n\ {\n\ vec3 tx = normalize(in_texcoords);\n\ out_color = vec4(textureLod(uniform_texture, tx, 0.0).xyz * uniform_strength, 1.0);\n\ }";