概要
フロム・ソフトウェアでは、PlayStation 3, Xbox360, Windowsなどを対象にゲーム開発を行っています。この記事では、どのようにIncrediBuildおよびXGEを使用してゲーム開発現場におけるビルドを高速化したかを紹介します。
近年のゲームはソースコードの量も膨大でビルドには多大な時間がかかります。これを高速化するのが我々の第一のチャレンジでした。IncrediBuildを使用することで、我々は最終的に2〜10倍の高速化を達成することができました。
また、同じゲームで同時に複数のゲーム機(プラットフォーム)を対象として開発を行うことが多く、効率的な作業のためには対象プラットフォームによらない統一した作業環境を用意するのが重要なポイントになります。フロム・ソフトウェアではこのような統一した作業環境を以前から用意していたので、これを維持したまま高速化を行うというのが第二のチャレンジでした。Playstation 3の開発環境の特殊さが障害となっていましたが、我々は、XGEの利用法を工夫することでこれを乗り越えることができました。
目次
チャレンジ
フロム・ソフトウェアは、 PlayStation3 や Xbox360 といった複数のプラットフォームを対象にゲームの開発をしています。
これらのプラットフォームを対象にしたプロジェクトはほとんどのプログラムがC++で書かれており、ゲーム本体のソースコードと内製のライブラリやフレームワークを合わせると、ひとつのプロジェクトのソースコード量が200万行を超えるほどの大きなものとなります。
このような大きなプロジェクトでは、最近のPCを持ってしても、一回のビルドに数十分〜数時間を必要とします。開発効率を上げるためには、この時間を数十秒〜数分の単位まで圧縮したいと考えました。
ただし、ビルド自体の高速化以外にも考えなければならないことがあります。同一のゲームを同時に複数のプラットフォームに向けて開発することが多いため、プラットフォームによって開発環境が異なるといった形になってしまっては効率性が著しく低下します。我々は既にこの問題を解決し統一した開発環境を用意していましたが、高速化後にもこの環境が維持されていなければ結果として生産性が低下することになりかねません。
代替案
結果としてはビルド自体が高速化できればいいので、いくつかの代替案を考えました。
- プログラムの構成を見直す
C++プログラムのビルドは、ソースコード間の依存関係の複雑さに応じて時間がかかるようになります。そのため、最低限必要なだけの依存関係を入念に設定することでビルド時間を減らす、という選択肢がありました。
しかし、日々更新される膨大な量のソースコードに対してこれを行うには多大なコストを要する上、ゲーム開発において極めて重要な最適化処理にも枷を嵌めることになってしまいます。そのため、我々はこの選択肢を早期に除外しました。
- PCの性能を強化する
もちろんビルド時間はPCの性能に大きく影響されるため、PCの性能を強化する(買い換える)という選択肢もありました。
しかし、当時はPentium 4 のシステムが主流で、Coreシリーズはまだ登場する前でした。より高速なCPUは存在しましたが、我々はこの選択肢は費用対効果の面では優れていないとして除外しました。ただし、メモリの増強は比較的安価に実行できたため、こちらは実施してある程度の効果を得ました。また、実験的にRAMディスクの導入も行い、こちらもある程度の効果が確認できましたが、費用対効果の面から大規模な導入は見送りました。
いずれにせよ、仮に費用対効果の面で除外した方策を全て採用したとしてもPCの性能の強化だけでは充分な高速化が得られず、また将来的にプロジェクトが更に大規模化した際のことを考えれば根本的な解決にならないことも明らかでした。
ソリューション
IncrediBuild と Windows/Xbox360
実際の開発作業の中で、PCの性能が100%使用されている時間というのは長くありません。分散化によって未使用のリソースを最大限に活用するというのは自然な選択肢でした。
当時我々は、Windows, Xbox360をターゲットとした開発を主に進めており、一方でPlayStation 3 についてはまだ着手したばかりという段階でした。そうした事情から、まずはWindows, Xbox360を対象にIncrediBuildを導入し、分散ビルドを開始しました。
これは大成功で、両プラットフォームでの大幅なビルド時間の短縮に繋がりました。
XGE と Playstation 3
しかし、Playstation 3のビルド時間は深刻な問題でした。分散ビルドによる恩恵を受けられないだけでなく、元々のビルド時間が他のプラットフォームよりも明確に大きいことが明らかになっていました。
当時はまだXGEが公開されていなかったため、PlayStation 3 については、当初は別の分散化技術を用いて対応を行いました。これによって、開発は何とか進められるという状態になっていました。
しかし、複数の分散ビルドシステムを同一のPC上で動かすとリソースの奪い合いが発生し、効率が悪いのは明らかです。また、複数プラットフォームでの開発を行っている以上、社内のPCを2グループに分けてそれぞれ一方の分散ビルドシステムだけを入れる、という運用は現実的ではありません。更に、どちらのシステムも有料であったため、その点でも余計なコストであったのは言うまでもありません。
そこでXoreaxに掛け合ったところ、XGEのアルファ版をいただくことができました。XGEを使ってPlaystation 3のビルドを行うことができれば、Incredibuild+XGEで社内の開発体制を一本化することができる、というわけです。
ただし、全てのプラットフォームで同じようにVisual Studioからのビルドを行うことができ、特別な操作を行わなくとも自動的に分散ビルドが行われる、という環境は開発効率の面から考えても絶対に維持する必要がありました。XGEはVisualStudio のビルドエージェントに比べてより汎用的なインターフェイスを提供するものの、これをそのまま使おうとすると他のプラットフォームと共通の開発環境が崩れてしまいます。
Visual StudioでPlaystation 3プロジェクトのビルドを行う場合、開発環境の一部として提供されているアドインがMakefileを作成し、これに基づいてPlaystation 3用のコンパイラやリンカが動作する、という形式になっています。我々は、アドインが作成したMakefileが実際に使用される前に、ビルドイベントを利用してこれを差し替えるような機構を用意し、差し替えられたMakefileがXGE Interception Interfaceを通して本来のMakefileを実行するようにしました。これにより、表面的には今までと全く変わらない開発環境で、Playstation 3でもIncredibuildによる分散ビルド(コンパイル)が実行されるようになりました。
この手法は、その後2年以上継続して運用されており、現在我々のPlayStation3開発のスタンダードな環境になっています。
また、XGE がカスタマイズしやすいツールであることから、我々は分散ビルドを他の領域にも広げました。
- 計算が膨大になることが分かっているリソースデータの作成
- シェーダのコンパイル(速度を考慮してバリエーションを大量に用意する必要があるため)
- PlayStation 3 での分散リンク
利点
下図は、我々が開発していた3つのゲームのビルド時間を計ったものです。特にPlaystation 3において劇的にビルド時間が改善しており、開発効率の向上に大きな成果をもたらしました。なお、ここに挙げた3つのゲームタイトルはそれぞれ別個のものであり、プラットフォーム間でのビルド時間の比較には意味がありません。

