Unity团队倾力协助,腾讯《秦时明月世界》手游开发秘事大揭晓!

修改于2021/04/01408 浏览综合
Unity团队倾力协助,腾讯《秦时明月世界》手游开发秘事大揭晓!
由玄机正版授权,腾讯首款秦时大世界MMORPG手游《秦时明月世界》已于3月26日不删档上线。这款曾获得“2020 Unity最佳角色动画奖”以及“第12届CGDA最佳动画表现奖”的国风手游历经四年多的匠心开发并由Unity工程师团队一路以来的驻场支持。今天我们请来了《秦时明月世界》主创团队,为我们揭秘开发过程中的各项技术侧突破!
TapTap
问:您好,请先介绍一下团队和项目背景。
答:《秦时明月世界》是由玄机科技授权,腾讯魔方工作室群出品的一款大型3D MMORPG手游。
问:我们知道《秦时明月世界》手游是国漫“秦时明月”IP授权,对于这类知名IP授权产品研发中,在剧情设定和人物细节上是什么经验能和我们分享吗?
答:剧情设定上,因为我们的玩家是IP粉和MMO用户的集合,剧情的还原策略是,结构形式需要契合MMO的习惯,内容设定尽可能的做到还原动画的内容。
剧情结构上,我们保证原动画内容的剧情脉络不变,每一部动画对应游戏中的一个地图章节。在单个章节内,保证关键情节点和出场的核心人物保留,对原著剧情进行精简,为了保证原汁原味的动画内容,在人物台词,事件发生的地点和场景的对应关系上,尽量做到一致。剧情的精简势必会导致部分剧情没有在游戏中体验,这部分剧情内容会在侠客为主的支线中体现。
关于人物的还原,从外形上,我们会直接对接玄机的模型制作部分,拿到动画模型,在根据游戏内渲染等逻辑进行处理,尽量做到外形一致。人物设定上,性格体现、说话方式、处事抉择等都尽可能的一比一还原,在情节一致的时候,台词和原动画也是在不妨碍整体游戏体验的情况下,尽量与原作保持一致。
问:Google Filament的半精度PBR的效果有目共睹,请问你们是如何把他们的PBR材质在Unity中进行定制的呢?据了解 《秦时明月世界》开发组还定制化了预积分的3S皮肤,能简单给我们介绍一下吗?
答:首先,我们主要是借鉴了Filament对材质模型的分类(基础模型、散射模型、各向异性模型等)和标准化写法,结合《秦时明月世界》工程的需求,使用宏定制了一套具有统一化接口的Unity光照模型,强化了着色器代码的可复用性和可拓展性。其次,Filament中针对移动平台,使用了一些简化计算方法和光照模型的近似方案,也给了我们很多启发。
3S皮肤上使用了基于Kelemen的几何遮蔽分项的高光,在高光的非线性分布上更符合美术的审美要求,也更能表现出皮肤油脂感,在漫反射项上预积分了一张曲率图来简单模拟多层皮肤的白里透红感觉。
TapTap
《秦时明月世界》皮肤效果
TapTap
问:天气系统可谓是一款优质游戏的标配,能分享下你们是如何制作雨、风、闪电、雾的效果,又是如何配合你们的TOD(Time of Day)系统,提供更真实的自然环境模拟的呢?
答:雨基于粒子系统和高度图实现了屋内无雨,屋外有雨,场景材质实现了雨天的涟漪和水流效果,并且在屋内和屋外做了融合;风则是通过对所有植被材质施加顶点动画的方式再配合上艺术家的调制曲线;闪电则通过预先实现多种闪电形状的Mesh,再对云层,建筑等施加亮度影响;雾效实现了较为自然的高度雾效果;
TOD是将灯光相关参数,自然现象相关参数等抽象成一套套集合,在一天的时间变化过程中,这些渲染相关的重要参数在不同集合中进行插值,同时也会不断变化太阳(月亮)高度,显隐星空云雨雾等。
点击观看>>天气系统 实录视频
问:《秦时明月世界》项目在开发过程中是否做了管线层面的深度定制?能简单介绍一下你们是如何基于CommandBuffer定制渲染管线,通过定制实现了一些什么样的效果呢?
答:《秦时明月世界》在开发过程对渲染管线做了很多深度的定制工作。
整体思路是在CameraEvent的各个阶段以Lazy方式预埋好需要的CommandBuffer,然后如果有特定的渲染指令,在计算好可见性后,指定好需要的绘制图元、CameraEvent、绘制优先级等等,调用CommandBuffer进行绘制。
基于CommandBuffer我们实现了例如定制化的GrabPass,基于贴花的特效和阴影系统,一些独特的后处理,Outline,FowardSSR等等。
问: 屏幕后处理、GrabPass的定制与优化相信是每个团队都会遇到的老大难问题,但是高品质的游戏都离不开他们,你们是如何深度定制与优化的呢?能给我们简单分享一下吗?
答:屏幕后处理主要在基于官方v2版本下进行的优化:
1、优化了内存,全程只使用额外1张渲染全分辨率级别的RT。
2、优化了带宽,首先是RT的格式上挑选最优,比如DOF的CoC贴图至少需要Half级别,那么便给予RGBA Half的格式,其他计算在R11G11B10下就可以满足便都给予R11G11B10;比如去除不需要的Depth&Stencil的buffer;比如修改Blit操作时候的Load\Store行为,去除不必要的带宽传递。
3、优化了过程,比如将FinalPass(主要是FXAA计算)合并入Uber;比如场景和UI分辨率分离,通过后处理的Uber直接将结果画到屏幕上,然后UI相机接替绘制;比如优化了Bloom的上下采样次数;比如将较老的OnRenderImage接口全部挪入PostProcess系统中。总之尽量减少SetRenderTarget和Blit的次数。
GrabPass则是基于CommandBuffer,在需要的阶段触发blit截屏,并且截屏的分辨率可以自由控制,是否需要重复截屏也可以自由控制,然后在需要的时候再用CommandBuffer绘制需要使用截屏结果的物体。这样避免了官方GrabPass分辨率不具备伸缩性、只能截屏一次或者N次(不指定GrabPassName就在每次绘制前都截屏,指定了GrabPassName就只截屏一次的弊端。
问:据我们了解,通过Unity定制引擎帮助《秦时明月世界》优化了一些性能,可以给我们分享一下具体有哪些吗?能不能挑一两个印象较深的简单介绍下?
答:Unity官方引擎团队为我们项目完成了很多定制优化的工作,帮助我们项目提升性能。其中Unity团队结合我们项目的工程使用情况,修改了引起的Remapper的内存占用问题,在满足我们Object数量使用的前提下,使得Remapper的内存占用比之前降低了80%;另外同时Unity引擎团队还为我们引擎在多线程的进行了优化工作,提高了引擎的并行运算能力,对于整体性能的提升,提供了很大的帮助。在Apple silicon上也做了兼容性的定制。同时定期邀请Unity驻场工程师给项目做Project Review,通过分析资源、内存和渲染等,给出改进建议。帮助我们解决各种Unity相关问题和多种真机崩溃问题。
TapTap
Remapper内存优化对比
非常感谢《秦时明月世界》主创团队接受我们的采访,相信这样一款制作精良的高品质手游,一定会得到市场与玩家的肯定。我们也期待未来能够有越来越多的匠心作品问世!
2