[官方教程] RÉPUBLIQUE 开发日志#3 — 基于物理的着色

发表于2015-08-25
评论0 1.1k浏览
最初我们在做移植《Republique(共和国)》到Unity 5的评估时,大多数美术都对基于物理的着色(简称PBS)知之甚少。庆幸的是大家都加紧脚步,在一天左右就将Unity 4中的纹理成功转换为Unity 5基于物理的着色系统可用的纹理。

那么,什么是基于物理的着色呢?网上有大量相关介绍可以帮助你快速了解:

http://www.marmoset.co/toolbag/learn/pbr-theory
http://www.marmoset.co/toolbag/learn/pbr-practice
http://filmicgames.com/archives/547
http://filmicgames.com/archives/557 
http://www.fxguide.com/featured/game-environments-parta-remember-me-rendering/
http://seblagarde.wordpress.com/
http://renderwonk.com/publications/s2010-shading-course/
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html


读完上述文章之后我们继续说下去。我们假设你已经研究透彻并准备在项目中使用PBS(这功能非常值得,也是我们决定在开发中期进行移植的首要原因)。为了以防万一,我们先来详细讲解下你已经习惯的纹理制作流程,与Unity 5中全新的PBS 流程之间的天壤之别。


最大的变化就是你需要为PBS 资源制作的贴图数量。之前的方式你可能要作一张漫反射贴图、一张高光贴图以及一张法线贴图。


在看过上述链接的资料后,希望你已经对PBS 两个主要部分有了深切的认知:即specular(或“spec-gloss”)以及metalness (或“metal-rough”)。Unity 5中的标准着色器采用前者。要想使用Specular,就要为纹理提供不同的贴图。丢失其中任意贴图都可能会导致材质看起来不和谐,因为它们之间相互关联。


PBS听起来可能让你觉得工作量巨大。然而,从长远来看它反倒为我们节省了时间。我们创建一次纹理,假定我们所有的流程都是正确的,那么我们就再也不用管纹理了。另外,让我们来看看Unity 4与Unity 5中的纹理在拟真度上的差别:


  


将纹理从Unity 4转换到Unity 5

《Republique》最初就是为移动平台命名的。回到我们针对移动平台制作纹理的那些日子,我们使用的是旧版的着色器系统,包含内置光照信息的漫反射贴图。因为移动平台的局限性(尤其是像iPad 2和iPhone 4这样的旧设备),所以我们以此来模拟一些更复杂的着色器可以实现的效果。然而,使用PBS就意味着要重新调整这种做法。随着电脑端内存消耗的增加,我们最终能够实现这些贴图的优势!

我们的设计师转换纹理的方式都略有不同。下面是其中一位设计师Jeremy Romanowski分享的他的方法:




由于《Republique》手游版本的材质中大约有一半都缺少法线贴图信息,所以当务之急是找到某个方法来产生,或至少模拟该数据。


Quixel的nDo 插件就是其中一个解决方案。我能非常快速可视化生成材质的法线贴图信息,如木质装饰和金属雕刻等,以及平铺纹理如木质地板、混凝土墙壁及瓷砖等。


  


有了这些法线数据我就可以制作环境光遮蔽贴图(AOM)了。我有时使用nDo直接从法线贴图生成AOM,有时使用Substance Designer 的法线贴图及高度图来生成AOM。我发现nDo更适用于从微小和高频细节导出AO数据,而Substance Designer 更适用于大型贴图。常见做法是两个结果相结合然后在Substance Designer中混合使用这两种贴图。


接下来解决的就是metalness 贴图。这几乎大多是黑白纹理贴图。由于现实中并不存在同时即绝缘又导电的材质,如果你想要模仿真实世界,不论什么风格,很重要的一点是并非贴图上每一点都介于0~255。要让金属物体看起来像绝缘体(非导体,木头,橡胶,塑料等等)就是其表面附着了污垢或灰尘。知道了这点后,我用Photoshop 标出了材质表面需要表现为金属(255,255,255)的部分,然后剩下的就是其它部分了(0,0,0)。对作者来说metalness map是制作最快也是最重要的部分。


基础贴图生成之后(Albedo反射率, Ambient Occlusion环境光遮蔽, Normal法线, Metalness金属),总算要好好利用Roughness map了。大多数熟悉metal/rough 基于物理的着色的美术都会认为roughness map才是王道。只需一个简单的Contrast/Luminosity 函数你就可以看到材质从糙度40的砂纸变换为世上最平滑的材质——类似于水银球漂浮在零重力的空间完全不受外界干扰。对,就是这么滑顺。


使用边界检测函数(Edge detection function)加上各种基于节点的滤镜和特效(刮痕、灰尘、磨损等等),是查看PBS最有效也最让人满意的方式之一。


整体来讲,我发现Substance Designer 是手动控制与自动控制间的完美媒介。我也对它在一个HDR光线充足环境下,各节点间的衔接及快速切换操作顺序即时预览的结果非常满意。如果你想更准确地知道它会怎么出现在你的Unity 场景中,你也可以导入自己的HDR环境。


一旦我感觉达到预期的效果,就将贴图以高过原始的分辨率导出为.tiff格式文件,然后在Unity 项目分支中查看效果。当然,我也会同大多数美术一样把图进行最终的调整。然而,我对基于物理的渲染器(Substance Designer/Quixel dDo)与Unity 5所呈现出的效果的一致性非常满意。


更新我们的目录结构


对Camouflaj 来说,将Unity 4的目录结构更新到Unity 5是整个团队共同的努力成果。我们需要找到方法来管理所有基于物理的着色器和它们运作需要的贴图要素。这意味着要重整我们的工作流程。我们知道我们必须对每一个材质进行调适,并记录哪些材质是被转换过的。更新了1200多个材质——每个材质都包含5个单独的纹理——这是相当大的工作量。所以我们创建材质目录来存储所有基于物理的着色器以及它们用到的纹理,各材质存放在单独的文件夹中。最终的结构图如下:




这是极其实用的。它明确表示了Alloy 文件夹中的内容是处理过的,而其它目录则没有。我们还增加了一个Legacy 目录,用来存放所有这些已经更新过的材质所用到的纹理。


总结


目前为止我们已经转换了大量的纹理到Unity 5,并且它们让游戏焕然一新。虽然我们让游戏在编辑器中看起来更酷炫了,但我们更希望用户们可以看到并亲自体验这巨大的转变,这也是它存在的意义。充分利用Unity的光照系统是整个过程中最重要的一步。

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