]> gitweb.ps.run Git - subsurface_scattering/blobdiff - shaders/fbo_frag.glsl
Screen Space SSS
[subsurface_scattering] / shaders / fbo_frag.glsl
index cf1fafa6e6aa01b5ee0d36241b7c06e87cfbe3b6..f6f12cd88f0c530627682d68a0a86e6472fa07cd 100644 (file)
@@ -4,10 +4,30 @@ out vec4 FragColor;
 in vec2 TexCoords;\r
 \r
 uniform sampler2D screenTexture;\r
+uniform int applySSSSS;\r
+uniform int N;\r
 \r
 void main()\r
-{ \r
-    FragColor = vec4(\r
-        texture(screenTexture, TexCoords).rgb,\r
-        1.0);\r
+{\r
+    if (applySSSSS == 1) {\r
+        float x = 1.0/1600.0;\r
+        float y = 1.0/900.0;\r
+\r
+        float maxDist = N*N + N*N;\r
+\r
+        vec4 color = vec4(0, 0, 0, 1);\r
+        for (int i = -N; i <= N; i++) {\r
+            for (int j = -N; j <= N; j++) {\r
+                float dist = i*i + j*j;\r
+                vec4 newC = texture(screenTexture, TexCoords + vec2(i*x, j*y)) / (2*N*N);\r
+                float factor = 1 - (dist / maxDist);\r
+                factor = pow(factor, 2);\r
+                color += newC * factor;\r
+            }\r
+        }\r
+        FragColor = color;\r
+    }\r
+    else {\r
+        FragColor = texture(screenTexture, TexCoords);\r
+    }\r
 }\r