我最近一直在阅读有关sRGB转换及其带来的一些好处。阅读GPU Gems 3中一篇非常有用的文章,该文章现在免费提供,其中包括一些自动方法和手动着色器编写的方法。这是文章:
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html
在哪种情况下,利用手动转换而不是自动转换会有什么好处?在我看来,使用传递给glTexImage2D的GL_SRGB_EXT并且使用GL_EXT_framebuffer_sRGB不需要任何手动转换?
答案 0 :(得分:1)
那么,该文章已经提出了一个原因。如果你假设一个(错误的)伽玛值为2.0,你可以用sqrt来计算它,这可能比屏幕后面的内置方法更快,尤其是pow(frag.rgb,1.0/2.2)
。当然,如果渲染到sRGB是在硬件中实现的,那么这不会优化任何东西。
另一个原因可能是您希望自己在非线性颜色空间中进行一些计算。例如,如果您想要转换为Y'CbCr之类的图像处理任务。
最后,也许你可以通过一些查询获得输出设备的伽玛值非常准确,然后进行手动转换可能会给出(可能几乎不可察觉)更好的质量。