イベント
[CEDEC 2008#12]Unreal Engineの生みの親Tim Sweeney氏が語る2012年から2020年にかけてのゲーム開発環境とは
Tim Sweeney氏といえば,2006年にプリンストン大学で開催されたSymposium on Principles of Programming Languages 2006(POPL 2006)で次世代のプログラミング言語に関する講演を行って話題になっていた。今回の講演も,この講演での考察とかぶる部分がかなりあるので,未見の人はスライドをダウンロードして眺めてみるのもよいだろう。
2008年現在のゲーム開発状況
Gears of War 2は,プログラマ15人,アーティスト45人,開発期間は2年で約13億円の予算で作られている。Unreal Engine 3を主体に,20種類ほどのミドルウェアが使われ,各機種用のプラットフォームライブラリが使用されている。コード量は,ゲーム本体でC++を中心に25万行程度,Unreal Engine 3部分だとC++で200万行程度になるという。最初は小さなチームで始めたものの,途中で人員がかなり増えたとのこと。
ちなみに,プリンストンの講演ではUnreal Engine 3のコード量は25万行とされていたのだが,2年半で8倍に膨れ上がっている。
それはともかく,現在の最先端レベルのゲームとしては,まだ人員も少なめなほうではないだろうか。これが,今後のゲーム開発環境ではどうなっていくか,それが問題となる
2012年から2020年にかけてのハードウェア
GPUでは,3dfxのVoodooあたりから本格的なPC用3Dチップが展開していく,ピクセルシェーダの搭載,さらに高機能なシェーダとC言語サポート,そしてLarrabeeでのCPU複合型GPUへと至る。高並列化は当然として,ベクトル演算の強化とプログラマブル化が進化の方向となっている。
要するに,CPUとGPUのアーキテクチャは収束しつつあるとSweeney氏は語る。2012年から2020年にかけて,CPUとGPUを統合したアーキテクチャが登場しうるとしている。
2012年から2020年にかけてのプログラミング事情
将来的には,コア数がたくさんになることが既定路線となっているのは周知のとおり。
それとともに,プログラマの生産性を上げることが重要だと説く。Epic GamesのCEOでもあるので経営的な視点を含むのも当然ではあるが,作らなければならないものが2倍になっても開発費は倍になったりしないから,生産性を上げていくことが必須であるとする。ゲームの世代が進むごとに,作業量は指数関数的に増大するものの,投入できる人員や予算は,せいぜい線形にしか増えていかない。
●共有ステートによる手動並列化
とはいえ,現状で多くのソフトウェアが,工夫をこらしつつマルチスレッドで作られているわけだが,Sweeney氏にとっては「難しすぎる」というのが結論のようだ。現状,そして今後のゲーム開発では数十人という規模でコードを書くことになり,全員に高度なスキルを期待することはできないという。「我々はコンピュータサイエンティストではない」という言葉には,もっと誰でも使える仕組みを求める氏の気持ちが表れている。
●タスクごとの並列化
●トランザクション処理
これは仕組みとしては十分使えるものではあるが,C++ランタイムでのサポートが必要なことや,可逆性のある処理にしか適用できないこと,利用すると30%ほどパフォーマンスが落ちるのが問題だという。最近なにかと話題の言語Haskellで採用されているほか,IntelのC++コンパイラでもサポートが始まったそうだが,Intel以外のプラットフォームでIntel Compilerが使える可能性はまずないので,一般的なCでのサポートを待つしかないようだ。とはいえ,非常に有効な方法なので,今後のマルチスレッドプログラミングでは多く使われるようになるだろうと氏は語っていた。
●メッセージパッシング
●純関数的プログラミング
以上,これらのアプローチすべてが十分でないというのが氏の結論のようだ。単にダメというわけではなく,得意分野があるので,それを生かして使うのが重要だという。
会場からの質問で,C++に代わる言語はあるかといった問いがなされたが,現状のところ,C++に代わるものはないというのが結論だ。新しい言語が主流になるには時間がかかり,現状でまだそういった動きが見えないことから,なにかが取って代わるとしてもかなり先のことになるという見通しのようだ。
氏は,C++でマルチスレッド処理を書くのは,アセンブラでプログラムを作るようなものだとしつつも,次世代ゲームの開発とはいっても,開発には時間がかかるので,現状で使えないものは選択肢にならないと語っていた。
●ベクトル化の流れ
多くの演算を一発で行うベクトル演算について,Sweeney氏は非常に効率的だと語った。とくに,GPUでのベクトル処理については,演算を一括で行うことよりも,ベクトルでメモリアクセスできる,しかも16個の違ったアドレスから一気にデータを取ってこれるということを高く評価していた。かなり以前から,CPUにもSSEのようなベクトル処理は組み込まれていたのだが,データをバラバラに取ってくることができなかった。しかし,次世代のベクトル処理では,CPUでもそういったデータアクセスが可能になること,さらにループ処理を簡単にベクトル処理に置き換え可能なことなどで,Larrabeeを絶賛していたのが印象に残った。
2012年から2020年にかけてのグラフィックス
大きなフレームバッファ
複雑なパイプライン
ほとんど固定機能
といったあたりがご不満のようだ。
シェーダは,もともとグラフィックス処理を連続的に行うことを目的として作られており,ランダムアクセスを苦手としている。汎用的なプログラムを書くには,これが障害となっているようだ。
また,GPUがプログラマブルであるのは確かだが,それをあえて「固定機能」的と呼んでいた。シェーダ自体はともかく,パイプラインがきっちり決まっているので固定機能のようなことしかできず,結果としてどのゲームを見ても同じようにしか見えないという。また,こういった固定機能だと,仮にシェーダが20倍の性能になったとしても,見た目的には2倍も綺麗になったりはしないものだと氏は語る。まあ,同じようなゲームに見えるのはゲームエンジンの責任って気はしなくもないのだが。
さらに,MSAAの品質にも不満があるようだ。実際,SSAAと比べると,アンチエイリアスされてない部分が明らかに残るので,手抜き処理ではやはり限界はあるということか。
ただ,DirectXもOpenGLもバイパスして直接描画したいといった言葉も出ており,ちょっとそれは互換性面で問題がありすぎではないかとは思われた。まあ,Epic Gamesは今後PCハードウェアへの対応に消極的な姿勢を見せているので,仕様の固定されたコンシューマ機以外は作るつもりがないという意思表明にとれないこともないか(?)。
タイリング方式は,画面の一部ずつを効率的にレンダリングしていく手法で,ハードウェア実装のものでは小容量の高速キャッシュを駆使して,小規模のハードと少量かつ低速メモリでも効率のよいレンダリングが実現できることで知られていた。以前はPowerVRなどの製品で実用化されたものの,高速メモリを大量搭載かつ力業のバス高速化など,コスト度外視のGPU進化の潮流によって表舞台からは消えていった方式である。AMDなどは携帯用GPUで利用している。
Sweeney氏のアイデアは,タイルベースの処理を超並列で行うというものだ。確かに処理単位はシンプルなので高並列も簡単そうで,最初から分割実行が前提なので,そのままスケーラブルに拡張できそうだ。タイル方式自体は分割して画面を描くので,単一方式より効率が悪くなることがあったとしても,並列度で簡単に取り戻せる。氏のアイデアは,これをソフトウェアで実装するというもののようだが,現状のハードウェアトレンドに合致するのみならず,結構簡単にできそうなので,どっちかというとハードベースでどこかに本気で取り組んでみてほしいアイデアである。
いろいろ試してみた結論として,氏は,とにかく生産性が第一だと語る。そのためには,ミドルウェアやゲームエンジンが有効だと語る。ゲームエンジンメーカーのCEOなので,そのあたりを強調するのも当然といえば当然ではあるが,Epic Games自身,ミドルウェアメーカーであると同時に,20種類以上のミドルウェアを利用するヘビーユーザーでもあるという。前述のGears of War 2のプログラマ数が15人程度というのは,あの規模のゲームとしてはかなり少ないほうではないかと思われるのだが,これも適切なミドルウェアを活用することで高い生産性を挙げているのだという。
また,真に必要なのは,とにかく簡単に使えて高速なハードウェアで,現在のシェーダやCell,GPGPUプログラミングなどは複雑すぎて採算があわないという。ハード業界にいいたいことは山ほどあるようだったが,ゲームエンジンム開発者としては,ハードウェアの潮流を見きわめて,動くことが重要だと説いた。
確かにUnreal Engine 3が発表された頃は,あまりにハイスペックな仕様に驚いたものだが(当時はXbox 360もPLAYSTATION 3も発表されてなかった),当時の「次世代機」での需要に見事にマッチし,150本以上で採用されるという成功を収めた。エンジン開発には5年くらいはかかるので,やるならいますぐ始めなさいと講演をまとめていた。
CPUとGPUの境界が曖昧になり,さらなる汎用化と高並列化を遂げようとしている。氏が,Larrabeeにご執心なのは,講演の流れを見てもだいたい察せられるところ。Unreal Engine 3の開発時には,途中でインテルがマルチコア路線の展開を打ち出したり,各プラットフォームともマルチコア路線のため,マルチスレッド対応にはとことん泣かせられていたようだが,メニーコアは大歓迎のようだ。はたしてソフトウェアレンダリングへの回帰は起こるのか? 少なくとも今後の10年間でもゲームの進化はまだまだ止まりそうにない。
- 関連タイトル:
Unreal Engine
- この記事のURL: