Unity团队协助腾讯《秦时明月世界》手游开发

腾讯首款秦时明月大世界MMORPG手游《秦时明月世界》已于3月26日不删档上线。这款曾获得“2020 Unity 最佳角色动画奖”以及“第12届CGDA最佳动画表现奖”的手游历经四年多的匠心开发,并由Unity工程师团队驻场支持。本篇文章将揭秘游戏的主创团队是如何在游戏的整个开发过程中实现各项技术侧突破的!


项目背景


腾讯秦时明月世界手游:《秦时明月世界》是由玄机科技授权,腾讯魔方工作室群出品的一款大型3D MMORPG手游。


在游戏的剧情设定上,团队考虑到游戏的核心玩家是IP粉和MMO用户的集合,所以剧情的还原策略被设计成结构形式契合MMO玩家的习惯,内容设定则尽可能的做到还原动画中的原版内容。


在剧情结构上,开发团队在保证原动画内容的剧情脉络不变的情况下将每一部动画对应设计成游戏中的每一个地图章节。在单个章节内,将关键情节和出场的核心人物进行保留。由于游戏体量的限制,团队对原著剧情进行了精简。为了保证原汁原味的动画内容,在人物台词,事件发生的地点和场景的对应关系上,团队尽量做到了与动画相一致。剧情的精简势必会导致部分剧情没有在游戏中体验,而这部分剧情内容会在侠客为主的支线中体现。


关于人物的还原,从外形上,开发团队直接对接了玄机的原版动画模型,在拿到动画模型之后根据游戏内渲染等逻辑进行处理,做到外形与动画模型一致。人物设定上,人物性格体现、说话方式、处事抉择等都尽可能的实现与动画一比一还原,在情节一致的时候,台词和原动画也是在不妨碍整体游戏体验的情况下,尽量与原作保持一致。


Unity团队协助腾讯《秦时明月世界》手游开发


高画质表现


由于Google Filament的半精度PBR效果有目共睹,开发团队借鉴了Filament对材质模型的分类(基础模型、散射模型、各向异性模型等)和标准化写法,结合《秦时明月世界》游戏项目的需求,团队使用宏定制了一套具有统一化接口的Unity光照模型,强化了着色器代码的可复用性和可拓展性。其次,在Filament中针对移动平台,团队使用了一些简化计算方法和光照模型的近似方案,这些算法和方案也给团队带来了一些游戏开发上的启发。


在游戏中推出的3S皮肤上开发团队使用了基于Kelemen的几何遮蔽分项高光,在高光的非线性分布上更符合美术的审美要求,也更能表现出皮肤的油脂感,在漫反射项上他们使用了一张曲率图来简单模拟多层皮肤表面白里透红的感觉。


Unity团队协助腾讯《秦时明月世界》手游开发

《秦时明月世界》中的皮肤效果


管线定制


在如今天气系统是一款优质游戏的标配,真实的雨、风、闪电、雾的效果将会为玩家带来更加沉浸的游戏体验,为此《秦时明月世界》推出了TOD(Time of Day)系统,提供更真实的自然环境模拟。


基于游戏中的粒子系统和高度图开发团队实现了屋内无雨,屋外有雨,场景材质则实现了雨天的涟漪和水流效果,并且在屋内和屋外进行了融合;关于风的表现则是通过对所有植被材质施加顶点动画的方式再配合上艺术家的调制曲线,以实现风吹草动的效果;闪电效果是通过预先创建多种闪电形状的Mesh,再对云层,建筑等施加亮度影响从而实现雷电交加效果;而雾效则是依靠较为自然的高度雾功能来实现。


随时间变化的TOD系统是将灯光相关参数,自然现象相关参数等抽象成集合,在一天的时间变化过程中,这些渲染相关的重要参数在不同集合中进行插值,同时TOD系统也会不断变化太阳(月亮)高度,显隐星空、云雨、雾气等。


《秦时明月世界》在开发过程中对渲染管线做了很多深度的定制工作。整体思路是在 CameraEvent 的各个阶段以Lazy方式预埋好需要的CommandBuffer,然后如果有特定的渲染指令,在计算好可见性后,指定好需要的绘制图元、CameraEvent、绘制优先级等等,之后再调用CommandBuffer进行绘制。


通过使用CommandBuffer开发团队实现了如定制化的GrabPass,基于贴花的特效和阴影系统,以及一些独特的后处理,Outline,FowardSSR等等功能。


协助优化


游戏的后期处理主要基于官方v2版本进行优化:


l 优化了内存,全程只使用额外1张渲染全分辨率级别的RT。


l 优化了带宽,首先在RT的格式上挑选最优,比如DOF的CoC贴图至少需要Half级别,那么便给予RGBA Half的格式,其他计算在R11G11B10下就可以满足便都给予 R11G11B10;去除不需要的Depth&Stencil的buffer;修改Blit操作时的LoadStore行为,去除不必要的带宽传递等。


l 优化了过程,比如将FinalPass(主要是FXAA计算)合并入Uber;比如场景和UI分辨率分离,通过后期处理的Uber直接将结果反应到屏幕上,UI相机接替绘制;优化了Bloom的上下采样次数;将较老的OnRenderImage接口全部挪入PostProcess系统中。尽量减少了SetRenderTarget和Blit的次数。


GrabPass是基于CommandBuffer的而生成的,在需要的阶段使用blit截屏,并且截屏的分辨率可以自由控制,是否需要重复截屏也可以自由控制,然后在需要的时候再用CommandBuffer绘制需要使用截屏的物体。这样就避免了官方GrabPass分辨率不具备伸缩性、只能截屏一次或者 N 次(不指定GrabPassName就在每次绘制前都截屏,指定了GrabPassName就只截屏一次的弊端)。


Unity的官方团队为该项目提供了很多定制优化的工作,有效的帮助项目有提升了性能。Unity的专家团队结合项目的使用情况下,修改了引起的Remapper的内存占用问题,在满足Object数量使用的前提下,使Remapper的内存占用比之前降低了80%;同时,Unity引擎团队还为引擎在多线程工作时进行了优化,提高了引擎的并行运算能力,对于整体性能的提升,提供了很大的帮助。此外Unity团队还在Apple silicon上做了兼容性的定制。同时定期邀请Unity驻场工程师给项目做Project Review,通过分析资源、内存和渲染等,给出有效可行的改进建议。帮助《秦时明月世界》开发团队解决了各种Unity相关问题和多种真机崩溃问题。


Unity团队协助腾讯《秦时明月世界》手游开发

Remapper 内存优化对比

展开阅读全文

页面更新:2024-04-16

标签:腾讯   明月   团队   世界   游戏   模型   分辨率   剧情   内存   皮肤   效果   动画   项目   内容   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top