【无标题】

引子

以前都是美术设置好这个东西,所以没怎么太过关注,当新项目美术没有设置好时,打包与PC效果不一样。一会过度曝光,一会变暗。这里总结一下。

gamma与liner的定义

liner空间:真实的物理空间,光线强度线性变化,使得渲染明暗也是线性变化的。
gamma空间:由于人眼对于偏暗部分更加敏感,所以显示器做显示,会弄一个gamma2.2(大家约定的的一个值)的修正,即对原本的线性效果做个2.2次方,使得正常的光强强度变化,渲染出的效果会偏暗(强度在0-1范围)
SRGB空间:美术画贴图的时候(PS导出时),会对这个图做一次gamma0.45的反修正,这样这张图经过显示器,0.45次方 之后,再2.2次方,就和liner效果一样了。

gamma与liner在Unity中的处理

gamma:Unity工程设置这个后,不会对导入的纹理资源进行任何处理,也不会在shader渲染做任何处理,就这么直接输入,输出。
liner:Unity会对纹理设置为SRGB的图片,进行渲染进入shader使用时,会对这张纹理进行2.2次方的修正,这样进入shader时,就是正常的liner空间了,因为shader处理光照之类的需要真实的物理空间进行计算才行的。计算好真实的线性渲染后,再进行一次0.45的处理,然后交给显示器,显示器进行2.2次方,又变成真实的物理效果了。(有同学会有疑问,不是说人眼对暗部更敏感,应该更暗才对啊,为啥还要来一次0.45呢,答案:因为有光照效果,需要看起来更像物理世界的光照,当然不进行这次0.45或者进行这次0.45修正,没有对错,只要看起来对,那就是对的)
在liner中,如果没有勾选纹理的SRGB,那么进入shader处理时,不会来一次2.2的修正,因为认为它已经是liner空间的纹理了,进入shader流程没问题,后面的流程与上面相同。

结论:

1.一般有光照效果的3D游戏,需要在liner空间,然后需要美术定位纹理是不是SRGB空间(一般是美术自己画的图,需要是,由计算机生成的比如深度图,法线纹理等不需要勾)
2.一般没有光照效果的3D游戏,或者2D游戏,可以在gamma空间。或者有光照效果的游戏,想要在gamma空间,那么在纹理进入shader时需要自行根据纹理的类型(SRGB的需要来一次0.45修正,保证shader中是真实物理世界,不是的不需要处理)
疑问:那为啥要gamma空间啊,都是liner不好吗?因为liner进行了两次gamma处理(0.45,2.2),所以性能不如gamma空间。所以为啥很多人,想要UI是Gamma空间,光照的3D物体是liner空间,就是这个原因。

补充

除了上面的空间选择导致场景变亮或者变暗,还有其他可能:
1.在URP中加了一些后处理,postvolume等,我这个项目就是有个美术加了个全局的屏幕空间AO效果,导致shader变体中的效果与全局屏幕空间效果出现差异。PC中没问题,只要是用打包的资源就有问题,因为shader变体不一样了。排查方法:在framedebugger中,查看渲染用的关键字,在PC中编辑器模式下以及真机打包AB是否一样。
2.shader变体裁减导致,一些shader效果丢失了,导致渲染不对劲,这个排查方案跟上面一样,主要看关键字的对比。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值