mirror of
https://github.com/antopilo/Nuake.git
synced 2025-12-30 21:49:06 +03:00
69 lines
1.8 KiB
GLSL
69 lines
1.8 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
|
|
|
|
uniform sampler2D u_Source;
|
|
uniform float u_Gamma;
|
|
uniform float u_Exposure;
|
|
uniform float u_TAAFactor;
|
|
uniform sampler2D u_PreviousFrame;
|
|
uniform sampler2D u_VelocityFrame;
|
|
|
|
in vec2 UV;
|
|
|
|
out vec4 FragColor;
|
|
|
|
vec3 aces(vec3 x) {
|
|
const float a = 2.51;
|
|
const float b = 0.03;
|
|
const float c = 2.43;
|
|
const float d = 0.59;
|
|
const float e = 0.14;
|
|
return clamp((x * (a * x + b)) / (x * (c * x + d) + e), 0.0, 1.0);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
vec3 color = texture(u_Source, UV).rgb;
|
|
vec3 mapped = vec3(1.0) - exp(-color * u_Exposure);
|
|
//color = vec3(1.0) - exp(-color * u_Exposure);
|
|
// reinhard
|
|
//color = color / (color + vec3(1.0));
|
|
// gamma correct
|
|
color = pow(mapped, vec3(u_Gamma));
|
|
|
|
// TAA
|
|
vec2 velocity = texture(u_VelocityFrame, UV).rg;
|
|
vec2 previousPixelPos = UV - velocity;
|
|
|
|
vec3 historyColor = texture(u_PreviousFrame, previousPixelPos).rgb;
|
|
|
|
// Sample the neighboring pixels for clamping
|
|
vec3 NearColor0 = textureOffset(u_Source, UV, ivec2(1, 0)).rgb;
|
|
vec3 NearColor1 = textureOffset(u_Source, UV, ivec2(0, 1)).rgb;
|
|
vec3 NearColor2 = textureOffset(u_Source, UV, ivec2(-1, 0)).rgb;
|
|
vec3 NearColor3 = textureOffset(u_Source, UV, ivec2(0, -1)).rgb;
|
|
|
|
// Calculate the min and max colors
|
|
vec3 BoxMin = min(color, min(NearColor0, min(NearColor1, min(NearColor2, NearColor3))));
|
|
vec3 BoxMax = max(color, max(NearColor0, max(NearColor1, max(NearColor2, NearColor3))));
|
|
|
|
// Clamp the history color
|
|
historyColor = clamp(historyColor, BoxMin, BoxMax);
|
|
|
|
color = mix(color, historyColor, u_TAAFactor);
|
|
FragColor = vec4(color, 1.0);
|
|
} |