patriciogonzalezvivo / thebookofshaders

Step-by-step guide through the abstract and complex universe of Fragment Shaders.
http://TheBookOfShaders.com
Other
5.96k stars 677 forks source link

glsl shader output threshold (question) #415

Open geextahslex opened 6 months ago

geextahslex commented 6 months ago

Hi, I'm looking for help with a glsl shader. I want to combine float a and float b to get I2 but I have no idea how to implement it. I want the low information (like srgb 0-180) from float a and the high information (like srgb 180-255) from float b to get I2. So like legs from a and torso from b I'm a noob in glsl but I will try out any suggestions.

Any help would be appreciated :)

This is the shader

vec3 tone_mapping_ictcp(vec3 ICtCp) {
    float a = Y_to_ST2084(curve(ST2084_to_Y(ICtCp.x) / L_sdrr, 250 / L_sdrr) * L_sdrr);
    float b = Y_to_ST2084(curve(ST2084_to_Y(ICtCp.x) / L_sdrr, 500 / L_sdrr) * L_sdrr);
?? float mask = smoothstep(0.75, 1.0, clamp(length(b), 0.0, 1.0));
?? float I2 = mix(a, b, mask);
    ICtCp.yz *= mix(1.0, min(ICtCp.x / I2, I2 / ICtCp.x), sigma);
    ICtCp.x   = I2;
    return ICtCp;
}

For demonstration purposes I color coded the picture. The green should come from float a (dark/low luminance) and the yellow should come from float b (bright/high luminance) 500 3 44 500 3