大普通

记事

[Unity3d]总结Gamma Space与Linear Space

摘要

看了一些gamma相关内容,记录一下目前的理解,主要是针对unity中的两种color space。

正文

在unity的这个路径下Edit->Project Settings->Player->Other Settings,可以选择linear空间或者gamma空间。这两种空间会发生什么事,见下。

当ColorSpace选择LinearSpace时

第一张图:shader中tex2D读取颜色参与计算。
LinearSpace时,除非对指定图片选择了bypass sRGB,否则所有纹理都会变成sRGB格式。
对于sRGB的纹理,GPU会自动将colorG0(偏亮)转换到linear space,即colorL0(偏暗)。也就是说,在此转换之前,存储在纹理中的颜色colorG0是在gamma space的(偏亮)。
shader中tex2D前后发生的事情

第二张图:shader计算结果到写入color buffer。
所有计算应该发生在linear space,计算结束后需GPU会将该像素颜色再次转换到gamma space,再写入color buffer。
shader计算结果到写入color buffer中间发生的事

第三张图:显示器把color buffer显示到眼睛。
color buffer中的颜色和人眼看到的不同,这是显示器做的事,这个步骤叫display transfer,目前就掌握到这个程度。
显示器把color buffer显示到眼睛

当ColorSpace选择gammaSpace时

选择gammaSpace时,整个流程中GPU不再做颜色空间转换。纹理中的颜色直接参与计算,而显示器还会正常display transfer。至于存储在纹理中的颜色colorG0应当是在什么space中,不得其解。
第一张图+第二张图:
gammaSpace时

第三张图:显示器把color buffer显示到眼睛。 (和上面没区别)
显示器把color buffer显示到眼睛

最后

当使用gammaSpace时,纹理中的颜色究竟是在什么空间下的?不得其解。
以后有时间看看RTR什么的有了更深的理解再来补充吧。

参考

http://blog.csdn.net/candycat1992/article/details/46228771
http://qiankanglai.me/misc/2014/12/24/gamma-correction/
http://www.klayge.org/2011/02/26/gamma%E7%9A%84%E4%BC%A0%E8%AF%B4/

阅读更多
个人分类: Unity3D
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