treesummaryrefslogcommitdiff
path: root/shaders/fbo_frag.glsl
diff options
context:
space:
mode:
authorPatrick2021-03-23 19:28:28 +0100
committerPatrick2021-03-23 19:28:28 +0100
commita0fdc6d882a1755d0b0607ba3d9bb55e7f8ac006 (patch)
tree82aab3828111378b6f0421aa58025b43f98f13a2 /shaders/fbo_frag.glsl
parentcedffd5cf24c1a3ed64161475c806c55135406be (diff)
downloadsubsurface_scattering-a0fdc6d882a1755d0b0607ba3d9bb55e7f8ac006.tar.gz
subsurface_scattering-a0fdc6d882a1755d0b0607ba3d9bb55e7f8ac006.zip
fix translucency, add gaussian blur to shader
Diffstat (limited to 'shaders/fbo_frag.glsl')
-rw-r--r--shaders/fbo_frag.glsl39
1 files changed, 33 insertions, 6 deletions
diff --git a/shaders/fbo_frag.glsl b/shaders/fbo_frag.glsl
index 7463fc8..1102992 100644
--- a/shaders/fbo_frag.glsl
+++ b/shaders/fbo_frag.glsl
@@ -11,24 +11,51 @@ uniform int renderState;
uniform vec2 samplePositions[13];
uniform vec3 sampleWeights[13];
+vec4 blur(sampler2D tex, vec2 uv, vec2 res) {
+ float Pi = 6.28318530718; // Pi*2
+
+ // GAUSSIAN BLUR SETTINGS {{{
+ float Directions = 16.0; // BLUR DIRECTIONS (Default 16.0 - More is better but slower)
+ float Quality = 4.0; // BLUR QUALITY (Default 4.0 - More is better but slower)
+ float Size = 8.0; // BLUR SIZE (Radius)
+ // GAUSSIAN BLUR SETTINGS }}}
+
+ vec2 Radius = Size/res;
+
+ // Pixel colour
+ vec4 Color = texture(tex, uv);
+
+ // Blur calculations
+ for( float d=0.0; d<Pi; d+=Pi/Directions) {
+ for(float i=1.0/Quality; i<=1.0; i+=1.0/Quality) {
+ Color += texture( tex, uv+vec2(cos(d),sin(d))*Radius*i);
+ }
+ }
+
+ // Output to screen
+ Color /= Quality * Directions - 15.0;
+ return Color;
+}
+
void main()
{
if (renderState == 0) {
- FragColor = texture(shadowmapTexture, TexCoords);
+ FragColor = blur(shadowmapTexture, TexCoords, vec2(screenWidth, screenHeight));
}
- // stencil buffer
else if (renderState == 1) {
- FragColor = texture(irradianceTexture, TexCoords);
+ FragColor = texture(shadowmapTexture, TexCoords);
}
+ // stencil buffer
else if (renderState == 2) {
- FragColor = texture(shadowmapTexture, TexCoords) * texture(irradianceTexture, TexCoords);
+ FragColor = texture(irradianceTexture, TexCoords);
}
else if (renderState == 3) {
vec4 result = vec4(0, 0, 0, 1);
for (int i = 0; i < 13; i++) {
vec2 sampleCoords = TexCoords + samplePositions[i] * vec2(1.0/screenWidth, 1.0/screenHeight);
- vec4 sample = texture(irradianceTexture, sampleCoords)
- * texture(shadowmapTexture, sampleCoords);
+ //vec4 sample = texture(irradianceTexture, sampleCoords)
+ // * texture(shadowmapTexture, sampleCoords);
+ vec4 sample = texture(irradianceTexture, sampleCoords);
vec4 weight = vec4(sampleWeights[i], 1);
result += sample * weight;
}