网易首页 > 网易号 > 正文 申请入驻

千人同屏战斗:Unity DOTS在《重返帝国》中的应用

0
分享至

背景介绍

腾讯天美工作室群,在全球游戏开发者大会(GDC) 上共做了5场分享。本演讲为天美团队于 2023 年 GDC 进行的非赞助核心演讲(Core Concept)“千人同屏战斗:Unity DOTS在《重返帝国》中的应用“分享的图文版内容。

演讲者简介

肖健

(腾讯天美 T2 工作室客户端组主程序)

肖健于 2014 年加入腾讯天美工作室群,目前担任《重返帝国》客户端组主程序。肖健在游戏框架、Gameplay 和性能优化等方面都有着丰富的研发经验。

侯仓健

(腾讯天美 T2 工作室引擎负责人)

侯仓健于 2014 年加入腾讯游戏,曾参与多款手游的研究与开发工作。侯仓健于 2019 年加入腾讯天美工作室群《重返帝国》团队,目前主要负责游戏引擎和工具链的开发工作。

演讲正文

《重返帝国》是一款高品质全 3D SLG 手机游戏,游戏场景规模宏大,玩家操作自由多变,画面上经常会出现超过1000个士兵一起战斗的场景。在有限的移动设备性能上,需要同时兼顾性能与品质,团队在尝试过C#、C++以及DOTS等多种技术方案的选型与研究后,最终选择了Unity DOTS。

Unity DOTS对于团队可以说是一次敢为人先的选择,当时市面上并没有比较知名的使用这项技术的游戏项目,所以这项技术最后呈现出来的效果其实是没有太多参考的。其次,当时DOTS是处于一个比较初期的版本,Unity官方还在不停的修改和完善,这意味着团队享受不到新的features,甚至可能需要处理一些潜在的隐患,这对团队来说是不小的挑战。

实战分享

团队一方面与Unity官方保持密切的合作与交流,另一方面经过多次的技术迭代与优化,最终在《重返帝国》项目上取得了很好的实践效果,在移动设备上为玩家呈现了极高品质的视觉效果。同时团队也积累了一套行之有效的方法论,以下总结了几点分享给大家。

  1. Job数据依赖分析与优化,提升整个系统的并发性

  2. 将部分ECS System的Job与非ECS逻辑并行,充分发挥多核

  3. 逻辑数据显示分离,提升chunk内存利用率,减少资源加载带来的卡顿

  4. 针对System进行逻辑降频,保证效果同时也提升性能

当我们完成了整体的框架设计和核心的实现后,在进行性能分析的时候发现Job的并发性并不高,且worker存在大量的idle状态,导致系统的整体耗时偏高。为此,我们专门开发了静态分析工具辅助我们找出System之间的读写冲突与依赖,通过数据拆分、数据备份来解决冲突,让耗时较高的Job能够并行。

数据依赖静态分析工具

数据拆分解决写入冲突

数据备份解决读写冲突

基于工具的分析,我们不断的细化和调整,解决了数据的冲突依赖,显著提高了Job的并发性,最终达到了我们相对满意的并行效果。

数据依赖优化后Job的并发执行

之后,我们还将System按照功能进一步的细化拆分,把一部分Job的执行提前到与非ECS代码逻辑并行,进一步从整体上提高了我们的游戏帧率。

ECS Job与非ECS逻辑并行

在进行了Job并行性优化之后,我们发现在大地图上拖动时存在由于Entity资源同步加载导致的一些耗时峰刺,这对玩家来说是体验上的损失。所以我们针对Entity,使用逻辑与显示分离,一方面让资源可以异步加载减少卡顿,另一方面也提升了单个chunk的内存利用率减少CPU的cache missing。

逻辑显示分离-资源异步加载

最后,我们在不影响效果的前提下,针对部分System进行逻辑降频与错帧(如移动逻辑计算相关的System降到12帧、耗时较高的MoveJob与AnimatorJob错帧执行),让整体的耗时更加平滑,并且有效的降低了游戏的功耗。

性能优化

当时我们使用的是 Unity2019版本,Hybrid Render V1 版本,为了能更顺利的将DOTS适配到我们的项目中,我们也在原始框架的基础上,在资产与渲染方面也进行了大量的按需开发。

