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

Unity 开发者案例研究:Nordeus 如何利用 DOTS 来大幅改变代码,创建移动版特大城市

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

项目

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

目标是

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

平台

安卓、iOS、个人电脑

团队成员

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

地点

塞尔维亚,贝尔格莱德

随着 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’s keynote address at Unite LA 2018 included an astonishingly complex live demo from Megacity. The demo contains 4.5M mesh renderers, 5,000 dynamic vehicles and 200,000 unique building objects. The vehicles fly on spline-based traffic lanes, never colliding, and there are 100,000 unique audio sources, including neon signs, air-conditioning fans, and cars producing unique sounds to form a rich, realistic audioscape. And it all runs smoothly on smartphones.

“For the Megacity demo, we wanted to show our complex graphics on a mobile version with a very fast frame rate. We used LWRP plus a few custom shader tweaks to make it resemble the PC version as much as possible,” said Jozef. Srdja added, “When you are working on a game that is supposed to stretch the limits of PCs, and then you decide to port it to mobile later, you usually have to rework large parts of it due to performance limitations of mobile platforms. This was not the case with Megacity. DOTS enabled us to use the exact same code running gameplay logic and rendering on a PC and seamlessly scale it down to mobile platforms.”

The Unity Lightweight Render Pipeline optimizes real-time performance on mobile devices by making tradeoffs with lighting and shading. It performs single-pass forward-rendering with one real-time shadow light and light culling per-object (with all lights shaded) in a single pass, minimizing draw calls.

嵌套预制件、深入了解 DOTS

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

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

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

Srdja Stetic-Kozic, Senior Software Engineer

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

Jozef Oros, Software Engineer

We use cookies to ensure that we give you the best experience on our website. Click here for more information.