DOTS 实现在移动设备上运行充满未来感的“特大城市”

Nordeus - Unity开发者案例分析

是什么启发我们创作了 Unity 社区活动中像“特大城市”这样令人惊艳的演示程序?这只是些华而不实的东西,还是能为 Unity 开发者们带来实际好处?贝尔格莱德的 Nordeus 工作室曾多次受邀参加 Unite 开发者大会,演示他们热门游戏中的元素。不过,他们进行新技术演示并不是为了炫耀——他们将要演示的是 Unity 的全新功能,而这些功能将让您的创意制作和程序设计如虎添翼。

项目

定期演示我们的“默认性能” / DOTS 计划的最新进展

目标是

为所有 Unity 开发者带来多线程代码性能的提升

平台

安卓、iOS、个人电脑

团队成员

特大城市 3 名、战场演示 20 名

地点

塞尔维亚,贝尔格莱德

面向数据的DOTS编码使Megacity迅速登陆移动平台

随着 CPU 核心数不断增加,高性能多线程已成为所有现代计算引擎的基本功能。数据导向型技术堆栈 (Data-Oriented Technology Stack, DOTS) 是 Unity 的多核多线程解决方案,它是实体组件系统 (Entity Component System, ECS)C# 作业系统 (C# Job System) 以及突发编译器 (Burst Compiler) 的总称。

Nordeus 演示了其优势以及轻量级渲染管线 (Lightweight Render Pipeline, LWRP) 和嵌套预制件 (Nested Prefabs) 等其他 Unity 功能,从洛杉矶到柏林,观者无不惊叹。

成果如下:

  • 易于编写的高效多线程代码
  • 针对移动端等低性能平台优化的渲染性能
  • QA 速度更快,集成错误显著减少
在黑客马拉松上连接 DOTS

一支极具创意的国际团队

Nordeus 由前微软工程师 Branko Milutinovic、Milan Jovovic 和 Ivan Stojisavljevic 于 2010 年共同创立。《Top Eleven – Be a Soccer Manager》(在美国以外的国家/地区被称为 “Football”)是 Nordeus 发布的第一款游戏,这是一款免费球队经营游戏。该游戏在 Facebook 上获得了巨大成功,在短短三周内就实现了盈利,并于 2011 年被移植到安卓和 iOS 平台。此后,该公司在 iOS 和安卓平台上发布了《Golden Boot》,测试发布了《Heroic: Magic Duel》,并拥有许多处于开发中的游戏。

Nordeus 的总部设于贝尔格莱德,这是一座具有深厚文化和历史底蕴的城市。公司员工来自 22 个国家/地区,该公司常被称作欧洲最好的工作场所,也是多个慈善机构的慷概捐赠者。

Jozef Oros 和 Srdja Stetic-Kozic 是公司的两位顶尖软件工程师,两人同为贝尔格莱德当地人,与另外八人在 Nordeus 科技中心团队工作。他们负责开发所有 Nordeus 游戏中使用的工具和技术。正如 Srdja 所说,“我们所有的游戏都是在 Unity 中制作的。”

在黑客马拉松上连接 DOTS

“在听说 DOTS 后,我们马上与 Unity 取得了联系,试用一下,看看我们是否可以合作,”Jozef 说道。“我们希望为玩家提供最佳的用户体验,而流畅的游戏过程则是重中之重。当然,我们对可以提高游戏运行速度的任何事情都非常感兴趣。”

合作开始于 Unity 和 Nordeus 首席技术官在贝尔格莱德召开的一场会议。Nordeus 热忱欢迎 Unity 帮助其了解新技术,而 Unity 想要一款真实的应用程序来测试 DOTS 的极限。Srdja 补充道,“我们还希望通过 Joachim Ante(Unity 联合创始人)展示一些又酷又华丽的东西。因此,在奥斯汀 Unite 大会(2017 年)上,我们想‘让我们在《Heroic: Magic Duel》进行一场战斗,将其扩大到 10 万个单位,然后把他们全部炸上天!’我们对此激动不已。”

Jozef 和 Srdja 是 Nordeus 的第一批 DOTS 用户。 他们将约 90% 的时间用于编写游戏系统,特别是渲染系统、单位移动系统和逻辑系统。Jozef 说道,“Unity 的 DOTS 让我们可以做出一些非常酷的大范围爆炸魔法,我们知道这些特效肯定会令观众叹为观止。”

该团队在两个月内为奥斯汀 Unite 大会完成了Nordeus 战场演示,在前四周集中进行程序编写和原型设计。他们在哥本哈根与 Unity 团队共度了一周时光,在一个房间中展开黑客马拉松式的工作。 “与 Joe 和他的团队一起工作是一次非常棒的经历。我们学到了有关 ECS、C# 作业系统、突发编译器以及面向数据编程等方面的大量第一手知识,”Jozef 补充道。

