mirror of
https://github.com/antopilo/Nuake.git
synced 2025-12-30 21:49:06 +03:00
67 lines
1.7 KiB
GLSL
67 lines
1.7 KiB
GLSL
#shader vertex
|
|
#version 440 core
|
|
|
|
layout(location = 0) in vec3 VertexPosition;
|
|
layout(location = 1) in vec2 UVPosition;
|
|
|
|
out flat vec2 UV;
|
|
|
|
void main()
|
|
{
|
|
UV = UVPosition;
|
|
gl_Position = vec4(VertexPosition, 1.0f);
|
|
}
|
|
|
|
#shader fragment
|
|
#version 440 core
|
|
out vec4 FragColor;
|
|
|
|
in vec2 UV;
|
|
|
|
uniform sampler2D u_Input;
|
|
uniform sampler2D u_Depth;
|
|
|
|
const float SHARPNESS = 10.0f;
|
|
const float KERNEL_RADIUS = 8.0f;
|
|
|
|
void main() {
|
|
|
|
vec2 texelSize = 1.0 / vec2(textureSize(u_Input, 0));
|
|
vec4 result = vec4(0);
|
|
|
|
float centerDepth = texture(u_Depth, UV).r;
|
|
float totalWeight = 0.0f;
|
|
for (int x = -2; x < 2; ++x)
|
|
{
|
|
vec2 offset = vec2(float(x), float(0)) * texelSize;
|
|
|
|
vec2 uv = UV + offset;
|
|
float depth = texture(u_Depth, uv).r;
|
|
|
|
const float blurSigma = float(KERNEL_RADIUS) * 0.5f;
|
|
const float blurFalloff = 1.0 / (2.0 * blurSigma * blurSigma);
|
|
|
|
float depthDiff = abs(depth - centerDepth) * SHARPNESS;
|
|
float weight = exp2(-x * x * blurFalloff - depthDiff * depthDiff);
|
|
totalWeight += weight;
|
|
result += texture(u_Input, uv) * weight;
|
|
}
|
|
|
|
for (int y = -2; y < 2; ++y)
|
|
{
|
|
vec2 offset = vec2(float(0), float(y)) * texelSize;
|
|
|
|
vec2 uv = UV + offset;
|
|
float depth = texture(u_Depth, uv).r;
|
|
|
|
const float blurSigma = float(KERNEL_RADIUS) * 0.5f;
|
|
const float blurFalloff = 1.0 / (2.0 * blurSigma * blurSigma);
|
|
|
|
float depthDiff = abs(depth - centerDepth) * SHARPNESS;
|
|
float weight = exp2(-y * y * blurFalloff - depthDiff * depthDiff);
|
|
totalWeight += weight;
|
|
result += texture(u_Input, uv) * weight;
|
|
}
|
|
|
|
FragColor = result / totalWeight;
|
|
} |