超雑訳 Creating the Atmospheric World of Red Dead Redemption 2

Share

こんにちわ、Pocolです。
知り合いが,RDR2のスライドが素晴らしいと言っていたのですが,仕事で忙しくて見れていませんでした。
ようやく,落ち着いた環境に移動したので,Fabian Bauer, “Creating The Atmospheric World of Red Dead Redemption 2: A Complete and Integrated Solution”のスライドを読んでみようと思います。
スライドは,SIGGRAPH 2019 Advances in Real-Time Renderings in Game Courcesからダウンロードできます。
図の方は,上記のページにあるスライドを参照してください。
こちらでは,スライドノート部分のみを和訳することにします。


Slide.1
こんにちわ、そしてようこそ。RDR2でどのようにして大気圏の世界を作ったかについての話をします。今回は、様々なボリューム効果をカバーするために実装した統一的なアプローチについて、実装の詳細をお伝えするとともに、これまでの課題についてお話します。

Slide.2
レッド・デッド・リデンプション2は、天候周期、気候地域を持つダイナミックな時間変化を備えたオープンワールドのウエスタンゲームです。30fpsのフレームバジェットを維持しながら、多数のボリューメトリックエフェクトをサポートして出荷しています。

Slide.3
レッド・デッド・リデンプション2は、天候周期、気候地域を持つダイナミックな時間変化を備えたオープンワールドのウエスタンゲームです。30fpsのフレームバジェットを維持しながら、多数のボリューメトリックエフェクトをサポートして出荷しています。

Slide.4
モチベーションについては、ゲームの舞台は世紀の変わり目で、いくつかの異なる気候地域の未開発の荒野に焦点を当てています。
そのため、空が主な貢献者となる自然光に焦点を当てました。
前作では空のレンダリングはすでに不可欠な要素でしたが、続編では、このゲーム機世代のために次のレベルに持っていきたいと考えていました。

Slide.5
私たちのアーティストは、この時代のアメリカの風景画家、例えばAlbert Bierstadt、Asher Bround Durand、Fredric Edwin Churchにインスピレーションを受けています。

Slide.6
ご覧のように、これらの絵画では、ボリュームメトリックな散乱効果が重要な役割を果たしています。
大きな雲体が環境と相互作用し、照明の構成に大きく貢献しているのがわかります。

Slide.7
いくつかのボリュームエフェクトがカバーされています:雲、フォグ、ライトシャフトまたはゴッドレイです。

Slide.8
システムへと飛び込む前に、これらの効果の背後にある物理的な原理を簡単に見てみましょう:
私たちは、単一散乱モデルで目やカメラに到達する可視光に関心があります。

霧のような関与媒質からの粒子がその光路の邪魔をしていると考えると、粒子の散乱挙動を考慮しなければなりません。

光が粒子に到達すると、光は吸収されたり(熱エネルギーなどに変換されたり)、跳ね返ったりします。
光子がカメラに向かって散乱されている場合、光路の内部散乱に寄与し、そうでない場合は外部散乱され、潜在的に他の粒子やサーフェイスのライティングに寄与することができます。
これは多散乱と呼ばれるもので、これを解くのは非常に難しいので、透過率という意味での外散乱にしか興味がありません。

粒子の数が多いほど、入射光だけでなく、これらの粒子に到達した散乱光からも散乱されます。

各粒子において、可視関数\(V\)と位相関数\(P\)によって変調されたすべての光強度の総和として散乱光をモデル化することができます。
位相関数は、散乱光の方向性を確率関数として記述したものです。

透過率は、Beerの法則に従う指数関数としてモデル化することができ、体積を持つ媒質を介して与えられた経路上でどのくらいの光が透過するかを記述します。
それは消衰(媒質の吸収係数と散乱係数の両方の和)で定義されています。

Slide.9
設計目標の観点からは、1つのシステムで可能な限り多くのボリューム効果をモデル化し、さまざまなマテリアルのライティングとデータモデルを共有することが重要でした。

