Skip to content
Snippets Groups Projects
Commit 5a14fcab authored by AronKovacs's avatar AronKovacs
Browse files

small ssao changes, e.g. better vec2 noise

parent 560e4077
No related branches found
No related tags found
No related merge requests found
......@@ -27,12 +27,12 @@ float noise(const in vec2 coords) {
float b = 78.233;
float c = 43758.5453;
float dt = dot(coords, vec2(a,b));
float sn = mod(dt, 3.14159);
float sn = mod(dt, PI);
return abs(fract(sin(sn) * c)); // is abs necessary?
}
vec2 getNoiseVec2(const in vec2 coords) {
return vec2(noise(coords), noise(coords) + 2.71828);
return vec2(noise(coords), noise(coords + vec2(PI, 2.71828)));
}
bool isBackground(const in float depth) {
......@@ -53,8 +53,10 @@ vec3 normalFromDepth(const in float depth, const in float depth1, const in float
return normalize(normal);
}
// StarCraft II Ambient Occlusion by [Filion and McNaughton 2008]
void main(void) {
vec2 selfCoords = gl_FragCoord.xy / uTexSize;
vec2 invTexSize = 1.0 / uTexSize;
vec2 selfCoords = gl_FragCoord.xy * invTexSize;
float selfDepth = getDepth(selfCoords);
vec2 selfPackedDepth = packUnitIntervalToRG(selfDepth);
......@@ -64,8 +66,8 @@ void main(void) {
return;
}
vec2 offset1 = vec2(0.0, 0.001);
vec2 offset2 = vec2(0.001, 0.0);
vec2 offset1 = vec2(0.0, invTexSize.y);
vec2 offset2 = vec2(invTexSize.x, 0.0);
float selfDepth1 = getDepth(selfCoords + offset1);
float selfDepth2 = getDepth(selfCoords + offset2);
......@@ -89,8 +91,7 @@ void main(void) {
offset.xyz /= offset.w;
offset.xyz = offset.xyz * 0.5 + 0.5;
float sampleDepth = getDepth(offset.xy);
float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, getDepth(offset.xy)), uInvProjection).z;
occlusion += (sampleViewZ >= sampleViewPos.z + uBias ? 1.0 : 0.0) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZ));
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment