关于 unity 中颜色空间问题的总结

首先官方文档肯定是我们参考的重点,最重要的就是这几篇文章了:
https://docs.unity3d.com/Manual/LinearLighting.html
https://docs.unity3d.com/Manual/LinearRendering-LinearOrGammaWorkflow.html
https://docs.unity3d.com/Manual/LinearRendering-GammaTextures.html
https://docs.unity3d.com/Manual/LinearRendering-LinearTextures.html

这4篇文章基本上介绍了unity linearRendering 要怎么去使用。

这里还有3篇文章对Linear和Gamma的区别,和选择进行了很好的说明
https://www.cnblogs.com/guanzz/p/7416821.html
http://blog.csdn.net/ngrandmarch/article/details/46407017
http://blog.csdn.net/radiocat520/article/details/52514961


这里总结一下用法:

有一个大前提是,显示器在显示颜色前,总是会进行一次gamma矫正。


首先是对非线性输入的纹理资源的处理(这里主要指的是贴图,像法线一类的信息纹理理论上只是为了放数据用的,可以算是线性的),在2017版本中纹理资源上的那个 sRGB 选项很重要。
开了,则纹理在采样时,会被当成是非线性输入,会进行gamma矫正。
关了,则纹理在采样时,会被当成线性输入的,不会矫正了,直接被拿去计算了。


然后是 Other Settings 中的 Color Space。

linear 空间下的话:
默认采样,计算都是在linear空间下。
在shader中计算完成后,将颜色转换到gamma空间,然后写入颜色缓存,等待显示器显示。
然后显示器会自动经过gamma矫正来显示颜色。

gamma空间下的话:
默认采样,计算都是在gamma空间下。
在shader中计算完成后,直接写入颜色缓存,等待显示器显示。
然后显示器会自动经过gamma矫正来显示颜色。


综上所述,gamma矫正这一块,现在被分割成了输入和输出2部分。

输入时:
要合理区分纹理资源是属于线性的,还是非线性输入的,好在输入的时候决定是不是要给它搞成srgb的,

输出时:
感觉主要是因为在unity没有这个功能前,就已经存在很多种其它的矫正方式。
比如,自己把矫正代码写在了材质的shader里,在摄像机上做了特效后处理式的gamma矫正效果。
你得照顾兼容一下其他人的项目和感受吧,所以你就要决定要不要最终将颜色转回到gamma空间去,等着给显示器用。
因为显示器也是不讲道理的,它最终总会进行一次gamma矫正的,然后才显示的。

你可能感兴趣的:(Unity,gamma,颜色空间,gamma矫正,unity2017)