我正在片段着色器中执行线性输入的伽马校正。但在我的情况下,输出像素也是预乘的(为了正确的alpha混合)。在这种情况下,我不确定正确的顺序是什么:
vec4 pixelOut = vec4(pow(color.xyz,vec3(1.0/2.2)) * alpha, alpha);
或者:
vec4 pixelOut = vec4(pow(color.xyz * alpha,vec3(1.0/2.2)) , alpha);
我应该在预乘之前或之前对像素颜色进行伽马校正吗?
从视觉上看,我目前无法发现任何差异。
答案 0 :(得分:2)
伽玛校正应该是着色管道的最后一步。在sRGB空间中混合会导致错误的结果。 有关此问题的详细解释/讨论,请查看Naty Hoffman的博客文章Adventures with Gamma-Correct Rendering。
正确的做法是在线性空间中执行与任何其他着色计算一样的混合。
因此,您应首先使用alpha进行预乘,然后进行伽马校正。