デモンズソウルは株式会社ソニー・コンピュータエンタテインメントより発売されたゲームタイトルです。
結論
我々は、Xbox360やPlaystation 3の発売前の困難な時期にIncrediBuildを導入することで大幅な開発効率の向上を達成し、無事に製品を出荷することができました。Visual Studioに対する親和性とXGEの柔軟性により、表面上は開発環境を変えることなくスムーズに導入を行うことができたため、移行期にも製作チームに全く負担をかけることがありませんでした。
現在ではIncrediBuildは我々のゲーム開発ではもはや欠かせないものとなっており、全ての開発チームに対して導入されています。
フロム・ソフトウエアについて
フロム・ソフトウェアは東京に位置するゲーム開発会社で、10年以上のビデオゲーム開発の経験を有し、家庭用ゲーム機やPC向けのゲームの開発およびパブリッシングを行っています。フロム・ソフトウェア開発ゲームタイトルには、キングスフィールドシリーズ、アーマードコアシリーズ、クロムハウンズ、デモンズソウル、O・TO・GI、Another Century's Episodeシリーズなどがあります。
著者について
2005年慶應義塾大学理工学研究科博士課程修了。同年、株式会社フロム・ソフトウェア入社。以来、開発環境の整備およびマルチプラットフォーム向け社内ライブラリの開発に従事し、現在に至る。
|