import flat_effect; import _ambientocclusion; #pragma MSP stage(fragment) layout(location=0) out float frag_out; void main() { vec3 tex_scale = vec3(1.0/vec2(textureSize(depth, 0)), 0.0); vec3 center = get_fragment_position(texcoord); vec3 left = get_fragment_position(texcoord-tex_scale.xz); vec3 right = get_fragment_position(texcoord+tex_scale.xz); vec3 bottom = get_fragment_position(texcoord-tex_scale.zy); vec3 top = get_fragment_position(texcoord+tex_scale.zy); vec3 normal = normalize(cross(get_slope(left, center, right), get_slope(bottom, center, top))); vec3 tangent = (abs(normal.x)>abs(normal.y) ? vec3(-normal.z, 0.0, normal.x) : vec3(0.0, -normal.z, normal.y)); vec3 binormal = cross(normal, tangent); vec4 rv = texture(rotate, gl_FragCoord.xy/4.0)*2.0-1.0; mat3 transform = mat3(tangent, binormal, normal)*mat3(rv.xy, 0.0, rv.zx, 0.0, 0.0, 0.0, 1.0)*occlusion_radius; float min_depth = project(vec3(center.xy, center.z+occlusion_radius)).z; float occlusion_sum = 0.0; float count = 0.0; for(int i=0; i=min_depth) { if(sample_depth