2017年是手游画面升级的元年,对于今天的引擎技术的话题,我们首先要聊一聊画面呈现标准的建立。画面呈现标准可能对许多人而言比较陌生,一般大家说的都是要用哪几张贴图、怎么做,画面标准都是美术师去定的。 COD手游目标是打造3A手游画面呈现,所以必然要探索PBR时代画面呈现的最佳实践与升级。
对于整个IP产品来说,首先是要定义制作的主基调。在一开始COD手游立项的时候,我们为了性能纠结过一段时间:要不要使用Phong的模型,要不要使用最经典的手绘模式。去年我们对COD手游的画面做了重大的翻新,使用PBR复刻了整个主机的画面效果。我们需要挑战的是达到主机画面的丰富度和还原度,去满足整个IP高端用户的主机情怀。
既然我们要做PBR,首先要做的第一件事就是需要统一制作管线和技术管线。对于制作管线来说,美术需要的所有贴图资源,都需要在线性空间计算,用任何工具去制作任何贴图,都需要是线性的。对于技术管线来说,需要为引擎定义统一的渲染管线,也就是说我们的渲染管线是通过技术做Scalable的HD渲染管线。对于高配进行HDR的RT输入,对于低配来说为了节省性能不能做任何的后处理,就使用OnePassHDR的管线,使用Tonemapping在最终的shader做相应的数学拟合,来拟合我们的目标曲线。
整个的制作管线和技术管线建立之后,我们再说画面标准的建立。对于画面呈现来说,我们需要一致的画面标准——比如这个角色,每个像素我们都要定义得非常标准,其实在国际标准上,任何3A游戏里面都会这么定义,要定义Material Model、Lighting Model、Shading Model。标准建立了,就可以用同样的语言说话,如果没有这个标准,美术同学会说我要这样贴图,这里面画点光上去,要做一些阴影的效果。统一标准之后,在团队里面,每个场合里面就不会再有分歧和异义,讨论起来非常简单。这些标准都是具有物理意义的参数和基于真实物理的定律,也就是遵循PBR的。还有一点是全场景物理一致的光照环境,也就是说我们要使用动态的光影+PBR+IBL。
接下来介绍这三个方面,Material、Lighting和Shader,在COD手游里面到底是什么样的。
先看一下shading model是什么。我们构建了完整的手机平台的PBR光照方案,对PBR进行分级,提出4级的PBR的数学拟合。最高级肯定是给现在的835这些系列的高端的GPU去用的,3级就是在520这种机器,2级给更低端的机器,最后一级为那种兼容性有问题的机器去使用,解决所有的兼容性问题。而人物在高中低配都使用最完整的PBR方案,也就是说不会做Shader LOD的切换。直接光用了GGX specular+lambert diffuse,间接光用cubemamp做GI Specular,用SH probe做GI diffuse。
对于建筑来是,出于性能考虑,低端会简化一些光照的部分,就是刚才说的Shader LOD。直接光其实会在远景用shadowmask,直接光不会烘焙进lightmap,直接光用纯动态的光照,间接光用的是IBLcubbmap+GPU bake的lightmap。
再来看material,固有色、一张法线+粗糙度合并的贴图、金属度+AO放在另外一张贴图。材质接受了lightprobe的间接光照和一个直接光,还有来源于environment的间接光,最后得到整体的呈现,这就是我们的material model 和lighting model。
---
确定这些东西以后我们要讨论的是制作本身。我相信一些开发者可能不太在意制作管线,但是2017年之后,大家都知道TA其实是比较吃香的。还有我认为所有技术人员都要了解美术的工作、甚至要了解策划的一些工作,这样才能把游戏制做好。所以我们来聊一聊3A级手游里面的制作管线是什么样子的。
制作过程中的核心因素,第一个是量产。所有的游戏现在最慢也要3年出来,但是往往我们没有那么多的钱或者时间,所以我们需要做大量的外包。需要保证我们所有的外包、开发、美术标准都统一,才能达到量产。第二个是引擎,现在对于任何引擎我们都觉得要做成我们自己认为一两年后所看到的最好的样子。最后一个方面是性能,无论是主机平台还是PC平台、手机平台都是非常重要的,要有最流畅的体验。这三个因素决定了我们整个制作管线。
对于制作管线来说,我觉得使用流程与工具去保证美术素材的正确性与合理性,原则有两个:一个是美术素材都是符合PBR标准的,也就是说你不能画各种阴影,你的色彩、明暗不能大于推荐值的范围;原则二:我们需要统一所有的生产规格和生产环境,这一切达到之后才能量产化。达到统一规格之后你的画面才是统一的,才是你们认为能够把握的样子。
PBR的初衷在欧美所提出的,它的初衷其实不是为了效果,而是为了量产。量产的策略其实有几个:一个是验证,我们能尽可能地验证;一个是文档,我们需要有各种各样的白皮书,去阐述我们的思路。最后一个是科学性,PBR诞生本身是工业化的产物,不是美术或者是艺术的产物,所以当你一味强调各种各样的hack、美术不同的制作方式、TA各种各样的画面雕琢之后,就不可能再科学,团队会变得不可控,就不可能把游戏做出来,也不可能有量产。所以如果要做PBR,就一定要遵循这三个原则。
关于验证,我们需要在sp(Substance Painter)里面提供一系列的光照环境给美术做验证,以前都是在photoshop里面做的,但是在里面做的任何图都可能是错的,都可能让美术制作失控。所以我们场景制作要符合三大要点,一个是图形技术的保证,在同样的一个PBR的光照环境,有95%以上是一致的,怎么保证一致?大家先看sp里面的,再看Unity的渲染管线,就可以保证一致;另外一个是制作环境约束,美术制作者使用的渲染环境必须与标准的光照环境是一致的;再下来是验收标准的约束,讨论素材本身效果品质的时候,只能参考标准的光照环境,不要在MAX或者是MAYA里面打开,也不要在任何引擎或是其他环境里打开,我们就在标准环境里面打开。这样讨论才有意义,不然管线不一致,讨论的结果也会有差异。
刚才说验证的标准场景其实包含一个主场景和六个辅助场景。主场景用于验证固有色的明暗色相,不同粗糙度表面的镜面反射情况,还有金属材质的镜面反射情况。辅助场景检验包括室内外环境光源,暖色調环境下效果,强对比度的明暗光照,还有典型室外光照下效果或固有色是否太黑的环境。我是参考装修里面的原则还有各种各样抽象出来的环境,这样能帮助美术师做各种各样的验证讨论时能看到一些有问题的场景。
有验证环境之后,要定义好详细规则的白皮书。这里面是我们里面的白皮书,比如说输出是什么样子,环境是怎么配置的,一些漫反射、镜面反射率是什么样子的,基本是一些数学原理。同时会有一些黑科技作为素材验证的参考工具,包括屏幕校色器、照度仪,以及一些标准的色,通过这些去做校验。同时也出去测量SH或者lightmap环境,保证你在房间色调也是一致的。美术在调各种各样的色彩甚至是光照值都是感性的认识,我们需要给他们一个非常标准和标量的参考。
这个标准能保证我们在制作整个PBR的时候有所参考、有所依据,最后才能呈现很好的画面效果。
---
说完这些,再说一下COD手游引擎技术的沉淀。上面两个部分掺杂TA、美术以及工程师的一些工作,下面就是相关的纯技术人员的工作。其实就是颠覆、拓展整个Unity引擎之路,会作为未来3A手游引擎实践的一些标杆。
首先我们需要做的是补齐游戏里面所缺的渲染的东西。比如说头发怎么做、皮肤怎么做、角色怎么做,这些都要尽可能做补齐。对于一些包含地形的地图或者是其他技术方案可能要做拓展,比如说到地形,我认为我们应该是在国内工作室中Unity结合houdini应用最多的。我们有这个组合的工作流,还有不同地貌的Drawcall合并,并且支持Vertex fetch texture,我们使用地形的时候,我认为是现在手游最佳的地形方案,所以我们对地形系统做了深度的改造。
接下来是烘焙。烘焙使用了GPU烘焙,当地形非常复杂的时候,如果用Enlighten就需要通宵的时间。现在我们烘焙复杂度非常高的场景只需要3-5分钟,以前烘焙需要4-6个小时,这是不能接受的。出现bug的时候发现同一天就要卡十张图,会出现无限的加班,这个迭代时间非常重要。用GPU烘焙可以做更多的效果提升,计算正确性和参数科学性有了更强的依据。甚至于可用到一些AI技术,对烘焙结果做一些降噪和算法上的改造,所以我们这边用了整套GPU的烘焙方案。
我们对烘焙做了深度的定制,也就是说结合houdini做了自动的部署,以前我相信所有美术人员这些Light probe都是用手工一个一个去摆的,摆的纯属人体劳动力,并且不准确,所以我们拓展了整体算法,然后使用程序化自动生成Lightprobe,让这些迭代更加快速。所有的这些光影可以看到其实是非常密集的,我相信各位如果要做这种游戏的时候,也可以做这样的尝试,算法不是特别复杂。
植被方面,原来完全是美术制作的,现在很多场景都要用到大量植被,以前的生产方式其实都是美术逐棵逐棵地做,我们现在程序化地生产AO和法线,这样原来两周的工作量等于节省到两天。这些都是很有意义的,省掉大量的制作成本和人力成本,也省掉很多外包的工作,所以现在无论制作什么,我们都要积极地去拥抱整个PCG的技术,用这些技术助力整个生产过程。
我们生产了很多很多的游戏,大家可以看到制作标准和美术规格也是非常高的。如何保证整体制作和引擎和性能能够保证一体化呢?我们所有程序和管线的制作都是要后期去进入的。比如我们用了4张贴图都是零散的贴图,我们肯定要有自己的一些技术。美术原来做的所有的都是零散的贴图,事后会对它的图进行整理和整合,这样避免一开始就定规范和美术讨论我的贴图如何分配、如何做这种性能的保证。
注:图中文本应为Texture Atlas
此外我们会用一些Texture Streaming之类的技术保证包括iPhone 6的机型兼容。所以整个制作过程都不会打乱美术的工作流,直到后续再做优化,我们会用一系列的技术比如说Texture atalas、Texture Streaming、PBR Shader lod等,这样后续进入优化阶段也能做到性能的动态收缩。
最后一部分更为重要,就是做引擎改动的时候,需要了解引擎技术的演化。最近面试了很多候选人,聊了很多行业里面的大咖,对不同层次的开发人员做讨论。大家在做修改的时候,我觉得很多时候是没有依据的,可能是在翻博客时突然发现一个技术就拿来使用。在我们的技术里面。我们团队非常注重引擎技术的演化,包括最重要的三个方面,一方面是引擎技术的移动端化。从2017年到现在,可以认为所有PC Game技术都可以在移动端使用了,如果现在不能使用,我相信未来两三年也可以。比如现在流行使用线性空间的运算、做PBR渲染、做雾和大气的效果,会做渲染标准的一些更新,这些其实8年前我在端游就做过了。但是现在手游再次使用,所有技术都是端游往手游做演化,我们只是做相对的数学拟合和科学性的一些探索。所以大家做手游移动端化的时候,一定要注意端游技术的移动端化。
另一方面是引擎技术与工具的升级,引擎版本不断升级,我第一次使用Unity的时候是4.5的版本,现在这个游戏基本上可升到五点几。这些引擎的不断升级对底层的改造是比较大的,比如现在Unity ECS,各方面的烘焙方式、各方面的技术也都在做升级。所以升级引擎的时候你要想到用引擎升级的那一个游戏,做一些你自己最稳定的技术演化。再加上现在的工具也在不断地发展。近几年其实用Substance与Houdini,之后这一系列的美术工作在团队里面普及越来越明显,所以我们需要使用所有的工具做配合进行游戏的制作。
最后就是芯片的发展。芯片发展会更快,可以认为现在芯片可以达到了五六年前渲染的一些量级,只是功耗没有跟上来而已。所以我们基于现在芯片发展趋势可以做的事会越来越高。我们团队其实也在做一些PRT的动态GI的效果,我觉得这些将来都会变成可能。大家在一些高端平台上做这些特性,可以给游戏加分。再加上现在业界一些前沿技术的推进,也会让你整个手游更迈进一步,比如说RTX光线追踪,现在都在讨论要不要用RTX做光线的一些烘焙方案,我们自己用过光线追踪的渲染技术,发现它的理想效果会大有增益,可以做很多你想不到的东西。
再加上过程化制作,我前面其实演示了很多过程化制作的内容,有些部分没有在这里讲,但是从2018年开始,过程化制作已经深入到我们每一个制作过程——比如说植被立型、任务、AI还有玩法本身都可以参与到过程化制作。再加上最后一点,可能对国内来说有点前沿,就是Machine Learning。现在整个匹配算法还有后面的AI,我们都会尝试使用Machien Learning做探索,这些技术都会推动我们引擎技术不断演化。