【CEDEC2017】Cygamesが開発中のゲームエンジン「Cyllista Game Engine」を紹介…ゲーム開発者が最高のパフォーマンスを出せるエンジンに



8月30日から9月1日にかけて、パシフィコ横浜で開催された「CEDEC2017」。本稿では、8月30日に行われた講演「Cygamesにおける次世代ハイエンドコンソール向けゲームエンジンの開発 ~最高のコンテンツを支えるゲームエンジン~」の内容をお届けする。

本講演に登壇したのは、Cygamesの内製ゲームエンジン「Cyllista Game Engine」統括マネージャーである多胡順司氏が登壇。次世代ハイエンドコンソール向けゲームエンジンにおける開発環境の整備、テスト駆動開発の実例を紹介した。

 
 
■「Cyllista Game Engine」最大の目標はイテレーションの高速化

「Cyllista Game Engine」とは、Cygamesが開発している次世代ハイエンドコンソール向けのゲームエンジンだ。現在のところWindowsとPS4に対応しているこのエンジンについて多胡氏は「最高のゲームエンジンにする」と目標を掲げる。

「最高のゲームエンジン」には2つの意味があり、ひとつはハードウェアが最高のパフォーマンスを出せること、そしてもうひとつはゲーム開発者が最高のパフォーマンスを出せることだ。特にゲーム開発者にとって良い環境であることを強く意識しており、イテレーション、つまり開発サイクルを速く回せることが最終的な目標であると語る。
 
  

イテレーション高速化のために打てる施策はさまざまだが、今回多胡氏が取り上げたのはテスト駆動開発(TDD)だ。一般的なTDDといえば、テストコードを書く、テストが失敗するように実装する、テストが通る最小限の実装を記述する、の工程をひたすら繰り返すことだ。これによりコードが安定、さらには安心感を与えられるメリットがある。その一方で導入するのが面倒というデメリットも。

そこで「Cyllista Game Engine」では、「テスト駆動開発以外の開発方法を提供しない」という驚きの手法を取り入れている。そのぶんエンジン開発ツールを導入することで、TDDの手間を省いている。それもコマンドプロトコルに「cybuild」と打つだけという非常にシンプルな仕様だ。

コマンドにはほかにも、ソースコード・ツール・アセットを更新する「cybuild update」、モジュールをテストする「cybuild test<module>」などがある。この「cybuild」にはモジュールのテストやドキュメント生成、エディタ起動、中間ファイルの削除、ファイルの変更状態の表示といった機能も備わっているのだ。
 
 

続いてプログラミング言語だが、C++とPythonの2種類に統一されている。Pythonの利点としては、モジュールの充実、ツールの配布が簡単、コードの共有化が容易といった点が挙げられた。またC++、Pythonともにソースコードの自動整形にも対応している。コードの自動整形の利点はなんといっても読むときにも、書くときにもコードの中身に集中できることだ。

ユーザーコードに関してはC++が利用されているが、詳細な最適化が可能である代わりにコンパイルや読み込みの観点からイテレーションが遅いという欠点も抱えている。そこで「Runtime Compiled C++(RCC)」を実装した。これにより、ゲームの実行中にコードを更新できる。つまりゲーム内の変化をリアルタイムで感じることができるようになったのだ。RCCには利点と欠点の両方が存在するが、天秤にかけた結果、イテレーションが大きいと考え採用に至ったという。
 
 

エンジニアのイテレーション速度に直結する要素といえば、ビルド時間も欠かせない。多胡氏によると、有効行数40万行のフルビルドだと30秒、アプリケーション側のコード修正は5秒、実行時コンパイルは2秒で行うとのこと。ビルド時間短縮のため不要なヘッダはインクルードせず、templateの利用は最小限にとどめている。CIは常に監視し、変わったコードを見つけることも重要だという。加えて多胡氏はビルド時間短縮のため、「速いCPUを持ったPCを用意してください」と聴衆者に話し、笑いを誘う場面もあった。

最後にゲームコンテンツ開発者向けの要素として、アセットシステムに関する話題にも触れた。ゲーム開発者であれば「任意のバージョンのアセットを高速に取得したい」という思いを抱くはずだ。しかしアセットのバージョン管理にはファイルサイズの大きさ、膨大なファイル数といった問題をクリアしなければならない。一部のアセットのみが必要で、ファイル読み込みリクエストがあったときにはじめてファイルを用意するケースも多いだろう。

そのためメタファイルを用意して、アセットの関係性の情報を保持。単一ディレクトリ以下にまとめる方法を取っている。中間ファイルとメタファイルのみバージョン管理を行い、実機用ファイルとアーカイブファイルが中間ファイルから生成する仕組みだ。メタファイルの導入によって任意のバージョンを高速に取得できるようになり、ローカル/サーバーキャッシュを用意することで目的のファイルも高速取得が可能になった。
 
 

そのほか、DCCツールから実機へのプレビューの高速化、中間ファイルにはプレビュー専用のモードを用意するなどの工夫も取り込まれている。多胡氏は今後もこれにとどまらず、ゲーム開発者が最高のパフォーマンスを発揮できることを徹底的に追求していくことをアピールし、講演は幕を閉じた。

 
(取材 ユマ)