DOTS がモバイルゲームとその開発をスピードアップ

新しい Data-Oriented Technology Stack はどのようにして Tic Toc ゲームを大きく改善したのか

Tic Toc:Unity 開発者のケーススタディ

ゲームグラフィックスのコンポーネント数がかつてなく膨大になっていくなか、開発をスピードアップしながら、ユーザー体験を改善するにはどうすればよいのでしょうか?Tic Toc Games は、Unity の高性能な Data-Oriented Technology Stack(DOTS)と、それに含まれている Entity Component System(ECS)、C# Job System、Burst コンパイラーを使用して、バッテリー消費やモバイルデバイスの過熱を抑えつつ、60 FPS のパフォーマンスを実現しました。

  • プロジェクト

    データ指向のソフトウェアデザインアプローチを実装 ​​​​​

  • 目標

    マルチスレッドのパフォーマンスを改善し、デバイスの消費電力を削減

  • プラットフォーム

    iOS、Android、Xbox One、PS4、Steam、Nintendo Wii U e ショップ

  • チームメンバー

    約 40 名中、5 名の開発者が Unity を使用

  • 場所

    バーバンク(カリフォルニア州)

Tic Toc Games は、総合ゲーム開発会社です。いずれもベテランのアーティスト、デザイナー、プログラマー、プロダクトマネージャーたちが力を合わせてインタラクティブな製品を出荷しています。製品の中には賞を授与されたものも少なくありません。彼らの求めるのは、プレイ中はプレイヤーを熱中させ、プレイをしていないときもプレイヤーにゲームのことを考えさせ、そのおもしろさを友だちに伝えずにはいられず、何度でも繰り返しプレイしたくなるようなゲームを作ることです。Tic Toc Games では 2011 年にゲームの開発を始めた当初から Unity を使ってきました。

他のゲーム会社と同様、Tic Toc も常に、パフォーマンスを向上させると同時にデザインのイテレーションを迅速化できる方法を探してきました。Tic Toc のリードプログラマー、Garth Smith は一言、「より良いゲームをより速く作りたいのです」と言っています。Unity の長期愛用者である Smith は、Unity 2018.x の新機能のいくつかがきわめてパワフルなことに目をつけました。

Tic Toc Games では、2019 年内にマッチ 3 や落ち物パズルを含む斬新なパズルゲームをいくつかリリースする予定ですが、Smith はその開発に当たって ECS を積極的に活用することを決めました。「ECS では、コーディングの方法が従来とはまったく違っています。データ指向のプログラミングは学校で教わらないため、私たちにとっては大きなパラダイムシフトです。未知のことを始めるときには、私たちでさえ少しばかり勇気が必要です」けれども、ECS によってもたらされたものが彼らを ECS の信奉者に変えました。

成果:

  • CPU をオーバーヒートさせることなしに、モバイルで 60 FPS を実現
  • より効率的なテストのワークフロー
  • イテレーションとトラブルシューティング/バグ修正の手間を軽減
  • バッテリーの消費を減らす
Tic Toc は DOTS を採用しました

パフォーマンスと生産性の大幅な向上を目指し Tic Toc は Entity Component System(ECS)、C# Job System、Burst コンパイラなどを始めとする、Unity の新しい Data-Oriented Technology Stack(DOTS)の主要コンポーネントを実装しました。

ECS によってオブジェクトからデータへ

ECS は、オブジェクト指向のコーディングをデータ指向のアプローチへと置き換えるものです。ゲームアプリケーションの場合、処理の大部分は後者のアプローチの方がより適しています。ECS では、データと処理を切り離すことでデータの分散を大幅に減らせるだけでなく、イベントを逐次的に処理する必要がなくなるので、真のマルチスレッド処理を実現できます。

たとえば、弾丸とプレイヤーという 2 つのエンティティがあるとしましょう。それぞれに、異なる属性(位置、スポーン、体力データなど)へのリファレンスがあります。エンティティと属性は純粋なデータで、付随する機能はありません。システムは、弾丸に対してはモーションシステム、プレイヤーに対してはオブジェクト生成システムといった具合に、各エンティティに対して機能を適用します。このようにデータと機能が分離されることで、複数のコアで並列して処理できるジョブを作成できるようになります。Unity のエバンジェリズムコンテンツ担当グローバルヘッドである Mike Geig によると、「一度発想が切り替われば、あとは容易に対応できるようになる」とのことです。

ECS がもたらすメリットは非常に大きなものがあります。新しいデータ編成方法によって、最適なコードを簡単に書けるようになり、キャッチフレーズの「苦労せずにハイパフォーマンスを実現」が文字通り可能になるのです。Smith 氏は次のように語っています。「ECS のおかげで、より効果的なアルゴリズムを作るための方法がわかりました」しかも、ECS コードは再利用しやすく、アーキタイプ(一意のエンティティ)もメモリ内に厳格に収容されます。そして、おそらくはこれが最大の利点ですが、ECS では、ますます増える傾向にある CPU のコア数を有効に活用できます。現在、主流の CPU では物理コアが 4~6、論理コアは 8~12 あります。本格派ユーザー向けの CPU では、物理コアが 16、論理コアが 32 にも及びます。通常、その大半は使用されませんが、DOTS ならそのすべてを最大限に活用できます。

