DOTS によってモバイルで未来的な Megacity を実行

Nordeus - Unity 開発者のケーススタディ

Unity のコミュニティイベントでの Megacity のようなインパクトを与えるデモはどのようなインスピレーションから生まれたのでしょうか? ただの目の保養ではなく Unity の開発者にとって実際のメリットがあるのでしょうか? ベオグラードに本社がある Nordeus 社は、多くの Unite 開発者カンファレンスで注目のスタジオであり、ヒットした自社のゲームから選定した作品のデモを行っていました。Nordeus 社は最先端のクリップを見せつけるだけではなく、ユーザーが実現できることをクリエイティブ面とプログラム面の両方で劇的に変化させる Unity の新しい機能を実証しています。

プロジェクト

「デフォルトで高度なパフォーマンスを」の最新の進化を定期的に実演 - DOTS イニシアティブ

目標

すべての Unity 開発者向けに、マルチスレッド対応コードのパフォーマンスを向上

プラットフォーム

Android、iOS、PC

チームメンバー

Megacity では 3 人、戦闘デモでは 20 人

場所

セルビアのベオグラード

データ指向の DOTS コーディングにより Megacity を短時間でモバイルに

CPU はコア数が増える傾向にあるため、最新のコンピューティングエンジンではハイパフォーマンスなマルチスレッド化が不可欠な機能になっています。複数のコアやスレッドに対する Unity のソリューションは Data-Oriented Technology Stack(DOTS)です。この用語は、 Entity Component System(ECS)C# Job System、そして Burst コンパイラーの総称です。

ロサンゼルスからベルリンまで Unite のオーディエンスを常に熱狂させてきた Nordeus 社は、DOTS と、軽量レンダーパイプライン(LWRP)や ネストされたプレハブなどの Unity の他の機能のメリットを実証しています。

次のようなメリットが生まれています。

  • 記述が容易で効率的なマルチスレッド対応コード
  • モバイルなどの低パフォーマンスのプラットフォーム向けに最適化されたレンダリング
  • 統合のバグが大幅に減少したことによる QA の迅速化
ハッカソンで DOTS につなぐ

すさまじくクリエイティブで国際的なチーム

2010 年に Microsoft 社の元エンジニアの Branko Milutinovic 氏、Milan Jovovic 氏、そして Ivan Stojisavljevic 氏によって設立された Nordeus 社は、最初にフリーミアムのチームマネジメントゲーム『Top Eleven – Be a Soccer Manager』(米国以外では「Football」)を公開しました。このゲームは Facebook で桁外れの成功を収め、3 週間で採算が取れて、2011 年に Android と iOS に移植されました。それ以降は、iOS と Android で『Golden Boot』を公開し、ソフトローンチで『Heroic: Magic Duel』を公開し、その他に多数のゲームを開発中です。

Nordeus 社はベオグラードにある本社に 22 か国から人材を集めていて、各地の文化と歴史に並外れて富んでいます。ヨーロッパで上位の職場として頻繁に取り上げられていて、いくつかの慈善団体への惜しみない寄与者としても知られています。

ソフトウェアエンジニアのトップ 2 人 Jozef Oros 氏と Srdja Stetic-Kozic 氏はベオグラード出身であり、Nordeus Central Tech チームで他の 8 人のエンジニアと一緒に働いています。このチームは Nordeus 社のすべてのゲームで使われるツールと手法の育成の責任を負っています。Srdja は「当社のゲームはすべて Unity で制作されています」と語っています。

ハッカソンで DOTS につなぐ

Jozef は「DOTS のことを聞いてすぐに Unity に連絡して、DOTS を試すこととコラボレーションできるかどうかを確認しました。当社のプレイヤーに可能な限り最高のユーザー体験を提供したいと常々考えていて、スムーズなゲームプレイはその重要な部分です。もちろん、ゲームを高速に実行できるようになるものには特に関心があります」と言います。

コラボレーションは、Unity 社と Nordeus 社の CTO によるベオグラードでのミーティングで始まりました。Nordeus 社は、新しいテクノロジーに慣れることへの支援を歓迎し、Unity 社は現実世界のアプリケーションで DOTS を限界までテストすることを望んでいました。Srdja は「当社も、Joachim Ante 氏(Unity の共同設立者)が示したような壮大ですばらしいものを創りたいと思っています。Unite Austin(2017 年)では Heroic: Magic Duel の戦闘を取り入れて、10 万ユニットの特大サイズにして、すべてを吹き飛ばすことを考えてました。そのことにものすごくワクワクしていました」と付け加えています。

Jozef と Srdja は Nordeus 社での最初の DOTS ユーザーでした。2 人は自分たちの時間の 90% をゲームプレイシステム(特に、レンダリング、ユニットの動作、そしてロジック)を記述することに費やすと見積もっていました。Jozef はUnity の DOTS を使うと、大規模に爆発する本当にすごい呪文を作成でき、分かっていたはずのエフェクトでオーディエンスの度肝を抜きます」と言います。

このチームは Unite Austin 用の Nordeus Battle Demo を 2 か月で完成しました。最初の 4 週間はプログラミングとプロトタイピングに専念し、その内の 1 週間は Unity チームと一緒にコペンハーゲンで過ごして、1 つの部屋でハッカソンスタイルで一丸となって取り組みました。Jozef は「Joe とそのチームと同席したことはすばらしい体験でした。私たちは、ECS、C# Job System、Burst コンパイラー、そしてデータ指向プログラミングの全般について膨大な量の情報をソースコードから直接学びました」と付け加えています。

オブジェクト指向プログラミングとの決別

