Substance与PBR工作流总结

发表于2018-10-15
评论0 2.1k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群

711501594
1、关于PBR

PBR即基于物理的渲染,是一套尝试基于真实世界光照物理模型的渲染技术合集,使用了一种更符合物理学规律的方式来模拟光线,达到更真实的渲染效果,而且可以直接通过物理参数来直观地达到想要的结果,不用通过拙劣的各种参数调整。物理参数一般直接通过贴图来传递给Shader。

2、关于Substance

Substance是Allegorithmic公司的一套PBR美术制作工具,包括SubstancePrinter和SubstanceDesigner等软件,SubstancePainter是PBR贴图绘制软件,

我们可以导入自己的模型,然后绘制输出PBR贴图。而SubstanceDesigner可以输出sbsar文件,sbsar描述了PBR贴图的生成方式,可以导入SubstancePainter为材质,也可以直接给Unity使用(Unity2018版本以上需要额外的插件)。在Unity里使用sbsar文件,我们就可以直接在Unity里调参数生成新的PBR贴图。

上图选中的就是一个sbsar文件,包含了5种材质以前材质使用的贴图。

上图是Gold材质的属性面板,我们可以看到有MetalProperties和Age这类的自定义参数,调整这些参数,就能重新生成新的PBR贴图。
                                                    (使用Gold材质的渲染结果)

sbsar文件除了动态生成PBR贴图这个功能,其实与Unity材质没有差别,因为它们都是使用相同的Shader。仅仅使用它的贴图我们也可以渲染出完全一样的效果。

SubstancePainter比较重要的注意点是导出贴图的设置,通常我们将Config设置为Unity5(StandardMetallic)

而Unity5(StandardMetallic)的配置我们可以在上面CONFIGURATION中查看和修改:
如图,我们将为每套贴图输出Albedo,Normal,Emission,Metallic4张贴图,Albedo的RGB通道使用BaseColor的RGB颜色,Normal的RGB通道是NormalOpenGL的RGB颜色,而Metallic的RGB通道使用Metallic的灰度颜色,A通道使用Roughness的灰度颜色(这是我修改后的配置,默认配置不是这样)。

3、整合到Unity开发流程的问题

实际开发中必定会存在的一个问题是,美术在SubstancePainter中调出了一个牛逼哄哄的效果,开开心心地导入Unity,发现效果不一样了!除了一些光照的设置,最主要的是因为ColorSpace的问题。


这是Unity中不同ColorSpace渲染SP的PBR贴图的结果,第一张的GammaSpace,第二张是LinearSpace,可以看出差异还是挺明显的,特别是底座的颜色

SP的渲染是在LinearSpace中进行的,导出的贴图经过了gammaencoding,如果在Unity中使用LinearSpace渲染,渲染结果还是很接近SP中的效果的,但是LinearSpace不仅消耗高,而且在某些移动平台上不支持(需要OpenGLES3.0以上及Metal图形API支持),这意味着我们需要在GammaSpace中得到跟SP一样的渲染效果。

4.SubstancePrinter与UnityGammaSpace渲染效果一致化方案

方案1:修改UnityStandardShader,手动加入gamma校正,使其达到LinearSpace的效果。
Unity提供了在UnityCG.cginc头文件中提供了GammaToLinearSpace和LinearToGammaSpace两个方法进行两个空间的转化。但是我尝试了仍然没法得到LinearSpace的渲染效果,颜色偏差还是存在,而且因为工作流程而加入额外的性能消耗,我觉得不是好方案,于是放弃这个方案。

方案2:不再调整Unity的渲染,我们调整SP的渲染,让其使用GammaSpace渲染。幸好SP支持自定义Shader

这篇文章提供了这个方案:点击打开链接,同时提供了一个模拟UnityPBR渲染的GLSL文件,下载下来,在SP中File->Impotyresources导入,在SHADERSETTINGS中设置为使用该shader,注意把LinearSpace勾选去掉,因为我们要使用GammaSpace。导出贴图时,注意要修改Metallic贴图的设置:RGB通道使用Metallic的灰度颜色,A通道使用Roughness的灰度颜色。
Untiy中的和SP中,差异算可以接受了。
来自:https://blog.csdn.net/linuxheik/article/details/81914184

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台