このシステムは、大小両方の効果をカバーし、インテリアとエクステリアの両方をシームレスにサポートし、両者の間を移行する際にライティングソリューションを切り替える必要がないことが想定されていました。

それは可能な限り物理モデルに忠実に従うことになっていて…

… ローエンドとハイエンドの両方のプラットフォームに対応した拡張性を備えています。

Slide.10
このテーマに関するこれまでの研究では、単一の大気効果に焦点を当てる傾向がありました。
初期の解析モデルから、より正確なレイマーチングの実装、そして最近ではフラスタムのボリュームアプローチに至るまで。

巧みなレイマーチングで見事に解決した雲の描画…
… そして、ルックアップテーブルによる大規模な大気のレイリー散乱とミー散乱を見ました。

Slide.11
私たちのアプローチを見てみましょう。
この話は3つのパートに分かれていて、データモデル、レンダリングアルゴリズム、そしてこれらの結果をシーンにどのように組み込みするかを見ていきます。

Slide.12
(ノート無し)

Slide.13
この章では、雲と霧の配置、空の散乱と透過率をどのように扱うかを見ていきます。

Slide.14
雲の配置は、世界を覆うトップダウンのクラウドマップを生成して対応しています。

これは、マスクとノイズのテクスチャを天気と時間帯のパラメータと組み合わせて変調し、2つのレイヤーの雲密度を含む2つのチャンネルのテクスチャを生成することで行われます。

Slide.15
(ノート無し)

Slide.16
2次元で雲をどこに配置するかはわかりましたが、複数の雲をモデル化するためには、高度に応じた形状を与える必要があります。

このためには、高さの勾配を含むルックアップテーブルをサンプリングして、積乱雲と層状雲の形状を生成する必要があります。

専用パスでは、雲のLUTアトラスから対応する天気のスライスを単一のストリップテクスチャにコピーします。これにより、天気遷移のLUTをブレンドすることができます。

Slide.17
[Schneider15]と同様に、クラウドマップとLUTによって定義されたベースとなる雲の形状から、追加ディテールが必要になります。

そのために、2D変位ベクトルマップをサンプルのxyとxzの位置で2回サンプリングし、擬似3Dベクトルを生成し、3Dノイズボリュームのルックアップをオフセットするために風速と一緒に使用します。

Slide.18
そして、実際にはこのように雲の形が見えるようになっています。

ベースとなる形状は、雲のマップとLUTサンプルにエルミート補間を適用して生成しています。

雲の詳細は、linstepや逆lerpとも呼ばれる再スケーリング関数を利用して切り取られます。
LUTのzチャンネルは、ノイズの柔らかさをコントロールします。

Slide.19
また、雲の下に雨霧を適用することもできます。
霧と雲を結びつけるために、高さに基づくフォールオフが適用されます。

Slide.20
局所的な霧は、クラウドマップと同様の働きをするフォグマップをルックアップすることで実現し、プレイ可能なエリアをカバーしています。

3つのチャンネルで構成されており、フォグ開始高さ、フォグ距離、フォグ密度を格納しています。

ノイズテクスチャ、天気、時間変化パラメータをブレンドして合成されています。
これにより、水辺の朝霧のような振る舞いが時間の経過とともに消えていきます。

Slide.21
そして、このようにして、グローバルな高さベースのフォグと、フォグマップからの局所的なフォグをブレンドしています。

Slide.22
局所的な霧のための別のシステムは、フォグボリュームを介して実装されています。

フォグボリュームは、アーティストが配置したり、パーティクルや乗り物に取り付けたりすることができます。

フォグボリュームには球状または箱状のものがあり、加算およびアルファブレンドが可能です。

Slide.23
アルファボリュームを使用して、外部からの環境フォグの効果をインテリア(建物や乗り物)に適した雰囲気のコンテキストにブレンドしています。

また、加算ボリュームを使用して、温泉や爆発などのダイナミックなイベントなど、興味のある場所にフォグを配置します。

