Update leenkx/Shaders/std/tonemap.glsl

This commit is contained in:
Onek8 2025-04-05 08:12:43 +00:00
parent ef25d15aed
commit aae64aa8f8

View File

@ -1,4 +1,3 @@
vec3 uncharted2Tonemap(const vec3 x) { vec3 uncharted2Tonemap(const vec3 x) {
const float A = 0.15; const float A = 0.15;
const float B = 0.50; const float B = 0.50;
@ -36,3 +35,51 @@ vec3 acesFilm(const vec3 x) {
vec3 tonemapReinhard(const vec3 color) { vec3 tonemapReinhard(const vec3 color) {
return color / (color + vec3(1.0)); return color / (color + vec3(1.0));
} }
// Blender AgX Implementation
// Troy Sobotka https://github.com/sobotka/AgX
// AGX Simple
vec3 tonemapAgXSimple(vec3 x) {
const vec3 AgX_A = vec3(0.5, 0.5, 0.5);
const vec3 AgX_B = vec3(0.5, 0.5, 0.5);
const vec3 AgX_C = vec3(1.0, 1.0, 1.0);
const vec3 AgX_D = vec3(0.0, 0.0, 0.0);
const vec3 AgX_E = vec3(0.0, 0.0, 0.0);
const vec3 AgX_F = vec3(1.0, 1.0, 1.0);
return (x * (AgX_A * x + AgX_B)) / (x * (AgX_C * x + AgX_D) + AgX_E) + AgX_F;
}
// AGX Full Contrast Approx
vec3 agxDefaultContrastApprox(vec3 x) {
vec3 x2 = x * x;
vec3 x4 = x2 * x2;
return + 15.5 * x4 * x2
- 40.14 * x4 * x
+ 31.96 * x4
- 6.868 * x2 * x
+ 0.4298 * x2
+ 0.1191 * x
- 0.00232;
}
// AGX Full Look
vec3 agxLook(vec3 x, float strength) {
const vec3 slope = vec3(1.0);
const vec3 power = vec3(1.35);
const vec3 sat = vec3(1.4);
vec3 lw = vec3(0.2126, 0.7152, 0.0722);
float luma = dot(x, lw);
return pow(x * slope, power) * sat - (pow(luma * slope, power) * (sat - 1.0));
}
// AGX Full
vec3 tonemapAgXFull(vec3 x) {
// x *= 2.0 * (1.0/0.8); // Brightness scale to match Blender's default
x = clamp(x, 0.0, 65504.0);
x = log2(x + 1.0);
x = agxDefaultContrastApprox(clamp(x * 0.5 - 10.5, -12.0, 12.0));
x = mix(x, agxLook(x, 0.5), 0.5);
x = clamp(x, 0.0, 1.0);
return pow(x, vec3(1.0/2.2));
}