先週、Digital Foundryが紹介しました4A Gamesの新しいMetro 2033の背後にあるテクノロジー。目を見張るようなレベルの出血エッジレンダリング技術を備えた真新しいエンジンを備えたこのゲームは、すぐに注目を集めました。
また、4A Gamesの最高技術責任者であるOles Shishkovstovにインタビューすることもできました。新しいエンジンについての彼のコメントの多くは、先週の土曜日のデジタルファウンドリー機能に進出しましたが、このフォローアップ作品は、あなたがそれを好むことを知っているので、審問全体を示しています。
オリジナルの機能で説明されていることの詳細については、詳細があります。たとえば、エンジンの創世記のストーリーには、4Aチームが新しい技術を開発する際に作られた重要な基本的アプローチには、さらに多くのことがあります。 AIシステムとPhysxの統合もより深く説明されており、最新のPCにあるNehalem/Core i7アーキテクチャに対してXbox 360 Xenon CPUのShishkovstovの評価について読むことができます。
要するに、詳細、より多くの洞察、より多くの技術的な議論。私たちがそれを好きなように。
デジタルファウンドリーあなたは以前、独自の技術で注目されているストーカーで働いていました。それでは、4Aエンジンとストーカーでの以前の仕事との関係は正確には何ですか?
オレス・シシコフストフ
関係はありません。ストーカーのリードプログラマーおよびテクノロジーアーキテクトとして働いていたとき、多くの建築上の決定は、設計された当時は素晴らしいことであることが明らかになりましたが、現在まで拡大していません。
ストーカーエンジンの未来への主要な障害は、マルチスレッドが不可能であること、弱くエラーが発生しやすいネットワーキングモデル、そしてあらゆる種類のストリーミングを禁止するか、単に作業セットを小さくしたままにしただけのひどいリソースとメモリ管理でした。 「次世代」コンソールに十分です。
私が本当に心配しているもう一つのことは、テキストベースのスクリプトでした。ストーカーに取り組んでいるデザイナー/脚本家はますますコントロールを望んでいることが明らかになり、彼らがそれを手に入れたとき、彼らは失われ、プログラマーのように考える必要がありましたが、彼らはプログラマーではありませんでした!それはストーカーとの元の遅延に大きく貢献しました
そこで、私は将来のアーキテクチャを確立し、デザインの可能性を探求するための個人的なプロジェクトを開始しました。プロジェクトは非常にうまく進化し、ゲームとして機能するものではありませんでしたが、デモでもありませんでしたが、当時のレンダリングエンジンはありませんでした - 次に何をすべきかについての明確なビジョンを提供しました。
4Aが独立したスタジオとしてスタートしたとき、この作品は将来のエンジンの基礎になりました。タイムスケールが厳しいため、多くのミドルウェアを使用して物事を迅速に進めることを選択しました。物理学のためにPhysx、AIナビゲーションのためのPathengine、Luaはスクリプトエンジンではなく、プライマリ開発ファイル形式として、簡単なSVN合併、物理ネットワークレイヤー用のRaknet、フェイシャルアニメーション用のFaceFX、Soundフォーマット用のOgg Vorbisなどを選択しました。圧縮ライブラリなどの他の小さなもの
レンダリングは約3週間で接続されました - 延期されたシェーディングで作業するときに簡単に行うことができます - それは最適または機能が豊富ではありませんでしたが。
デジタルファウンドリー明確にするために、4AとストーカーX線エンジンの間に共有コードはまったくありませんか?
オレス・シシコフストフ
エンジンの哲学が非常に根本的に異なる場合、コードを共有することはほとんど不可能です。たとえば、C ++標準テンプレートライブラリなどの基本的なものは使用せず、Stalkerには、STLメソッドのタイプを呼び出すコードのすべての2行があります。 Stalkerのゲームプレイコードでさえ、より信号ベースのモデルを使用している間、主にアップデート/ポーリングモデルを使用していました。
したがって、最後の答えは「いいえ」です。X線でコードを共有していないため、そうすることはできません。
デジタルファウンドリーしかし、X線エンジンのストレートポートを作成したばかりの場合、PS3と360でどのように機能したのでしょうか?
オレス・シシコフストフ
それは非常に難しいでしょう。ストレートポートはなくてもメモリに収まりません全てテクスチャ、全て音と全てジオメトリ。そして、1秒あたり約1〜3フレームで動作します。しかし、テクスチャとジオメトリがなければ、それらのフレームが表示されないため、それは問題ではありません!それは私の個人的な意見ですが、GSCが別の世代のコンソールを待つのはおそらく賢明でしょう。
デジタルファウンドリー明らかに、プレイには最先端の効果とテクニックがたくさんありますメトロ2033、しかし、4Aの中核に行くと、エンジンで最も基本的なデザインの哲学は何ですか?クロスフォーマットコンソール/PCエンジンの作成に関しては、どこから始めますか?
オレス・シシコフストフ
主な焦点は、マルチスレッドモデル、メモリ、リソース管理、そして最後にネットワークです。
マルチスレッドの実装に関する最も興味深い/非伝統的なことは、Physxスレッドを除き、ゲーム内でいくつかの特定のタスクを処理するための専用スレッドがないことです。
私たちのすべてのスレッドは基本労働者です。タスクモデルを使用しますが、同期前/同期前/後の事後はありません。基本的に、すべてのタスクは、生成された時点からロックなしで並行して実行できます。タスクの依存関係はありません。それは、システムを自己バランスさせるために、フレームの最初のよりヘビー級のものから始まるタスクの木のように見えます。
サブシステム間にはいくつかの同期ポイントがあります。たとえば、Physxとゲーム間、またはゲームとレンダラーの間。しかし、それらは他のタスクによって交差することができるため、スレッドはアイドル状態ではありません。統計を最後に測定したとき、Xbox 360の30msフレームごとに約3,000のタスクをCPU集約型シーンで実行していました。
ちなみにPS3はそれほど違いはありません。 「繊維」を使用して6スレッドCPUを「エミュレート」し、各タスクがスパーズ(SPU)ジョブを生成し、別のファイバーに切り替えることができます。これは一種のPPUオフロードであり、システムに対して透明です。この美しく、やや制限がありますが、モデルの最終結果は、ハードウェアの不足制限まで完全に線形スケーリングされていることです。
メモリとリソース管理に関しては、ほとんどのコードでプレーンな古いC ++ポインターを使用していません。参照カウントの強いポインターと弱いポインターを使用します。あちこちに少しの原子動作と記憶の障壁があるため、マルチスレッドプログラミングのための非常に堅牢な基本ツールになります。
それは少し非効率的に聞こえますが、そうではありません。 PS3-PPU/360 CPUで手作りのシナリオで最大2.5倍の差を測定しました。そのすべての「非効率性」がゲーム全体で少なくとも0.1%のパフォーマンスの損失に貢献している場合、私はあなたにビールを借りています!
その後、メモリ管理が行われます。ご存知のように、それは常にカスタムメイドです - 多くの異なるプール(サブシステムを制限するか、ロックコンテンションを削減するため)、さまざまな種類のデータの多くの異なる割り当て戦略、それは退屈です。しかし、主要なメモリ消費者は最も注意を払っています。たとえば、幾何学的データは再配置でゴミ収集されますが、より重要なことは生の統計です。
配送360バージョンでは、約1GBのOGG圧縮サウンドと、ほぼ2GBのロスレス圧縮DXTテクスチャがあります。それは明らかにコンソールメモリに収まりません。私たちは、これらのリソースをDVDからストリーミングするためのルートに行きました。極端なまで、足跡や武器の音のような基本的なサウンドでさえも、何もプリロードしません。私たちはDVD-Seekの遅延を補うために多くの仕事をしたので、プレイヤーは決して気付かないはずです。それが難しい部分でした。
ネットワーキングに関しては、それは長い話ですが、Metro 2033はストーリー主導のシングルプレイヤーエクスペリエンスに焦点を当てているため、ここでは省略します。