与面向对象编程说再见

改用面向数据编程是一个巨大的改变,开始可能会令人望而生畏。但是,据 Srdja 说,“DOTS 是一种截然不同的思路,一两周后,我们一下茅塞顿开,写出了比以前好得多的代码。而 ECS 让我们可以非常轻松地集合旧代码。”

C# 作业系统是 DOTS 的一个组成部分,它可以编写线程安全的代码、管理资源竞争(线程以意料外的顺序运行,导致意外结果)以及优化上下文切换,达到近乎 100% 的多核使用率。另一个组件是突发编译器,这是一种基于 LLVM 的数学感知编译器技术,可以处理 C# 作业,生成针对目标平台的特定功能优化的高效机器代码。

Joachim Ante 说道,“我们的突发编译器可深入理解数学和几何,可以执行其他编译器无法做到的数学优化。它会自动矢量化 C# 代码,并为特定目标平台生成矢量化指令。因此,代码运行速度将大大加快。”突发编译器还修补了大量原本需要在 QA 中清除的集成错误。

赢得特大城市之战的胜利

在奥斯汀 Unite 大会上展示的战场演示使用了《Heroic: Magic Duel》中的组件。Nordeus 团队将他们的 DOTS 技能主要发挥在动态游戏元素上,在一片大小有限的地形上使用了大量动画单元。

Nordeus 做好了迎接下一场挑战的准备,开始制作”特大城市“,这是一个庞大的开放世界,其中包含 450 万个需要渲染、剔除的物体,5000 辆需要模拟的飞行汽车,还有需要同时播放的 10 万个音频源。所有这些都要在电脑和移动端上运行。Jozef说道,“Unity 的 DOTS 用在了特大城市的方方面面,例如全新的渲染和动画技术、用户界面 (User Interface, UI) 系统、甚至音频。我们可以将所有这些技术应用于我们现有的游戏以及尚处于开发中的游戏。”

LWRP 助力在移动设备上呈现一整座大都市

Joachim Ante在Unite LA 2018上的主旨演讲包括来自Megacity的非常复杂的现场演示。 该演示包含450万个网格渲染器、5,000辆动态车辆和200,000个独特的构建对象。 这些车辆在基于样条线的行车道上飞行,从不会撞车,并且有100,000个独特的音频源,包括霓虹灯、空调风机和产生独特声音的汽车,可形成丰富、逼真的音响效果。 在智能手机上全都顺畅运行。

“对于Megacity演示,我们想要以极快的帧率在移动设备上展示我们复杂的图形。 我们使用了LWRP和一些自定义着色器,使其尽可能像PC版本”,Jozef. Srdja 补充道,“假设您正在开发一款旨在突破PC极限的游戏,稍后您决定将其移植到移动设备上。在这种情况下,由于移动平台的性能限制,您通常不得不重新设计游戏的大部分内容。 在使用Megacity时不是这样。 DOTS让我们能够使用在PC上运行游戏逻辑和渲染的完全相同的代码,并将其无缝缩减来适应移动平台。”

Unity轻量级渲染管线通过利用光照和着色进行权衡来优化移动设备上的实时性能。 它按对象使用一个实时阴影光源和光照剔除在单个通道中执行单通道前向渲染(所有光照均着色),从而最大程度减少绘制调用。

嵌套预制件、深入了解 DOTS

“在特大城市演示中,我们首次使用全新的 Unity 预制件嵌套系统,该系统受到我们艺术家的一致好评,”Jozef 说道。例如,使用预制件嵌套,一座大型建筑物可以由许多房间预制件构成,而房间预制件又可由多个家具预制件构成,诸如此类。开发者可以将预制件分解为多个实体,以提高效率,还可以重复使用各种大小的内容,同时处理不同部分的内容。

Nordeus 有着宏大的产品路线图,完全采用 Unity 和 DOTS 编程方式。正如 Srdja 所说:“如果你正在考虑是否应采用 Unity DOTS,那就大胆去做吧。就算忘掉很多有关面向对象编程的知识也不要紧!”

“DOTS 是一种截然不同的思路,一两周后,我们一下茅塞顿开,写出了比以前好得多的代码。而 ECS 让我们可以轻松集成旧代码。”

Srdja Stetic-Kozic, Senior Software Engineer

“在听说 DOTS 后,我们马上与 Unity 取得了联系,试用一下,看看我们是否可以合作。我们希望为玩家提供最佳的用户体验,而流畅的游戏体验则是重中之重。当然,我们对可以提高游戏运行速度的任何事情都非常感兴趣。”

Jozef Oros, Software Engineer

我们使用 Cookie 来确保为您提供网站的最佳体验。有关更多信息,请访问我们的 Cookie 政策页面

明白了