经常会听到3D美术小伙伴吐槽,说SP内做好效果后导入Unity里效果不一样了,然后就要根据Unity里的效果再调整一番,经常是来回调整好多次,十分难受,就不能做一个和SP内效果一样的Shader嘛?
按理说大家都是PBR基于物理的渲染,没道理效果不一样,但是我以前做美术的时候用SP的经验告诉我确实是存在这个差异,当时没有深入去想,现在是时候填上这个坑了.
首先我的第一想法就是两边的光照环境不一样,导致了效果上的偏差.PBR的材质属性大家是一样的,只是光不一样了.为了验证我的想法,我需要在Unity中创建一个和SP内一模一样的环境来对比两者的效果:
SubstancePainter内,我选的Enivronment Map是SP内置的Panorama这张HDRI图.
Enviroment Opacity调成100,完全显示.Environment Blur改成0,不要模糊.方便我观察周围环境.其他都是默认设置没有动过.模型效果如下:
Unity里,前段时间刚装了2019我就拿2019来看吧.把HDRI环境Panorama导入到Unity里作为环境光照,关掉场景里的所有灯光.也就是说让环境里的照明效果也都来自HDRI图.
补充一下我的Unity设置,Unity2019LWRP轻量级管线,线性颜色空间,PC平台下.
放上模型,贴上材质喽.就用Unity的标准Shader.Unity2019的LWRP下是Lit.和老版本的Standard是一样的,材质球面板也差不多.从SP里输出需要的贴图贴上,效果如下:
放一起大家对比方便一些,同角度下效果一毛一样嘛,我就说同样都是PBR,理论上不应该有差异的.
//2019.9.16 更新Unity5.6.6的效果
在Unity5.6.6里,使用Standard来还原的效果,如下:
对比Sp中的效果与Unity5.6.6的Standard的效果基本一致.Standard的金属暗部稍微更暗一些
那就回到原来的话题,美术经常吐槽的差异是啥呢?第一反应,Unity里的Directional Light平行光是不是产生差异的原因.Unity新建一个场景,默认的Default-Skybox是没有太阳的,场景里有一盏平行光来模拟太阳.unity默认的Default-Skybox
而SP环境内置的HDRI图中都是有太阳的,我们再看一眼Panorama:太阳那里亮度很高,HDRI图亮度是可以超过1的
顿时俺就明白了,两个软件构建环境的思路完全不一样.SP的环境光,全局光照都在HDRI里,因为SP是材质贴图制作软件,不需要美术去编辑和修改灯光.让HDRI来提供所有的光照,美术只需要专注于材质的调整.
而反观Unity,环境是项目创建的,灯光的位置,强度,类型,数量都是可以编辑的.Unity也是把全局光照的直接光和间接光分开了.我们新建一个默认场景就可以发现,环境光Default-Skybox是不包括直接光源(也就是太阳等自己发光的东西),Skybox只模拟蓝天和大地的反射间接光.直接光源由平行光Directional Light提供,同时平行光还负责产生投影.
如果Unity项目里用了一个本身自带太阳的HDRI,然后场景里又有一盏平行光,那这个环境肯定比SP亮很多,导致Unity内材质很白,很亮,很DUANG,质感不对.美术不得不对材质进行一番调整,导致越走越偏,Unity里换个光照环境不一样的场景,材质又变得奇奇怪怪.
最后说一下结论,两边光照环境不一样自然效果不一样,除非把项目的场景环境制作成HDRI提供给SP,然后再在SP中进行创作,不然就靠SP内置HDRI提供的光照肯定是无法去匹配项目中的游戏环境的,效果有差异是在所难免的.所以喽,要怎么把Unity里的光照输出成HDRI给SP用嘞,好像挖了个坑,下次再说吧.