Unity中的设置
通过点击菜单Edit->Project Settings->Player页签->Other Settings下的Rendering部分进行修改,参数Color Space可以选择Gamma或Linear。
- 当选择Gamma Space时,Unity不会做任何处理。
- 当选择Linear Space时,引擎的渲染流程在线性空间计算,理想情况下项目使用线性空间的贴图颜色,不需要勾选sRGB,如果勾选了sRGB的贴图,会通过硬件特性采样时进行线性转换。
硬件支持
线性空间需要图形API的硬件支持,目前支持的平台
- Windows,Mac OS x 和Linux(Standalone)
- Xbox One
- PS 4
- Android (OpenGL ES 3.0)
- iOS(Metal)
- WebGL
硬件特性支持
主要由两个硬件特性来支持:
- sRGB Frame Buffer
-
- 将Shader的计算结果输出到显示器前左gamma校正
- 作为纹理被读取时会自动把存储的颜色从sRGB空间转换到线性空间
- 调用ReadPixels()、readBackImage()时,会直接返回sRGB空间下的颜色
- sRGB Frame Buffer只支持每通道8bit的格式,不支持浮点格式
- HDR开启后会先把渲染结果绘制到浮点格式的FB中,最后绘制到sRGB FB上输出
- sRGB Sampler
-
- 将sRGB的贴图进行线性采样的转换
使用硬件特性完成sRGB贴图的线性采样和shader计算结果的gamma校正,比起在shader里对贴图采样和计算结果的校正要快。