Mike Geig による 5 部構成の『Entity Component System(ECS)および C# Job System 入門』をご覧ください。

C# Job System を有効活用

チームのデータ指向の ECS コードを Unity の C# Job System と組み合わせることによって、Tic Toc はマルチコアの処理とマルチスレッディングの活用を拡大することができました。競合状態(予期しない順序で実行されるスレッドが予期しない結果を引き起こす)が制約を追加し、継続的なコンテキストスイッチが非効率的であることが原因となって、スレッドセーフなコードの作成を難しくします。

Job System はこのような問題をすべて管理し、Tic Toc の開発者はゲーム固有のコードに専念することができます。Smith は言います。「ジョブのおかげで私たちはシステムを複数のスレッドで実行し、CPU の異なるコアを使うことができます。以前なら非常に難しかった処理です。ECS と Job System によって他のコアをほぼ 100% 使えるようになり、効率が大幅にアップしました」

Burst コンパイラーが直接ハードウェアに語りかける

新しい Burst コンパイラーは LLVM ベースの演算認識コンパイラー技術で、C# のジョブを受け取って、ターゲットのプラットフォームの特定の機能に合わせて高度に最適化されたマシンコードを生成します。おかげで Tic Toc の Smith と彼のチームは、パフォーマンスの遅延を修復するために貴重な時間を削って、複雑な低レベルのコードを学びなおし、生成する必要がなくなりました。

「Burst コンパイラーのおかげで、自分たちが ECS を使って何をしているのかを推測することができ、それによってすべてがスピードアップしました。一部のループは約 30 倍の速さになり、特にループが同じフレーム中に何度も発生する場合はそれが際立ちました」と Smith は言います。

チームは、大きなシステムがインタラクトする場合、Burst コンパイラーが、通常なら QA の段階で取り除かなければならない膨大な数の統合バグを除去してくれることに気づきました。「Burst コンパイラーがあれば、たいした苦労なしに、複数のプラットフォームにわたって、ハンドチューニングされたアセンブラーコードの利点を生かすことができます」と Smithは言います。

DOTS についての他のスタジオへのアドバイス

Tic Toc はデータ指向のアプローチへの移行に対し当初は及び腰でしたが、実際にやってみるとそれはかなりおもしろい挑戦でした。「こつさえわかれば、ECS の扱いは徐々に簡単になっていきました。今ではスタジオのメンバー全員が理解していると思います。私たちは ECS がとても気に入り、おそらくは今後すべてのゲームで ECS を活用するつもりです」と Smith は言います。

彼は他のスタジオに対し頼もしいアドバイスを提供してくれます。「最初からすべてを ECS で行う必要はありません。徐々に活用していけば良いのであって、ほんのわずかなことで、パフォーマンスが大幅に向上します。特にコードの再利用性のすばらしさは驚くばかりです」

Smith はさらに本格的な活用を開始する前に、プロトタイプのプロジェクトで試してみることを薦めます。「ゲームジャムやテトリスや三目並べなど簡単なもので試し見てください。何でもかまいません。アートを含む全チームで制作を開始する前にゲームを 1 つ完成させるのです。最初の挑戦で多くのことを学べるはずです」

最後に Smith は、Tic Toc のプレイヤーが得る恩恵も相当なものになると語ります。「画面で何が起ころうと、ほぼ 60 FPS で動作する新しいゲームの感覚やパフォーマンスのすばらしさに目をみはるはずです。改善されたゲームプレイや反応の良さは必ず気に入ってもらえると思います」

Garth Smith, Lead Programmer, Tic Toc Games

「Unity の Entity Component System を使ったときのパフォーマンスのすばらしさは驚くばかりのものです。たとえパフォーマンスの向上にはそれほど関心がなかったとしても、コードの再利用性の良さとモバイルデバイスのバッテリーの持ちの良さは大きな利点です」

Garth Smith, Lead Programmer, Tic Toc Games

モバイルゲーム開発での ECS のメリット

ここでは ECS によりモバイルゲームの開発期間が短縮し、バグが減り、バッテリ寿命が延びる理由などを示します。

Listen to DOTS early-adopter Garth Smith share his experience with Unity’s new data-oriented approach.

Tic Toc がモバイルパズルゲームで ECS を活用した方法

Unite Los Angeles において Tic Toc は「私たちは パフォーマンスを最優先します」 と題したセッションを主催しました。講演の中で Garth Smith は、 ECS によってイテレーションが迅速化された方法を始め、 Unity の Entity Component System の活用を通じて得た経験を紹介します。 

デフォルトで高度なパフォーマンスを

最新のハイパフォーマンスなマルチスレッドシステムでマルチコアプロセッサをフルに活用しましょう。

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

OK