Merge pull request 'AgX color space' (#40) from Onek8/LNXSDK:main into main
Reviewed-on: #40
This commit is contained in:
commit
ecaea8ad9d
@ -475,7 +475,11 @@ fragColor.rgb = min(fragColor.rgb, 65504 * 0.5);
|
||||
} else {
|
||||
fragColor.rgb = mix(midLumColor, maxLumColor, luminance);
|
||||
}
|
||||
|
||||
} else if (PPComp4.x == 9){
|
||||
fragColor.rgb = tonemapAgXSimple(fragColor.rgb);
|
||||
fragColor.rgb = pow(fragColor.rgb, vec3(1.0 / 2.2)); // To gamma
|
||||
} else if (PPComp4.x == 10){
|
||||
fragColor.rgb = tonemapAgXFull(fragColor.rgb);
|
||||
} else {
|
||||
fragColor.rgb = vec3(0,1,0); //ERROR
|
||||
}
|
||||
@ -498,6 +502,13 @@ fragColor.rgb = min(fragColor.rgb, 65504 * 0.5);
|
||||
fragColor.rgb = pow(fragColor.rgb, vec3(1.0 / 2.2)); // To gamma
|
||||
fragColor.rgb = clamp(fragColor.rgb, 0.0, 2.2);
|
||||
#endif
|
||||
#ifdef _CToneAgXsimple
|
||||
fragColor.rgb = tonemapAgXSimple(fragColor.rgb);
|
||||
fragColor.rgb = pow(fragColor.rgb, vec3(1.0 / 2.2)); // To gamma
|
||||
#endif
|
||||
#ifdef _CToneAgXfull
|
||||
fragColor.rgb = tonemapAgXFull(fragColor.rgb);
|
||||
#endif
|
||||
#ifdef _CToneNone
|
||||
fragColor.rgb = pow(fragColor.rgb, vec3(1.0 / 2.2)); // To gamma
|
||||
#endif
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
vec3 uncharted2Tonemap(const vec3 x) {
|
||||
const float A = 0.15;
|
||||
const float B = 0.50;
|
||||
@ -36,3 +35,51 @@ vec3 acesFilm(const vec3 x) {
|
||||
vec3 tonemapReinhard(const vec3 color) {
|
||||
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));
|
||||
}
|
||||
|
@ -613,8 +613,10 @@ class LnxRPListItem(bpy.types.PropertyGroup):
|
||||
('Filmic', 'Filmic', 'Filmic'),
|
||||
('Filmic2', 'Filmic2', 'Filmic2'),
|
||||
('Reinhard', 'Reinhard', 'Reinhard'),
|
||||
('Uncharted', 'Uncharted', 'Uncharted')],
|
||||
name='Tonemap', description='Tonemapping operator', default='Filmic', update=assets.invalidate_shader_cache)
|
||||
('Uncharted', 'Uncharted', 'Uncharted'),
|
||||
('AgXsimple', 'AgX (Simple)', 'AgX Simple Implementation'),
|
||||
('AgXfull', 'AgX (Full)', 'AgX Full Implementation')],
|
||||
name='Tonemap', description='Tonemapping operator', default='AgXfull', update=assets.invalidate_shader_cache)
|
||||
lnx_fisheye: BoolProperty(name="Fish Eye", default=False, update=assets.invalidate_shader_cache)
|
||||
lnx_vignette: BoolProperty(name="Vignette", default=False, update=assets.invalidate_shader_cache)
|
||||
lnx_vignette_strength: FloatProperty(name="Strength", default=0.7, update=assets.invalidate_shader_cache)
|
||||
|
Loading…
x
Reference in New Issue
Block a user