CRY ENGINE 2のDirect3D10対応化秘話
PCはもちろん、PS3やXbox 360向けのゲームエンジン、ゲーム開発ミドルウェアとして近年もっとも有名なのは米EPIC GAMESの「Unreal Engine 3.0」(UE3)だろう。
UE3は2004年のGDCで衝撃のデビューを果たして以来、先進のグラフィックス、統合的な開発環境とアートワーク制作環境のような明るい面や、サポートの不備や機能実装の遅れのような暗い面などなど、いろんな意味で注目を集めている。UE3はDirectX 9(正確にはDirect3D9=D3D9)のプログラマブルシェーダ仕様3.0(ShaderModel3.0:SM3.0)ベースであり、2004年当時は「3年先の実用を見越した設計」ということだったわけだが、まさにその"未来"を"今"に迎えているわけだ。
対する独CRYTEKが、「UE3に対して一世代先ゆくもの」として開発中の新ゲームエンジン、ゲーム開発ミドルウェアが「CRY ENGINE 2.0」(CE2)になる。"一世代先"というのはCE2がDirectX 10(正確にはDirect3D10=D3D10)のプログラマブルシェーダ4.0仕様(ShaderModel4.0:SM4.0)に対応する形で開発されているからに他ならない。
セッションでは、CRYTEK、CRYエンジン技術スタッフのCarsten Wenzel氏が登壇し、CE2のD3D10/SM4.0対応にあたっての開発経緯や工夫点などが語られた。
仕様が検討されたのは2005年からで、このときはWindows Vistaもプリα版状態で、D3D10自体の仕様も流動的だったという。
実際のエンジン開発作業が開始されたのは2006年の中頃からで、このときにやっとD3D10の開発者向けのD3D10対応GPUが利用できるようになったと言うが、それでもドライバの完成度があまり高くなかったとのことで、パフォーマンスアナライザをはじめとしたデバッグ関連ツールもほとんど整備されていなかったとのこと。
CE2は、現在はPCオンリーのエンジンだが、設計自体はPS3、Xbox 360などの現行ゲーム機への対応や、D3D9環境のPCへの対応までを想定したマルチプラットフォーム設計になっている。そしてレンダリングエンジンはPC(D3D9)、PC(D3D10)、PS3、Xbox 360の個別設計になっているという。ただし、API自体は共通仕様にしてあるとされ、グラフィックサブシステムの差異をエンジンが吸収することで、移植性が高い設計になっているようだ。具体的には、ステート管理、リソース管理、描画リスト処理、シェーダサブシステムなどは共通性が高くなるような実装になっているという。
D3D10はD3D9とはAPIセットがだいぶ異なっており、CE2のD3D10対応にあたっては、レンダリングエンジンをD3D10対応のために、特別に再設計をした。具体的に言えばステートオブジェクト、SM4.0、定数バッファ、厳格なAPI規定、バッファ更新仕様、ジオメトリシェーダへの対応、ストリーム出力への対応、テクスチャアレイへの対応などのD3D10新仕様への対応だ。
レンダリングエンジンの設計は元々マルチプラットフォーム設計であり、D3D10への対応は、ベースとなっている基本レンダリングエンジンの機能の一部をD3D10へ対応させる、というような実装になっている。