You can now change the quality of SSAO by sliding the SSAO Quality

This commit is contained in:
Teejoon
2016-02-26 11:51:20 +01:00
parent 748a178801
commit f56705d921
16 changed files with 334 additions and 101 deletions
+2 -1
View File
@@ -13,6 +13,7 @@ uniform vec4 AmbientColor;
uniform float FillPercentage;
uniform float GlowIntensity = 10;
uniform vec3 CameraPosition;
uniform int SSAOQuality;
uniform vec2 DiffuseUVRepeat;
uniform vec2 NormalUVRepeat;
@@ -125,7 +126,7 @@ vec4 CalcNormalMappedValue(vec3 normal, vec3 tangent, vec3 bitangent, vec2 textu
void main()
{
float ao = texelFetch(AOTexture, ivec2(gl_FragCoord.xy), 0).r;
float ao = texelFetch(AOTexture, ivec2(gl_FragCoord.xy) >> int(SSAOQuality), 0).r;
ao = (clamp(1.0 - (1.0 - ao), 0.0, 1.0) + MIN_AMBIENT_LIGHT) / (1.0 + MIN_AMBIENT_LIGHT);
vec4 diffuseTexel = texture2D(DiffuseTexture, Input.TextureCoordinate * DiffuseUVRepeat);
vec4 glowTexel = texture2D(GlowMapTexture, Input.TextureCoordinate * GlowUVRepeat);
@@ -11,6 +11,7 @@ uniform vec4 DiffuseColor;
uniform vec4 FillColor;
uniform vec4 Color;
uniform vec4 AmbientColor;
uniform int SSAOQuality;
//Get bineded at the same time as the textures
uniform vec2 DiffuseUVRepeat1;
@@ -177,7 +178,7 @@ vec4 CalcBlendedNormal(vec4 blendValue, sampler2D R, sampler2D G, sampler2D B,
void main()
{
float ao = texelFetch(AOTexture, ivec2(gl_FragCoord.xy), 0).r;
float ao = texelFetch(AOTexture, ivec2(gl_FragCoord.xy) >> int(SSAOQuality), 0).r;
ao = (clamp(1.0 - (1.0 - ao), 0.0, 1.0) + MIN_AMBIENT_LIGHT) / (1.0 + MIN_AMBIENT_LIGHT);
vec4 splatTexel = texture2D(SplatMapTexture, Input.TextureCoordinate);
+7 -12
View File
@@ -2,11 +2,11 @@
//Number of samples per pixel
uniform int uNumOfSamples;
//#define NUM_SAMPLES (11)
//#define uNumOfSamples (11)
//Number of turns around the cirle
uniform int uNumOfTurns;
//#define NUM_TURNS (7)
//#define uNumOfTurns (7)
layout (binding = 0) uniform sampler2D ViewSpaceZ;
@@ -16,15 +16,16 @@ uniform float uProjScale;
//#define ProjScale 500
uniform float uRadius;
//#define Radius 1.0f
//#define uRadius 1.0f
uniform float uBias;
//#define Bias 0.012f
//#define uBias 0.05f
uniform float uContrast;
//#define IntensityDivR6 1
//#define uContrast 1.5f
uniform float uIntensityScale;
//#define uIntensityScale 1.0f
out float AO;
@@ -88,13 +89,7 @@ void main() {
vec3 origin = getVSPosition(originScreenCoord);
float radius;
if(origin.z < uRadius){
radius = origin.z;
} else {
radius = uRadius;
}
float radius = min(origin.z, uRadius);
vec3 originNormal = getVSFaceNormal(origin);
+5
View File
@@ -2,7 +2,12 @@
layout (location = 0) in vec3 Position;
out VertexData{
vec2 TextureCoordinate;
}Output;
void main()
{
gl_Position = vec4(Position, 1.0);
Output.TextureCoordinate = (vec2(Position) + 1) / 2;
}
+5 -1
View File
@@ -3,11 +3,15 @@
layout (binding = 0) uniform sampler2D DepthBuffer;
uniform vec3 ClipInfo;
in VertexData{
vec2 TextureCoordinate;
}Input;
out float depthLinear;
//Just for Debug, should be depthLinear
//out vec4 fragmentColor;
void main() {
float depthSample = texelFetch(DepthBuffer, ivec2(gl_FragCoord.xy), 0).r;
float depthSample = texture2D(DepthBuffer, Input.TextureCoordinate).r;
depthLinear = ClipInfo[0] / (ClipInfo[1] * depthSample + ClipInfo[2]);
//float depthLinear = (NearClip) / ( -depthSample + 1.0f);
//fragmentColor = vec4(depthLinear, depthLinear, depthLinear, 1.0f);