Unity在Gamma空间下实现线性渲染

原文链接:https://blog.csdn.net/t163361/article/details/80148449
今年的游戏圈,最新出的游戏全都是在使用PRB来制作的。
我们公司最新的产品也开始探索使用PBR。
项目光开始的时候纠结于使用Linear模式还是Gamma模式。
后来因为线性下UI和效果图对不上的问题,以及咨询了几位大神制作的项目后,决定使用Gamma模式。
然后就遇到一个问题,之前在线性下制作的模型,切换到Gamma模式后,效果差异很大,高光会爆。
然后就准备写一个可以在Gamma模式实现线性渲染的Shader出来。
本来想在网上找个现成的shader,不过基本都是根据自己项目修改过的。
拿给美术使用,总是会在效果上各种纠结。于是就准备实现一个在Gamma下能和Linear显示一致的Shader出来。
期间查了很多资料
主要根据下面大神的提示进行修改
https://blog.csdn.net/limaous/article/details/52504453
具体的shader就不贴这里了。
提供一个csdn的下载链接,赚点分。毕竟也是好几天的辛苦^^
https://download.csdn.net/download/t163361/10383752
下面提供shader的实现效果。

线性模式渲染效果

线性模式渲染效果

Gamma模式渲染效果

Gamma模式渲染效果
以上截图中的人物渲染比较一致,机甲渲染会有光照的些微差异,猜测是因为Roughness导致的。时间关系就没解决。
提供的shader也是属于精简模式,只保留了主纹理,金属度贴图,法线,自发光功能。其他比如视察贴图的功能给删掉了。
lightmap也没有具体确认效果是否一致。
不过因为本shader保留了在Gamma下和Linear空间下都可以使用,互相参考进行效果修正。
所以大家如果想自己修改,可以起2个工程,1个是Gamma模式,1个是Linear,使用相同的光照,环境贴图,相同的模型,就可以参照进行优化。
shader中有下面一句话

#define _FAKELINEAR 1 

Gamma模式下需要打开
Linear模式下需要注释掉
这样就可以保证两个项目的渲染效果可以达到截图水平。
shader是在unity提供的Standard基础上修改,整合到一个shader中。
关于修正Gamma和Linear的部分都可以搜索_FAKELINEAR查看。
Shader写的比较粗略,不过也更好的保留了调试部分的代码。供大家参考。
具体功能使用的Unity2017.4版本制作。
人物模型据说是 择天记 的。

猜你喜欢

转载自blog.csdn.net/t163361/article/details/80148449