124 lines
3.5 KiB
Text
124 lines
3.5 KiB
Text
|
// Exclusive to volumetric light for now
|
||
|
#version 450
|
||
|
|
||
|
#include "compiled.glsl"
|
||
|
|
||
|
uniform sampler2D tex;
|
||
|
uniform vec2 dir;
|
||
|
uniform vec2 screenSize;
|
||
|
|
||
|
in vec2 texCoord;
|
||
|
out vec4 fragColor;
|
||
|
|
||
|
const float weight[10] = float[] (0.132572, 0.125472, 0.106373, 0.08078, 0.05495, 0.033482, 0.018275, 0.008934, 0.003912, 0.001535);
|
||
|
|
||
|
float normpdf(float x, float sigma) {
|
||
|
return 0.39894 * exp(-0.5 * x * x / (sigma * sigma)) / sigma;
|
||
|
}
|
||
|
|
||
|
float normpdf3(vec3 v, float sigma) {
|
||
|
return 0.39894 * exp(-0.5 * dot(v, v) / (sigma * sigma)) / sigma;
|
||
|
}
|
||
|
|
||
|
void main() {
|
||
|
vec2 step = (dir / screenSize.xy);
|
||
|
vec3 colf = texture(tex, texCoord).rgb * weight[0];
|
||
|
|
||
|
vec3 col;
|
||
|
float sumfactor = 0.0;
|
||
|
float factor;
|
||
|
float f = 1.0 / normpdf(0.0, 0.1);
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[1];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb = factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[1];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[2];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[2];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[3];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[3];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[4];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[4];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[5];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[5];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[6];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[6];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[7];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[7];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[8];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[8];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord + step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[9];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
col = texture(tex, texCoord - step * 1.5).rgb;
|
||
|
factor = normpdf3(col - colf, 0.1) * f * weight[9];
|
||
|
sumfactor += factor;
|
||
|
fragColor.rgb += factor * col;
|
||
|
|
||
|
fragColor.rgb /= sumfactor;
|
||
|
}
|