关于 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矫正的,然后才显示的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值