我们在接入 DOTS 技术栈时,主要面临了以下3个问题:

  1. 资源兼容性:因为在接入时已经处于项目中期,很多游戏资产及对应的生产流水线已经成型,所以如何将已有游戏资产转变成可在 DOTS 技术栈中运行的资产,是我们需要解决的问题。

  2. 逻辑阶段的基础开销过大:可能会导致千人同屏场景出现时出现卡顿。

  3. 渲染阶段无法修改自定义的材质属性:因为我们对于战斗场景的还原重度依赖 GPU Instancing 技术,所以需要很多自定义的材质属性可以在运行时被复写。

于是,我们针对以上问题逐个研究核心痛点,找到了适合我们项目的解决方案。

在资源兼容性方面,在综合评估了各种方案之后,我们决定实现一套自己的序列化和反序列化流程。我们的方案分为离线和运行时两个阶段:离线时,我们将游戏中各类资产对应的prefab拆分成二进制文件和引用到的资源文件;运行时,我们创建了一个“deserialize world”,用来把离线时生成的二进制文件和资源文件反序列化,生成entity。当entity生成好后,我们再把它们移入default world进行运行。这样我们既可以在资产制作阶段使用我们熟悉的prefab,也可以减少运行时的转换时间。

资产Entity实例化

对于HybridRenderV1在逻辑阶段的开销过大,我们定位到了核心的瓶颈是主线程阻塞。比如整个生成合批信息的过程都是放在主线程中进行的,这个过程有很大的优化空间。

我们的优化方向就是多线程化,充分利用移动端的多核优势。其实在生成合批信息时,不同的RenderMesh一定对应不同的batch,任务本身具有可多线程化的特性。所以如下图所示,我们分配了一个较大的缓存数组,数组的大小与线程数量和RenderMesh数量相关。多个线程并行完成对含有RenderMesh的Chunk进行筛选,并填入缓存数组的指定位置。因为在缓存数组中,每个线程都有自己的写入空间,所以多线程并行时,不会产生数据写入冲突。

多线程RenderMesh Batch

我们还对游戏中LOD的结构进行了优化。我们游戏中的模型一般有4层LOD,在转换成entity后,将会有6个相关的entities生成。

过多的entity不仅浪费内存,同时也会导致很多冗余计算(比如同步位置信息),而根据LOD的特点,我们可以只记录单个LOD的信息,在渲染时按需替换成应当显示的LOD Mesh即可,这样我们就可以把原本的4个LOD网格当做一个单独的网格来对待。同时,我们也将LOD Group节点和Root节点进行了合并,Entity的数量也从原来的6个下降到2个,性能也有了提升。

这种方式带来的一个额外好处是当我们更高层级的LOD还未加载完成或渲染压力过大时,我们可以只加载低层级的LOD模型来显示。

LOD结构优化

为了在C#中更改材质的Instance属性,我们定义一个和Instance属性完全匹配的IComponentData Struct,在数据对齐方面,我们遵循std140内存数据对齐原则。如下图所示

Instance属性对齐

在渲染运行时,我们根据entities的数量预先分配一块大的缓存,之后利用多线程把各个可见的entity的InstanceParam数据复制到Buffer中的指定位置。最后将整个缓存直接提交至GPU,我们就可以按照传统的GPU Instance方式来使用缓存中的数据了。

在有了RenderMesh上的材质信息和mesh数据之后,我们的InstanceBuffer也组织好了,这样通过调用Unity的DrawMeshInstanced接口就可以进行渲染了。

Instance Data Buffer

以上都是团队在实践中不断迭代总结出来的宝贵经验,希望能对那些同样想使用Unity DOTS技术的团队能有所启发。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
媒体澄清后,又反转了?

媒体澄清后,又反转了?

鱼眼观察
2026-02-24 11:01:33
新婚女子手臂成亮点,“满眼都是xxx”,难道新郎一点都不在乎?

新婚女子手臂成亮点,“满眼都是xxx”,难道新郎一点都不在乎?

仙仙先生
2026-01-30 09:35:22
亲密度停在99%,上海老人被盯上!春节9天,被害人超8000人!警方:根本闲不下来

亲密度停在99%,上海老人被盯上!春节9天,被害人超8000人!警方:根本闲不下来

环球网资讯
2026-02-24 19:48:22
复工第一天,领导就将我辞退,当晚却接到十多个电话

复工第一天,领导就将我辞退,当晚却接到十多个电话

船长与船1
2026-02-24 12:22:21
深圳女保姆事件曝光,监控画面全网热议:没有边界感的人,太可怕了

