2012-08-08 91 views
1

我最近一直在阅读关于sRGB转换及其带来的一些好处。在GPU Gems 3中阅读一篇非常有用的文章,该文章现在免费提供,其中涵盖了一些自动方法vs手动着色器编写的方法。下面是文章:OpenGL自动sRGB转换vs手动sRGB转换

http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html

在什么情况下会是有益的,利用手动转换,而非自动转换?在我看来,使用GL_SRGB_EXT传递给glTexImage2D并使用GL_EXT_framebuffer_sRGB不需要任何手动转换?

回答

1

那么,一个原因已经在该文章中提出。如果你假设一个(错误的)伽玛值为2.0,你可以用sqrt来计算它,这可能会更快,甚至内置的方法在屏幕后面最有可能像pow(frag.rgb,1.0/2.2)。当然,如果渲染到sRGB用硬件实现,这不会优化任何东西。

另一个原因可能是您想自己在非线性色彩空间中进行一些计算。例如,如果你想转换成像Y'CbCr这样的图像处理任务。

最后,也许你可以通过一些查询得到你的输出设备的gamma的非常精确的值,然后做一个手动转换可能会提供一个(可能几乎不明显)更好的质量。