なぜ最近のゲームでは、ミラーにレンダリングからテクスチャへのアプローチを使用するのですか?


40

Mario64やDukeNukem3Dなどの古いゲームを見ると、ゲーム内のすべてのミラーは基本的に壁の穴であり、ミラーの前にあるジオメトリのミラーコピーが背後に置かれています。DukeNukem3Dの場合は、ノークリップをアクティブにして、ミラーリングされた部屋に入ることもできます。

対照的に、最新のゲームでは、ミラーにレンダリングからテクスチャへのアプローチを使用しています。これにより、ミラーを近づけると、ミラーが著しくピクセル化されます。このアプローチに気付いた最初のゲームの1つはLuigi's Mansionでしたが、ほとんどすべての現代のゲームで使用されているようです。

最近、ハードウェアまたはエンジンにどのような変更が加えられ、2番目のアプローチが非常に支配的になりましたか?また、その利点は何ですか?純粋なビジュアルに関しては、ピクセル化の問題がないため、最初のアプローチが優れているようです。


14
2つの部屋の間のドアに鏡が必要な場合はどうしますか?
スーパーベスト

回答:


37
  1. RTT(render-to-texture)を使用すると、レンダリング品質(解像度、LOD、ライティングの複雑さ)を簡単にスケーリングして、調整可能なパフォーマンスを実現できます。また、RTTを使用すると、反射を正確に見ることが困難な特定の距離で、サーフェスをキューブマップに簡単に置き換えることができます。
  2. 出力はテクスチャであるため、後で何を行うことができるか(ライティング、シェーディング、ブレンド、ディストーションなど)に関するオプションがさらにあります。
  3. ジオメトリのミラーバージョンがシーンに配置されている場合、実際のジオメトリと交差して角の後ろに見える場合、より複雑なカリングが必要になります。古いゲームでは、これを避けるためにレベルが設計されていました。誰かが実際のミラーリングを行わなければならないことは言うまでもありません。
  4. ジオメトリが手動でミラーリングされていない場合は、ビューマトリックスとカリングモードを変更して(マトリックス内のスペースの反転を補正する)、ステンシルバッファーを使用してミラーを切り取り、レンダリングを行う必要があります。最新のエンジンはすべてのレンダリングステートを事前に作成することを好むため、ミラーレンダリングに必要な変更を加えて、すべてのシーンレンダリングステートのコピーを作成することには小さな問題があります。

したがって、基本的にRTTを使用すると、すべての人がより自由になります。


On 3 .:ほとんどの(古い)FPSゲームエンジンは、ビオセクションアルゴリズム(DOOMが使用する有名な「ポータルエンジン」など)を使用していました。このようなエンジンは、ミラーの外側のミラー化されたジオメトリを心配することなく、ミラーの後ろの部屋にサイトポータルとしてクワッド「ミラー」を簡単に挿入できます。
ドロヌス

@dronus何?そもそもわざわざ「鏡」を作るのはなぜですか?壁に穴を開けるだけです。
S.タリクチェティン

実際のジオメトリは鏡の壁の後ろにスペースを残さない可能性があるため、実際の鏡は動作するために後ろに部屋を置く必要はありません。
ドロヌス

29

いいえ、あなたは間違っています-それはデュークヌケム3Dのミラーの仕組みではありません。

DN3Dはポータルエンジンを使用しました。任意の2つのセクター間の結合はある程度任意であり、レンダリングエンジンがポータルに到達したとき、その中の別のセクターのレンダリングを開始する必要があることがわかりました。鏡の後ろのセクターは、基本的にエンジンの癖に対処するためのプレースホルダーでした-セクターの唯一のポイントは、「反映」する必要があるものよりも大きくすることでした。実際のジオメトリは含まれていませんでした。実際、Portalで「ポータル」が機能するのとほぼ同じように機能しました-ポータル(ポータルエンジンに基づいている)が実行時にポータルを作成し、ポータルが再帰できる回数(つまりA -> B-> A-> B-> A ...)。一方、ビルド(DN3D)は、ミラーを別のミラーに向けるとスタックがオーバーフローするため、単にクラッシュします。

そのポイントポータルを作る-それは簡単で、それはそれとミラーを実装する方法を明らかだ戻って部屋の中へ。つまり、ミラーのレンダリングには、ルーム自体のレンダリングとまったく同じコストがかかり、優れたパフォーマンスと一貫性が得られます。ミラーを別のミラーに向けていない限り、そうです。ビルドエンジンのソースコードを見ると、ミラーを処理するコードがまったくない ことがわかります-ミラーは必要ありません。ポータルがどのように機能するのかということに注意してください。ジオメトリとすべてのさまざまなスプライトとエフェクトを反転させません。ただし、編集者はこれらの「偽の」ポータルを作成できる必要がありました。非常にスマートなBuildエンジンについて詳しく知りたい場合は、Build engine internalsでFabien Sanglardによる優れた分析があります。エンジン全体はオープンソース化され、最新のプラットフォームにも移植されていますが、古いエンジンはWindows 10でも問題なく動作します(テスト済み:P)。Buildに基づいたゲームの多くは、オープンソース化および/またはリメイクされています。