Slide.24
データモデルと、雲の配置管理、霧の局所化、ボリュームベースの効果などをカバーしました。

Slide.25
(ノート無し)

Slide.26
この章では、散乱光の計算方法と、フラスタムボリュームとレイマーチングを使用してレンダリングするために実装した戦略を見ていきます。

最後に、パフォーマンスについても見ていきます。

Slide.27
高レベルでは、近距離用にはフラスタムを使用したボリュームを、遠距離用にはレイマーチングシステムを使用してサンプルの位置を整理しています。
しかし、ほとんどの場合、それらは同じライティングモデルとデータモデルを共有しています。

Slide.28
これらのサンプル位置に適用するシェーディングモデルは、単一散乱挙動と波長に依存しない透過率に焦点を当てたものです。

しかし、我々は[Wrenninge 13]での観測に倣って、2オクターブの直射光を適用して多重散乱を近似しています。

散乱光の関数を思い出してみましょう。それは、位相関数\(P\)と可視性関数\(V\)によって変調されたすべての関与光源の輝度和です。
我々の場合、可視性はシャドウマップを介して計算され、場合によっては透過率を蓄積する二次光線を介して計算されます。

Slide.29
私たちの位相関数は、アーティスティックな自由度とパフォーマンスを考慮して、計算上の複雑な散乱挙動を視覚的に近似するようにしました。

これはHenyey-Greenstein位相関数を中心にモデル化されており、もやのような前方散乱の重い媒体に対してはうまく機能しますが、雲に対してもっともらしい結果を出すための多重散乱や後方散乱は十分にモデル化されていません。

したがって、私たちの位相関数は、異方性\(g\)が反復するごとに減少するHG位相関数の数オクターブで構成されています。
そして、アーティストの重みづけとマテリアルの消滅係数の両方を使用してそれらをブレンドします。
この合成は各サンプル位置で行われますが、積分前に各レイ方向に対してHGオクターブを事前に計算することができます。

最終的には、リターンの減少とパフォーマンスの低下のため、2回のイタレーションに落ち着きました。

Slide.30
前方散乱についてはしっかりとした解決策がありますが、後方散乱についてはまだ改善する必要があります。

これは、マテリアルの消衰と知覚的なチューニングパラメータに基づいて、Lambertian BRDF \(1/{\pi}\)にクランプされます。

Slide.31
消衰だけでなく、異方性の高いものと低いものが混在した位相関数の可視化したものです。

Slide.32
(ノート無し)

Slide.33
視認性については、主にシャドウマップのルックアップに頼っています。

また、雲のマテリアル上では、太陽や月に向かっての消衰をサンプリングし、高周波シャドウイングを発生させています。
このサンプルの距離は気象パラメータによって制御されており、大きな雲、小さな雲、平らな雲の形状に合わせて調整することができます。

Slide.34
地形の高さマップを太陽や月の方向に沿ってレイマーチし、交点の高さとレイの長さの両方を格納することで、地形の影を得ることができます。

このとき、サンプル位置の高さを地形シャドウマップの高さと比較し、視認性を判断します。
この比較では、エッジの粗い部分を減らし、ソフトな影を近似させる差分閾値を調整するためにレイの長さを使用しています。

Slide.35
また、雲のシャドウマップには、ESMとしてエンコードされた指向性光の可視性も格納されています。

ESMの深度は、ディレクショナルライトの視点から雲景をレイマーチし、透過率の重み付けされたレイの長さを追跡することで生成されます。

その結果をぼかして数ミップに保存することで、エイリアシングやちらつき、不要なクロール効果を軽減します。

Slide.36
環境光については、パフォーマンスを節約するために二次密度ルックアップを再利用しています(そうでなければ全方向の透過率を収集しなければなりません)。

環境光は、2つの光源からサンプリングすることができます:
raymarcherは、レイリー散乱とミー散乱の項の加重平均を使用して、低解像度の放物面テクスチャにレンダリングし、並列リダクションを適用します。

