The first step for Edge Antialias is an Edge Detect…
Here the initial fragment shader in GLSL:
uniform sampler2D lightingStage; uniform sampler2D colorMap; uniform sampler2D normalMap; uniform sampler2D lastResultMap; float IsEdge(in vec2 coords) { float dxtex = 1.0 / 512.0; float dytex = 1.0 / 512.0; float depth0 = texture2D(colorMap, coords).a; float depth1 = texture2D(colorMap, coords + vec2(dxtex,0.0)).a; float depth2 = texture2D(colorMap, coords + vec2(0.0,-dytex)).a; float depth3 = texture2D(colorMap, coords + vec2(-dxtex,0.0)).a; float depth4 = texture2D(colorMap, coords + vec2(0.0,dytex)).a; float ddx = abs((depth1 - depth0) - (depth0 - depth3)); float ddy = abs((depth2 - depth0) - (depth0 - depth4)); return clamp((ddx + ddy - 0.01) * 100.0, 0.0, 1.0); } void main( ) { float dxtex = 1.0 / 512.0; float dytex = 1.0 / 512.0; float delta = IsEdge(gl_TexCoord[0].st); // Comment out for harder edges delta += IsEdge(gl_TexCoord[0].st + vec2(dxtex,0.0)); delta += IsEdge(gl_TexCoord[0].st + vec2(0.0,-dytex)); delta += IsEdge(gl_TexCoord[0].st + vec2(-dxtex,0.0)); delta += IsEdge(gl_TexCoord[0].st + vec2(0.0,dytex)); delta /= 5.0; // End comment out vec4 color = vec4(0.0, 0.0, 0.0, 1.0); color.r = delta; gl_FragColor = color; }
What the hell is that?
uniform sampler2D lightingStage; uniform sampler2D colorMap; uniform sampler2D normalMap; uniform sampler2D lastResultMap;
In my Deferred Rendering pipeline I have a Post-Procesing Stage, totally dinamic, you can add or remove a set of configurable effects and all are processed one by one. lightingStage is the last stage texture, the original before Post-Procesing. The colorMap texture is ALBEDO, normalMap is normals… and lastResultMap is the last texture generated with the last shader in Post-Procesing Stage.