なぜこれはもはや使用されないのですか?さて、一部のエンジンはポータルを好まなくなりました。多くのグラフィックスハックと最適化を適用するのは難しいです-特定のことを指摘することはできませんが、多くの後処理は、真のポータルエンジンでは機能しないハックに依存しています(もはや保持しません)。これは基本的に、これらのゲームが立体画像に関して持つ同じ種類の問題です-ハックはもはや機能しません。

最も重要なことは、ミラーがより複雑になったことです。これらの問題はすべてポータルエンジンで解決できますが、RTTはある時点でより簡単な選択になり、GPUは十分に高速になります。それを処理します。

ただし、それでも、ハードウェア3Dアクセラレーションを備えた「現実の」動作を行うゲームはたくさんあります。古いゲームの例として、Quake 3またはAlien vs. Predatorなどがあります。私の知る限り、ソースエンジンのゲームはまだ「実際の」ミラーを使用しています。人々が鏡に近づくと予想し、同時に反射面が多すぎないことを保証できる場合(レベル設計など)、ポータルミラーは依然として非常に魅力的です。


どうやらDuke Nukem 3Dがこのように機能するという一般的な信念の理由は、実際のレベルデザインでは、レンダリングエンジンが実際にミラーを必要としない場合でも、ミラーの後ろのスペースが反射する部屋と同じくらい大きいという事実です。
Random832

また、非ミラーポータルは物事をミラーリングしないため、「ミラーを処理するコードがない」ことがどのように可能かはわかりません。
Random832

5
@ Random832それは必要なものでした-ミラー化された部屋があるはずの場所にいくつかのセクターが現れた場合、いくつかの視覚的なアーティファクトがありました。これは、パフォーマンスにとってほとんど無害な仮定が重要な部分の1つです。Buildをいじったことがあるなら、2つのセクターが同じ高さで交差すると、うまくレンダリングされないことに気付いたかもしれません。ミラーリングに関しては、実際のミラーと同じように機能します。y軸でミラーが「反転」するのはなぜだろうと思ったことはありますか?これは、同じ部屋に接続するポータルを反転する必要がないのと同じ理由です。
ルアーン

ポイントは、反対方向に面している部屋に通じる通常のポータルは、物を反映するのではなく180度回転させる必要があるということです。そのため、そうしないことは、ミラーの特別な処理としてカウントされます。(そうすることができないということは、ポータルがポータルとして機能せず、ミラーにのみ適していることを意味します。この場合、システム全体がミラーの特別な処理になります)。そして、はい、ミラーが「Y軸で「フリップ」するだけ」の理由はわかっています。実際、それらはz軸上で反転します。しかし、それらが奇数の軸を反転するという事実は、それらをポータルとは区別します。
Random832

@ Random832もちろんy軸と呼ぶものに依存します:)そして、そうです、あなたは正しいです、特別な処理があります。しかし、それは非常に興味深いです-ジオメトリではなく、レンダリングされたデータを反転します(そしてスプライトとすべて...実際にはかなりの作業)。ポータルフレームが反転し、ポータルが通常どおりレンダリングされ、その後、全体が行ごとに後方にレンダリングされます。
ルアーン

3

RTTは可能であれば使用されていましたが、ハードウェアレンダリングパイプラインは一方向でした。

古いハードウェアにも、テクスチャへのレンダリングを妨げる制限がありました。RAMへの書き込みは、同時に読み取ることができないことを意味します。レンダリングのパフォーマンスを向上させるために、宛先バッファは書き込み専用にロックされ、ディスプレイハードウェアのみが読み取り可能になりました。読み取りを要求することはできましたが、それによりRAMがロックされ、レンダーは次のフレームを開始する前にロックがクリアされるのを待たなければなりませんでした。RTTはパイプラインに大きなボトルネックを引き起こすため、他のソリューションが使用されました。

ハードウェアレンダリングパイプラインは、RTTがレンダリングの負荷を軽減する方法を提供するために使用されていた標準であったことがわかります。擬似3Dコンテンツを提供するためにスプライトにレンダリングされた3D。テクスチャレンダリングは、一般消費者市場の外部にある特殊なマシンとは別に、当時使用するにはコストが高すぎました(CPU)。


1

デュークヌケムは、ミラーの後ろのジオメトリを再レンダリングすることで、他の答えが部分的に正しいことを処理します。(ゲームデータファイルに)実際にジオメトリを含まないミラーの背後にある領域があり、実行時に実際にジオメトリが再レンダリングされます。これらの領域が存在する理由は、レベルを編集するときに誤ってレベルの一部を配置しないようにするためです:

マークされた領域があるため、誤ってジオメトリを配置することはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.