このため、大規模な環境オクルージョンによって変調された空とバウンス光の両方を含む放射照度プローブフィールドのサンプリングを行っています。

Slide.37
(ノート無し)

Slide.38
ローカルライトはライトクラスターボリュームからサンプリングされ、その可視性はシャドウマップのルックアップによって計算されます(追加のトレースはありません)。

ここでは性能上の理由から、HGフェーズオクターブを1つだけ使用しています。

Slide.39
虹もインスキャッタリングの一環としてサポートしています。

アーティストが配置しているわけではありません。
代わりに、内虹と外虹の両方が視野と太陽・月の方向から導き出されます。

これらは、散乱光の総和で追加光源として扱われ、強度は水滴密度マテリアルパラメータによって駆動されます。

Slide.40
落雷はブルートフォース的に実装されています。
それぞれの雷は点光源をリストに追加し、各サンプル点について反復処理を行います。

HG位相関数と同様に指数関数的なフォールオフが単純化された可視性に適用され、局所吸収がシャドウイングを近似するために使用されます。
これは、光の領域により多くの形状と構造を与えるのに役立ちます。

Slide.41
まとめると、これがディレクショナルライトや落雷のような光源に対して、前方散乱ローブと後方散乱ローブのヴィジュアライズになります。

Slide.42
与えられたサンプル点での散乱光の蓄積方法がわかったので、それらをどのように整理するかを見てみましょう。
近距離カメラ空間については、[Wronski14] と [Hillaire15] と同様に、フラスタムボリュームアプローチ(別名 froxels)を実装しました。

奥行きのカバレッジはダイナミックで、最大160mまで可能ですが、場合によっては(インテリアのような場合)アーティストはアンダーサンプリングの問題を解決するためにそれを減らすことができます。

ディレクショナルシャドウ、マテリアル、散乱光の3つのボリュームを使って3段階でデータを収集します。

Slide.43
シャドウボリュームは16bitのfloat形式を使用し、シャドウマップカスケードからサンプリングされたディレクショナルライトのシャドウ項と、雲や地形のシャドウマップを格納します。

また、時間的にフィルタリングされ、高周波数のシャドウディテールのアンダーサンプリングを解消します。

Slide.44
マテリアルボリュームは2つのサブボリュームに分割されており、8つのマテリアルパラメータを保存することができます。

最初のボリュームには散乱係数と吸収係数が格納されています。
二つ目のボリュームには以下が含まれます:
– 位相異方性 \(g\)
– グローバルエミッシブ強度(ボリュームごとのエミッシブフォグはサポートしていませんが、グローバルなエミッシブライトの値が適用され、このパラメータでスケールされたボリュームごとに適用されます)。
– アンビエント強度(主にアンビエントオクルージョンを適用する意味としてインテリアに対して使用されます)。
– 水滴密度(虹強度をスケールするために使われます)

Slide.45
マテリアル蓄積パスでは、すべてのマテリアルソース(グローバルフォグ、雲、フォグマップ、フォグボリューム)がサンプリングされ、ブレンドされます。

ボリュームのブレンド順序は、加算から始まり、その後にアルファをブレンドすることで、非常に少なくて大きなボリュームを持つ建物の周りに環境効果を表すボリュームを配置し、アルファのボリュームを使って内部を切り取ることができます。
内部の密度の変化に対応するために(例えば、火災、爆発、または煙で満たされたサロンなど)、パーティクルフォグのボリュームを最後にブレンドしています。

もちろん、各マテリアルソースは、風でアニメーション化されたタイリングノイズのルックアップを持ちます。

Slide.46
シャドウボリュームと同様に、時間的なフィルタリングを適用しますが、これは散乱係数と吸収係数に対してのみ行われます。

風でタイリングノイズのルックアップをアニメーション化しているので、再投影モーションベクトルとして風速を使用しています。

