リアルタイム グローバル イルミネーション (リアルタイム GI) は、常にコンピューター グラフィックスの聖杯でした。
長年にわたって、業界もこの問題を解決するためにさまざまな方法を提案してきました。
一般的に使用されるメソッド パッケージは、静的ジオメトリ、大まかなシーン表現または大まかなプローブの追跡、および 2 つの間の照明の補間などの特定の仮定を利用して、問題領域を制約します。
#Unreal Engine では、グローバル イルミネーションおよび反射システム Lumen テクノロジーが Krzysztof Narkowicz と Daniel Wright によって設立されました。
目標は、以前のものとは異なるソリューションを構築し、統一された照明と焼き付けのような照明品質を実現できるようにすることでした。
最近、SIGGRAPH 2022 で、Krzysztof Narkowicz とそのチームは、Lumen テクノロジー構築の道のりについて語りました。
現在のハードウェア レイ トレーシングには、強力な GPU コンピューティング能力のサポートが不足しています。ハードウェア レイ トレーシングがどれほど高速になるか、あるいは新世代のコンソールがハードウェア レイ トレーシングをサポートするかどうかさえわかりません。
したがって、ソフトウェア レイ トレーシング手法が使用されます。これは、多くのオーバーラップするインスタンスを含むシーンをスケーリングしたりサポートしたりするのに非常に便利なツールであることがわかりました。
ソフトウェア レイ トレーシングでは、三角形、ディスタンス フィールド、サーフェル、ハイト フィールドなどのさまざまなトラッキング構造を使用できます。
ここで、クシシュトフ・ナルコヴィッチは三角形の研究を放棄し、サーフェルを簡単に研究していますが、表現するためにかなりの密度を必要とするジオメトリの場合、サーフェルの更新または追跡はかなりのコストがかかります。
最初の調査の後、ハードウェアにうまくマッピングされ、サーフェス表現と単純な連続 LOD を提供する高さフィールドが最も適していました。
min-max quadtree などのすべての POM アルゴリズムを使用できるため、追跡速度が非常に高速です。
さらに、複数の高さフィールドは、境界ボリューム階層のラスタライズと同様に、複雑なジオメトリを表すことができます。
これをサーフェルの加速構造として考えると非常に興味深いです。単一のテクセルは、規則的なグリッドによって制限されたサーフェルです。
高さフィールドに加えて、Lumen にはアルベドや照明などの他のプロパティがあるため、毎回照明を計算できます。
Lumen では、開発者は、キャプチャ位置であるサーフェス データを含むこの完全なデカール投影を Cards と名付けました。
#ラスタライズされた三角形
レイマーチされたカード (高さフィールド)
レイマーチされたカードは、シーン内の各カードに対して遅すぎます。したがって、カード加速構造が必要であり、開発者は 4 ノード BVH を選択しました。これは、CPU 上のすべてのフレームを使用して完全なシーン用に構築され、GPU にアップロードされます。
次に、トレース シェーダーでスタック ベースのトラバーサルを実行し、最も近いノードが最初にトラバースされるようにノードを動的に順序付けします。
BVH デバッグ ビュー
ここで最も注意が必要な部分は、全体が高さになるように高さフィールドを配置する方法です。ネットはキャプチャされたグリッドです。 Krzysztof Narkowicz 氏は、「アイデアの 1 つは、GPU のグローバル ディスタンス フィールドに基づいています。フレームごとに、小さな一次光線のセットをトレースして、カードでカバーされていない光線を見つけます。
次に、未発見の光線ごとに、表面の勾配を使用してグローバル ディスタンス フィールドを横断し、最適なカードの向きと範囲を決定し、新しいカードを作成します。
グローバル ディスタンス フィールドの位置のキャプチャ
一方で、マージされたシーン全体のカードを生成できることを確認しますカードを生成するためにグリッドを作成する必要はありませんが、その一方で、カメラが移動するたびに異なる結果が生成されるため、実際には非常に注意が必要であることがわかります。各メッシュ カードをメッシュ インポート ステップとして配置します。これを行うには、各ノードが N 枚のカードに変換される幾何学的な BVH を構築します。
次のように:
ラスタライズされた三角形
レイ ステップ カード (ハイ フィールド)
##カード位置ビュー
このメソッドが発生しましたBVH ノードがカードを配置するための適切なプロキシではなかったため、適切な場所を見つける際に問題が発生しました。
そこで、研究者らは別のアイデアを提案しました: UV アンラッピング技術に従い、クラスター化を試みましたNanite が提供する何百万ものポリゴンを扱っていたため、三角形をサーフェス要素に置き換えました。
同時にその後、表面をよりよく一致させるために、制約の少ない無料のガイド カードに切り替えました。
自由にガイドされるカードの位置
この方法を試してみると、単純な形状では非常にうまく機能しますが、より多くの形状に収束する前に、複雑な形状で問題が発生しました。
最後に、Narkowicz は軸に沿ったカードに戻りましたが、今回はビン クラスターとメッシュごとに生成されました。コーン トラッキング
高さフィールドを追跡する独自のプロパティコーン トラッキングも実現できます。
コーン トラッキングは、ノイズを低減するのに役立ちます。事前にフィルタリングされた単一のコーン トレースが数千の個別の光線を表すため、非常に効率的です。
#レイ トレーシング
コーン トラッキング
開発者は、カードごとに、表面の高さ、照明、マテリアルのプロパティを含む完全な事前フィルタリングされたミップマップ チェーンも保存します。
トレースするときは、コーン フットプリントに基づいて適切なステッピング レイを選択し、それに対してレイ トレーシングを実行します。
#ジャムのないエッジとジャムのあるエッジの追跡
マージ シーン表現ソフトウェアで大量のインコヒーレント光線をトレースすると、非常に時間がかかります。理想的には、複数の高さフィールドの代わりに単一のグローバル構造が使用されます。
コーンのフットプリントがますます大きくなると、シーンの正確な表現は実際には必要なくなり、高速化のためにより近似的な表現に置き換えることができます。
#各光線をトレースするための数十枚のカードを備えたより複雑なシーン
##最初に成功した方法は、純粋なボクセル コーン トレーシングを実装することでした。これは、古典的な「ボクセル コーン トレーシングを使用したインタラクティブ間接照明」の記事のように、実行時にシーン全体がボクセル化されます。
#ラスタライズされた三角形
レイ ステップ カード (高さフィールド)
##ボクセル コーン トラッキング
レイ ステッピング カードはボクセル コーン トラッキングを続行します
そしてこれがこの方法の主な欠点は漏れです。シーン ジオメトリの過剰な融合が原因で、これは粗い低マッピングを追跡する場合に特に顕著です。
画像漏れを減らす最初の手法は、グローバル距離フィールドを追跡し、表面に近いボクセルのみをサンプリングすることです。サンプリング プロセス中、サンプリング範囲が拡大するにつれて不透明度が蓄積され、追跡が停止されると不透明度は 1 に達します。これにより、常にジオメトリ付近で正確なサンプリングが実行され、グラフィックスの漏れが軽減されます。
2 番目の手法は、メッシュの内部をボクセル化することです。これにより、厚い壁での漏れが大幅に減少しますが、過剰な閉塞が発生する可能性もあります。
他の実験には、まばらなボクセル BLOB と顔の透明度チャネルごとのボクセルの追跡が含まれます。両方の実験の目的は、光線方向のボクセル補間問題を解決することです。つまり、軸が整列した固体の壁は、壁に垂直でない光線に対して透明になります。
ボクセル ビット ブリックは、8x8x8 ブリック内のボクセルごとに 1 ビットを保存し、特定のボクセルが空かどうかを示します。次に、2 段階の DDA アルゴリズムがレイ ステッピングに使用されます。透明なサーフェスを持つボクセルは似ていますが、DDA が同じで、光線方向に沿って透明度が増加します。どちらの方法も距離ドメインほどジオメトリを表現するのが得意ではなく、非常に遅いことがわかりました。
透明性のあるボクセル
マージされた表現を追跡する最も初期の方法は、グローバル距離フィールドとグローバルシーンごとのカードを使用することでした。シェーディング ヒットによりコーン トラッキングが実行されます。つまり、BVH を反復処理し、シーン内のどのカードがサンプリング ポイントに影響を与えるかを特定し、テーパ フットプリントに基づいて各カードの適度なスライド レベルをサンプリングします。
#この記事では、この方法を放棄しました。これは、この方法を遠方界の軌道を表すためだけに使用するとは考えられておらず、次のようにみなされたためです。ハイフィールドライトステッピングの直接の代替品。やや皮肉なことに、この放棄されたアプローチは、2 年後に最終的に到達した解決策に最も近かったのです。
最初のデモこの時点で、すでにかなり良い結果が得られています:
それにもかかわらず、多くのグラフィックス リークの問題が発生し、この単純なシーンでは、ハイエンド PC GPU であってもパフォーマンスが理想的とは言えませんでした。
リーク問題を解決してより多くのインスタンスを処理するために、PS5 では処理が 8 ミリ秒未満で完了します。このデモは本当にきっかけとなりました。
以前のソリューションと比較した場合、最初で最大の変更点は、高さフィールド トラッキングが距離フィールド トラッキングに置き換えられたことです。
ヘルス ポイントをマスクするには、カードからヘルス ポイントのレイを挿入します。距離フィールドには頂点プロパティがないため、この方法では、覆われていない領域はエネルギーの損失のみを引き起こします。漏れではありません。
同じ理由で、ボクセル コーン トレーシングをグローバル ディスタンス フィールド レイ トレーシングに変更します。
同時に、キャッシュ ソリューションを通じて、さまざまな最適化と Lumen のさまざまな部分の時間分割も行いました。コーン トラッキングを使用しない場合は、より積極的にノイズを除去してトラッキングをキャッシュする必要があることに注意してください。ただし、これも長くて複雑な話です。
これは、最初のデモを送信した後の最終結果であり、グローバル ディスタンス フィールドなどのすべての共有データ構造の更新を含め、PS5 では一貫して 8 ミリ秒未満でした。現在のパフォーマンスはさらに向上しており、たとえば最新のデモの完了時間は 4 ミリ秒近くになり、品質も大幅に向上しました。
終了つまり、この記事は Lumen 全体を完全に書き直したものであり、まだ記載されていないさまざまなアイデアが多数あります。実装されました。一方で、再利用されるものもある。当初と同様に、追跡表現としてカードを使用しましたが、現在はメッシュの表面にさまざまな計算をキャッシュする方法として使用されています。ソフトウェア トラッキングと同様に、これは主にコーン トラッキングを中心とした主要なトラッキング方法として始まりましたが、最終的にはスケールダウンして、多くのオーバーラップするインスタンスを含む複雑で重いシーンをサポートする方法になりました。
以上が超リアルな描写!アンリアル エンジン テクノロジーの専門家がグローバル イルミネーション システム Lumen について説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。