摘要
看了一些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计算结果到写入color buffer。
所有计算应该发生在linear space,计算结束后需GPU会将该像素颜色再次转换到gamma space,再写入color buffer。
第三张图:显示器把color buffer显示到眼睛。
color buffer中的颜色和人眼看到的不同,这是显示器做的事,这个步骤叫display transfer,目前就掌握到这个程度。

本文总结了Unity3d中的两种颜色空间——Gamma Space和Linear Space。在Linear Space下,GPU会自动进行颜色空间转换,而在Gamma Space时,GPU不再做颜色转换,纹理颜色空间不明。详细阐述了两种空间在纹理读取、计算和显示过程中的差异。
最低0.47元/天 解锁文章
2507