これは、外部のボクセル位置に再投影する所でのインテリアのリーク問題を引き起こす可能性があります。
したがって、我々はまた、アルファとパーティクルボリュームの不透明性に基づいて動きがスケールされるフラスタムボリュームの速度の大きさも維持します。

Slide.47
最後に、シャドウボリュームとマテリアルボリュームの両方をサンプルする散乱光ボリュームが生成され、直接光(太陽/月とローカルライト)と環境光(我々の照度プローブグリッドをサンプリング)に対する散乱輝度を蓄積します。

その後、スライスのマーチングパスは、各スライス位置での内部散乱と透過率を積分します。
結果として得られた蓄積量は、ディファードおよびフォワードアプリケーションのために参照できるようになりました。

Slide.48
散乱光ボリューム上でにテンポラルブレンディングは適用していません。

動いているライトにゴーストが発生するだけでなく、カメラが移動すると、異方性の高い霧の中で静止しているライトに引きずったような効果が発生します(ビューベクトルに依存した散乱挙動が重い)。

その代わりに、我々はTAAと連動した蓄積量のディザ付きルックアップを利用します。

Slide.49
これでフラスタムボリュームシステムは終了しましたが、これらのボリュームの性質(すべての次元での解像度が限られている)のため、高周波数の詳細な結果は信頼性が低く、強力な時間的積分を行っても不安定性の原因となります。

そのため、これらの距離でより良い仕事をし,引き継ぎするためのシステムが必要となります:それはレイマーチングです。
これはフラスタムボリュームよりもメモリ効率の良いアプローチですが、ループは計算量が高くなりがちなので、フォグボリューム、放射照度プローブ、ローカルライトなどの特定の機能を削除しました。

Slide.50
各レイの長さは、深度バッファによって構築され、地上面や雲のドームとの解析的な交点があります。

計算コストを削減するために、[Schneider15]と同様にレイステップ長のリファインメインとを実装しました:

雲のベースの形状にぶつかるたびに、ステップの長さを半分にして、サンプルの位置をその距離分だけ戻しています。
このテストを繰り返して、(潜在的な)雲の形状が始まる位置に非常に近い位置で終わるように、反復回数 (i_max) を固定して、そこからステップサイズを小さくして積分処理を続けます。

再び雲の形状を残した後で元のステップ長に戻ります。

常に完璧とは言えず、ベースステップサイズで小さな雲の形を踏んでしまうリスクがあるので、クラウドスケープのパラメータやLUTと合わせて慎重に選ぶ必要があります。

Slide.51
レイの原点は、ブルーノイズを使用してオフセットされたフラスタムボリュームの最後のスライスの後に配置されます。

目標とする解像度はハーフスクリーン解像度で、これはデータ(および結果として得られる高周波数の詳細)には十分でしたが、サンプルあたりの作業量ではまだ高価です。
そこで、半分の解像度のピクセルごとに1つのレイをキャストする代わりに、より少ないレイをキャストして再構成スキームを実装することにしました。

Slide.52
このスキームでは、2×2の半解像度ピクセルタイルから1つのレイをキャストし、前のフレームからスキップされたレイを再投影しています。
ヒストリーバッファからサンプリングした後、3×3近傍のカラーAABBで内散乱と透過率をクランプし、古いサンプルを検証します。

深度の差が大きいサンプルを現在のピクセルにドロップすることで、深さの不一致の近傍をリファインしています。
これにより、再投影されたピクセルを十分にクランプすることができず、動きの中でゴーストが発生してしまうような過剰に大きなAABBを防ぐことができます。
利用可能な履歴がない場合(すなわち、フラスタムのエッジ)は、代わりに最も近いレイの結果を使用します。

この作業のためには、深さの不一致でレイの配置が凝縮性があることを確認する必要があります。
我々は、チェッカーボードのようなmin/maxの方法でデプスバッファをフル解像度から半分の解像度にダウンサンプリングすることから始めますが、これでは、植生や髪の毛のようにLODトランジションや確率的な透明度の破棄のような深度分散を持つデプスバッファ内のセグメントを解決するのには十分ではありません。