データ指向プログラミングへの移行は意義深いシフトであり、最初は威圧的に見えるかもしれません。しかし、Stetic-Kozic 氏は「DOTS は全く別の考え方ですが、1~2 週間もすれば勘が働いて、はるかに優れたコードを記述できることが分かります。また、古いコードを統合する場合に ECS を使うとかなり簡単にできます」と言います。

DOTS の不可欠な要素は C# Job System であり、スレッドセーフなコードを記述し、競合状態(想定していない順序でスレッドが実行されると予期しない結果になる)を制御し、複数のコアでほぼ 100% の使用率が得られるようにコンテキストスイッチを最適化します。もうひとつのコンポーネントは Burst コンパイラーであり、C# のジョブを受け取ってターゲットシステムの特定の機能用に最適化された高度に効率的なマシンコードを生成する、LLVM ベースで数値演算対応のコンパイラーテクノロジーです。

Joachim Ante 氏は「Burst コンパイラーは数値演算とジオメトリを深いレベルで理解しているため、他のコンパイラーでは全く行われていない数値演算の最適化を行うことができます。C# コードを自動的にベクトル化して、特定のターゲットプラットフォーム用にベクトル化された命令を生成します。その結果、コードははるかに高速に実行されます」と言います。Burst コンパイラーでは、通常は QA で取り除く必要がある統合バグもかなりの数が解消されています。

Megacity の闘いに勝利する

Unite Austin で公開された Battle Demo では Heroic: Magic Duel のコンポーネントが使われていました。Nordeus 社のチームは、DOTS の専門知識をダイナミックなゲームプレイ要素に主に適用して、サイズが限定された地形で膨大な数のアニメーション化ユニットを使っていました。

これによって次のチャレンジへの道が開かれて、Nordeus 社は Megacity を引き受けました。これは、レンダリング、カリング、ロードが必要な 4,500 万ものオブジェクト、シミュレーションが必要な 5,000 台もの空飛ぶ自動車、さらには同時に再生する必要がある 10 万ものオーディオソースを使った巨大なオープンワールドです。さらには、そのすべてが PC だけでなくモバイルでも動作する必要があります。Jozef は「Megacity では、新しいレンダリングやアニメーション手法、UI システム、さらにはオーディオなど、すべてに Unity の DOTS が使われていました。私たちはそのすべてを、開発で使うだけでなく当社の既存のゲームで使うことができます」と語っています。

大都市をモバイルに載せるのを LWRP が支援

Unite LA 2018 での Joachim Ante による基調講演では、『Megacity』の驚くほど複雑なライブデモが行われました。 このデモでは、メッシュレンダラーが 450 万個、動き回る乗り物が 5,000 台、独自の建築物オブジェクトが 20 万個も使用されています。 これらの乗り物はスプラインベースの車線を衝突せずに飛び交います。また、10 万個もの独自のオーディオソースを使うことで、ネオンサイン、空調ファン、車などのユニークなサウンドを作り出し、豊かでリアルな音景を実現しました。 これらはすべて、スマートフォンでもスムーズに動作します。

「『Megacity』のデモで見せたかったのは、モバイルでも複雑なグラフィックスを非常に高いフレームレートで描画できるということでした。 このデモでは、PC 版に限界まで近づけるためにライトウェイトレンダーパイプライン(LWRP)を使用したほか、カスタムシェーダーを若干調整しています」と Jozef 氏は言います。 Srdja 氏は次のように付け加えました。「PC の性能を限界まで利用するゲームを開発しており、後からモバイルプラットフォームへの移植を決めたような場合には、モバイルプラットフォームの方がパフォーマンス面の制約が厳しいことから、大部分を作り変えなければならないのが普通です。 しかし『Megacity』ではその必要はありませんでした。 DOTS を使えば、ゲームプレイロジックやレンダリングを実行するためのコードをまったく変更することなく、モバイルプラットフォームにシームレスに対応させることできます」

Unity の LWRP は、ライティングとシェーディングを調整し、モバイル端末でのリアルタイムのパフォーマンスを最適化します。 リアルタイムの 1 つのシャドウライトとオブジェクトごとのライトカリング(すべてのライトがシェーディング済み)により、ドローコールを最小限に抑えながら、シングルパスのフォワードレンダリングを実行します。

ネストしたプレハブと DOTS の解説

「Megacity のデモは私たちにとって Unity の新しいネストしたプレハブシステムとの最初の出会いでもあり、当社のアーティストはとても気に入っています」と Jozef は言います。たとえば、ネストしたプレハブでは、大きい建物を多くの部屋のプレハブで構成でき、各部屋は家具のプレハブで構成できます。開発者はプレハブを複数のエンティティに分割することで効率が向上し、大小にかかわらずコンテンツを再利用し、コンテンツの別のパーツを同時に作業できます。

Nordeus 社の製品ロードマップは野心的であり、Unity と DOTS のコーディングのアプローチに 100% コミットしています。Srdja は「Unity DOTS を採用しようと考えているなら、すぐに取りかってください。そしてオブジェクト指向プログラミングの知識を忘れてください。恐れることはありません」と語っています。

「DOTS は全く別の考え方ですが、1~2 週間もすれば勘が働いて、はるかに優れたコードを記述できることが分かります。また、古いコードを統合する場合に ECS を使うとかなり簡単にできます」

Srdja Stetic-Kozic, Senior Software Engineer

「DOTS のことを聞いてすぐに Unity に連絡して、DOTS を試すこととコラボレーションできるかどうかを確認しました。当社のプレイヤーには可能な限り最高のユーザー体験を提供したいと考えていて、スムーズなゲームプレイはその重要な部分です。もちろん、ゲームを高速に実行できるようになるものには特に関心があります」

Jozef Oros, Software Engineer

弊社のウェブサイトは最善のユーザー体験をお届けするためにクッキーを使用しています。詳細については、クッキーのポリシーのページをご覧ください。

OK