深圳女保姆事件曝光,监控画面全网热议:没有边界感的人,太可怕了

爱下厨的阿酾
2026-02-24 16:19:03
新春第一会,风向标来了!

新春第一会,风向标来了!

中国网
2026-02-25 00:58:04
人民日报:管好这6点,孩子想不优秀都难

人民日报:管好这6点,孩子想不优秀都难

诺妈家有男宝娃
2026-01-30 12:15:34
这是要出大事了。。。

这是要出大事了。。。

贩财局
2026-02-23 09:56:19
伊朗外长:希望在最短时间内与美国达成公平协议

伊朗外长:希望在最短时间内与美国达成公平协议

财联社
2026-02-25 02:57:21
18分钟输28分!队魂成拖油瓶,所有输球组合里都有他!真砸手里了

18分钟输28分!队魂成拖油瓶,所有输球组合里都有他!真砸手里了

阿浪的篮球故事
2026-02-24 16:06:20
明确规定来了!机关事业单位职工下班后打牌打麻将,算违纪吗?

明确规定来了!机关事业单位职工下班后打牌打麻将,算违纪吗?

长星寄明月
2026-01-24 11:26:06
中到大雨、7级大风,浙江雨水一路加强!将持续到3月初,每天记得带把伞

中到大雨、7级大风,浙江雨水一路加强!将持续到3月初,每天记得带把伞

台州交通广播
2026-02-25 01:41:09
“戏混子”没走,比资本家丑孩子更可怕的是“星二代”开始世袭了

“戏混子”没走,比资本家丑孩子更可怕的是“星二代”开始世袭了

流史岁月
2026-01-26 10:58:30
赵露思代言成人用品!

赵露思代言成人用品!

八卦疯叔
2026-02-24 11:13:41
官方实锤!湛江妈祖“换童”传闻纯属造谣,细节打脸所有质疑者!

官方实锤!湛江妈祖“换童”传闻纯属造谣,细节打脸所有质疑者!

社会日日鲜
2026-02-25 05:46:56
丰韵:一种关于存在的浓度美学

丰韵:一种关于存在的浓度美学

疾跑的小蜗牛
2026-02-24 22:58:28
小杨阿姨在老家休假,直播揭露马筱梅生产内幕,忧心失业!

小杨阿姨在老家休假,直播揭露马筱梅生产内幕,忧心失业!

古希腊掌管月桂的神
2026-02-24 20:03:51
春节期间,来自中国的最重要“客人”没来,日本的失落已掩饰不住

春节期间,来自中国的最重要“客人”没来,日本的失落已掩饰不住

健身狂人
2026-02-24 16:44:39
2014年,北京女博士李香蓉因接受不了新郎身份,在车内将其几刀刺死

2014年,北京女博士李香蓉因接受不了新郎身份,在车内将其几刀刺死

红豆讲堂
2024-10-14 15:30:03
香菇再次被关注!医生发现:癌症患者吃香菇,不用多久或有5改善

香菇再次被关注!医生发现:癌症患者吃香菇,不用多久或有5改善

读懂世界历史
2026-02-12 21:48:53
2026-02-25 07:12:49
游戏茶馆 incentive-icons
游戏茶馆
关注全球移动游戏产业
10936文章数 20618关注度
往期回顾 全部

游戏要闻

《死亡搁浅2》PC版配置需求公开!最低GTX1660畅玩

头条要闻

男子搂住继女强吻动作亲密 当地妇联介入

头条要闻

男子搂住继女强吻动作亲密 当地妇联介入

体育要闻

苏翊鸣总结米兰征程:我仍是那个热爱单板滑雪的少年

娱乐要闻

汪小菲官宣三胎出生:承诺会照顾好3个孩子

财经要闻

县城消费「限时繁荣」了十天

科技要闻

宇树科技发布四足机器人Unitree As2

汽车要闻

入门即满配 威兰达AIR版上市 13.78万元起

态度原创

时尚
本地
教育
公开课
军事航空

阔腿裤失宠了?这4条裤子承包你整个春天的时髦!

本地新闻

春花齐放2026:《骏马奔腾迎新岁》

教育要闻

旧高考地理题对新高考地理考生警示(以2022年旧高考题为例)

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美军参联会主席警告:对伊朗动武可能带来重大风险

无障碍浏览 进入关怀版