Slide.53
したがって、私たちの目標は、深度の状況を可能な限り正確に表す方法でレイを配置することであり、ヒストリークランピングのための信頼性の高い近隣を構築することを可能にします。

最初はレイ間の間隔を均一にしていましたが、フレーム 2 で見ることができるように、これではピクセルの近傍に完全な深度範囲をカバーするレイがないという状況に陥りやすくなってしまいます。これは、過度にアグレッシブなクランプのためにちらつきの原因となります。

Slide.54
チェッカーボードを用いたmin/maxダウンサンプリングを実装する場合、順序付きグリッドは実現したいことにフィットしません。
そこで、2回目の試みでは、他のすべての2×2レイタイルに+1オフセットを追加しただけで、このパターンになりました。

先ほどと同じ深度バッファを見てみると、深度全域をカバーするようになっています。
でも、まだかな?

Slide.55
孤立したケースでは、この例に見られるように、それはまだ動作しません。

フレーム3では、深さの高い値の一つをカバーするようにレイの位置を移動させなければなりません。

したがって、3回目の試みでは、前回と同様にチェッカーボードのオフセットから始めますが、今回は近隣のインデックスも考慮します。
レイの初期配置の深さを集め、これらの値の最小値と最大値を現在のレイの位置の最小値/最大値と比較します。
すべての隣接が高い値をサンプリングしている場合は、深さの低いインデックスを選択し、その逆も同様になります。

Slide.56
再構成により、かなり信頼性の高いフレームが得られましたが(アンダーサンプリング+クランプによりちらつきが発生することがあります)、フル解像度にアップスケールする必要があります。

これは、4つのタップとタップを平均化するか深度が一致せず深度が近いものをサンプルを選択したブルーノイズポイントセットを使用して、半分の解像度のソース画像をディザリングすることによって行われます。

このテンポラルブラーのカーネル幅は、このピクセルのレイの透過率で重みづけされた深さによって選択されます。
これは、できるだけ詳細を維持したい遠距離での望まないブラーを避けるために行われます。

内散乱・透過率蓄積量を調べる場合も同じ原理が適用されます。

Slide.57
性能は、提供されるデータ、シーンの深さ、一般的にカメラがどこを見ているかに大きく依存します。

レイマーチが最も高価なコンポーネントであることがわかります。
シェーダーループを中心に構築されているため、パフォーマンスはレイの長さと計算したサンプル数/反復数に直接相関します。このため、レイは異なる時点で終了しますが、これは段階的にウェイブフロントを解放し、すべてのレイが終了したときに利用率を下げることになります。

また、通常のゲームプレイでは方向性のある光の影が急激に変化しないため、雲のシャドウマップでは4×4タイルに1レイのみを更新し、地形のシャドウマップではテンポラルリファインメントを実装しています。

Slide.58
(ノート無し)

Slide.59
(ノート無し)

Slide.60
この章では、メインビューポートでのレンダリング技術の結果をどのように合成するか、また、環境光、指向性光、反射がどのように影響するかを見ていきます。

Slide.61
我々の空の散乱ソリューションは、[Bruneton07]のPrecomputed Atmospheric Scatteringをベースにしており、[Hillaire16]で発表されたオゾンパラメータのような類似のアイデアを実装しています。

しかし,動的な時間変化を使ったオープンワールドのレンダリングには、アースシャドウが重要な役割を果たしていると考え、アースシャドウをサポートすることにしました。

我々は、タイムスライシングを介してLUTを更新しており、空の散乱と透過率を別のフラスタム配列のボリュームにキャッシュして、ディファードとフォワードの両方のアプリケーションのためのLUTとして機能するようにしています。

Slide.62
それが正しい適用方法であったとしても性能上の理由から、各サンプル位置での空の散乱をサンプリングしていません。
近似的な方法として、レイマーチ後の透過率の重みづけられた深度で一度だけサンプリングします。

ライトシャフト・ゴッド例をサポートするために、空の散乱積分から可視性の項を分離しました。
レイマーチ内の各ディレクショナルライトの視認性ルックアップは、サンプルによってカバーされた領域とレイに沿った透過率によって蓄積され、重み付けされます。
レイが終了した後、レイの全長にわたって値を正規化し、それを用いて空の散乱項を変調します。

これは物理的には正しくありませんが、非常に少ない追加コストでもっともらしい結果が得られます。

Slide.63
(ノート無し)

Slide.64
これで、大気散乱法の最終的なイメージを作成するために必要なすべてが揃いました。

すべての不透明サーフェスをレンダリングした後、アルファサーフェスのレンダリングを開始する前に、レイマーチの結果と空の散乱と透過率と同様に、散乱・透過率内ボリュームを適用します。

また、密度のための1つの2Dテクスチャのルックアップで構成された高高度の旋回雲層を適用しますが、以前と同じ照明モデルを実装しています。

Slide.65
(ノート無し)

Slide.66
ご覧のように、メインビューポートでは雲や霧の視覚的影響が大きいので、グローバルイルミネーションにも配慮する必要があります。

そのために、3次球面調和関数としてエンコードされた32×32のプローブを維持しています。
各プローブは、高さと方向性の両方が高さとベント法線マップからサンプリングされる順序付けられたグリッドに配置されています。

その後、各プローブは、(オクルージョンと表面勾配によって制約された)レイを世界に投げ込み、散乱内と透過率を蓄積します。
その結果を、その方向のスカイドームのレイリー/ミー散乱項(低解像度のパラボロイドで表現)に適用します。

これにより、晴天時の青空エリアの照明や、曇天時の雲体からの間接照明が可能になります。

Slide.67
間接光の明るいパッチが雲の層を突破して地面に到達し、雲や山のコンタクトシャドウに注意してください。

Slide.68
この一連のプローブは、我々の高分解能放射照度プローブフィールドの基礎を提供しています。

高速化するために、メインビューポートの可視性を計算する分類パスに基づいて間接的にディスパッチを発行します。
目に見えるプローブは、目に見えないものよりも多くのレイを投射します(目に見えないプローブを無視することはできないので、反射のための有効なデータが得られます)。

Hammersley半球に配置された1スレッドに1本のレイをキャストし、共有メモリで並列削減を適用してSH係数を生成しています。
レイマーチも簡略化されているので、かなり安く済みます:
– 高周波ノイズの浸食がない
– 虹・落雷もありません
– 大きなレイステップ、リファインメントもありません

Slide.69
環境光をカバーしていますが、ディレクショナルライトへの影響を考慮する必要があります。
追加のレイはトレースせず、代わりに雲のシャドウマップに頼って視界を確保しています。

Slide.70
また、反射ソリューションのためにレイをディスパッチしなければなりません。

カメラ反射プローブについては、散乱光と透過率を含む低解像度のキューブマップを生成し、これをディファード反射ライティングパスで合成します。
レイマーチは、コストを低く抑えるために、空の放射照度プローブと同様に簡素化されています。

Slide.71
水の反射については、アルファエフェクトやボリューメトリックなしのSSRをサンプルにしています。
これは、SSRの結果には、カメラ位置から反射深度までの光線のためのこの項がすでに含まれているため、散乱内/透過率を2回適用しないことを確実にするために行われます。

その代わりに、単純化されたレイマーチングと強力なテンポラルブレンド(指数関数的平均の実行)を使用して、再び別のレイのセットをキャストしました。

Slide.72
もう一つの利点は、正しい反射角度を得ることができ、画面の端にある特徴的なスクリーンスペースの問題を回避できることです。

かなり低い解像度のおかげで、これはそれほど高価なパスではありません。

Slide.73
(ノート無し)

Slide.74
(ノート無し)

Slide.75
(ノート無し)

Slide.76
(ノート無し)

Slide.77
(ノート無し)

Slide.78
(ノート無し)

Slide.79
(ノート無し)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください