Slide 1

Slide 1 text

リアルタイムレイトレーシング + ニューラルレンダリング簡単紹介 (2025) @Shocker_0x15 @bsky.rayspace.xyz 1

Slide 2

Slide 2 text

ニューラルレンダリング(Neural Rendering)とは 2 明確な定義は無い、素直に捉えれば 「CGのレンダリングにニューラルネットワーク(NN)を使用したもの」全般 言葉の範囲は広い (厳密にはNNから少しはみ出すかもしれない) この資料では 「ゲーム等におけるリアルタイムレンダリング(特にレイトレ)との 組み合わせを想定している手法」を一部を簡単に紹介 (~2025年3月) - Neural Texture Compression - Neural Material - Neural Radiance Caching 2025年3月 GDC 2025にてニューラルレンダリング向けのシェーダー機能 「Cooperative Vector」が正式に発表される

Slide 3

Slide 3 text

モンテカルロレイトレーシングおさらい 3 例:パストレーシング with Next Event Estimation (NEE) 視点から経路をランダムに構築、各点で光源と接続

Slide 4

Slide 4 text

モンテカルロレイトレーシングおさらい 4 例:パストレーシング with Next Event Estimation (NEE) 視点から経路をランダムに構築、各点で光源と接続 EvalBRDF 出射方向と入射方向、 2つの方向を与えてBRDF値を得る SampleBRDF 出射方向だけを与えて 入射方向をサンプル、 確率密度(とBRDF値)を得る 各点で主に2つの処理

Slide 5

Slide 5 text

モンテカルロレイトレーシングおさらい 5 例:パストレーシング with Next Event Estimation (NEE) 視点から経路をランダムに構築、各点で光源と接続 EvalBRDF 出射方向と入射方向、 2つの方向を与えてBRDF値を得る SampleBRDF 出射方向だけを与えて 入射方向をサンプル、 確率密度(とBRDF値)を得る 各点で主に2つの処理 シェーディング点情報 (例: テクスチャー座標) Texture 0 Texture 1 BRDF Parameters Analytic BRDF EvalBRDF SampleBRDF BRDF値 確率密度, シェーディング点でBRDF構築

Slide 6

Slide 6 text

6 Neural Texture Compression Neural Material Neural Radiance Caching Random-Access Neural Compression of Material Textures [Vaidyanathan et al. 2023]

Slide 7

Slide 7 text

7 現代のゲームはマテリアル評価に複数のテクスチャーをサンプリングする 例: いわゆるPBRマテリアル BaseColor Occlusion, Roughness, Metallic Normal, Alpha それぞれのテクスチャーは個別にブロック圧縮、BCテクスチャー化 組になる他のテクスチャーやMIPレベル間の相関を利用しておらず非効率

Slide 8

Slide 8 text

8 事前にブロック圧縮の代わりに 潜在空間表現への圧縮とデコーダー(小さなMLP)の学習を行う Latent Texture ランタイムではシェーダー内でデコード、BRDFパラメターを得る Decoder シェーディング点情報 (例: テクスチャー座標) BRDF Parameters Analytic BRDF EvalBRDF SampleBRDF BRDF値 確率密度, Latent Texture Decoder

Slide 9

Slide 9 text

9 - BC同等のストレージならLoD2段階相当高解像度 - BC同等の品質ならサイズ1/3 - シンプルなGGX BRDF + 単一光源ライティングで2-3倍BCよりも高負荷 - 現実のユースケースだと少し目立たなくなるかも - フィルタリングは論文時点だとあまり考えられていない - デコーダー(MLP)ウェイトのダイバージェンス問題もある

Slide 10

Slide 10 text

10 Neural Texture Compression Neural Material Neural Radiance Caching Real-Time Neural Appearance Models [Zeltner et al. 2024]

Slide 11

Slide 11 text

11 映画品質のマテリアルは多層構造かつ高解像度 BRDFの評価のため各層を多段階に評価する テクスチャー読み込み量が多い、依存性のある処理が多い、計算量が多い

Slide 12

Slide 12 text

12 事前に多層構造全体のふるまい(BRDF)とImportance Sampling(のためのパラメター) を潜在空間表現へ圧縮、対応する2つのデコーダー(MLP+α)の学習を行う Analytic BRDF EvalBRDF SampleBRDF Latent Texture ランタイムではシェーダー内でLatent Textureの値と他の入力をデコーダーに通してBRDFを再現 Decoder シェーディング点情報 (例: テクスチャー座標) Neural BRDF EvalBRDF SampleBRDF BRDF値 確率密度, Latent Code Latent Texture

Slide 13

Slide 13 text

13 - リファレンスマテリアル に対して近似精度にもよるが ~10x高速化 - フィルタリング込みで 学習することで低サンプルで エイリアスの少ない結果 - メモリ消費量も削減

Slide 14

Slide 14 text

14 シェーディング点情報 (例: テクスチャー座標) Texture 0 Texture 1 BRDF Parameters Analytic BRDF EvalBRDF SampleBRDF BRDF値 確率密度, Traditional Material Neural Texture Compression Neural Material シェーディング点情報 (例: テクスチャー座標) Neural BRDF EvalBRDF SampleBRDF BRDF値 確率密度, Latent Code Latent Texture シェーディング点情報 (例: テクスチャー座標) BRDF Parameters Analytic BRDF EvalBRDF SampleBRDF BRDF値 確率密度, Latent Texture Decoder

Slide 15

Slide 15 text

15 Neural Texture Compression Neural Material Neural Radiance Caching Real-time Neural Radiance Caching for Path Tracing [Müller et al. 2021]

Slide 16

Slide 16 text

16 パストレーシングでは反射(透過)輝度をモンテカルロ推定 ? 𝐿𝑜 = 𝐿𝑒 + න 𝒮2 𝑓 𝑠 𝐿𝑖 cos 𝜃𝑖 d𝜔𝑖

Slide 17

Slide 17 text

17 パストレーシングでは反射(透過)輝度をモンテカルロ推定 ? 𝐿𝑜 = 𝐿𝑒 + න 𝒮2 𝑓𝑠 𝐿𝑖 cos 𝜃𝑖 d𝜔𝑖

Slide 18

Slide 18 text

18 パストレーシングでは反射(透過)輝度をモンテカルロ推定 たくさんレイトレースが必要(長い経路を考える場合は特に)

Slide 19

Slide 19 text

19 パストレーシングでは反射(透過)輝度をモンテカルロ推定 たくさんレイトレースが必要(長い経路を考える場合は特に) 反射輝度は多くの場合 空間的・方向的・時間的な 近傍間で相関がある よく似ている そこそこ似ている 似ていない → シーンの輝度をキャッシュするというアイディア (Radiance Caching) - キャッシュ点をどう配置する? - 各キャッシュ点で輝度をどう表現する? - キャッシュ点間の補間はどうする? - キャッシュの更新はどうする? - 動的なシーンはどう対応する?

Slide 20

Slide 20 text

20 パストレーシングでは反射(透過)輝度をモンテカルロ推定 たくさんレイトレースが必要(長い経路を考える場合は特に) 反射輝度は多くの場合 空間的・方向的・時間的な 近傍間で相関がある よく似ている そこそこ似ている 似ていない → シーンの輝度をキャッシュするというアイディア (Radiance Caching) Neural Radiance Cache

Slide 21

Slide 21 text

21 位置 (3次元) 出射方向 (2次元) 法線 (2次元) Roughness (1次元) Diffuse Reflectance (3次元) Specular Reflectance (3次元) Neural Radiance Cache (NRC) 位置や方向はInput Encodingで 加工されて小型のMLPに入力 反射(透過)輝度 (3次元) - プライマリーヒットではNRCは使わない - 拡散反射マテリアルの後など 精度が必要ないと判断され次第NRCに頼って パスの延長を打ち切る - 一部のパス(数%)はパス延長を続けて NRC学習用の訓練データを作る 最終的にはNRCで打ち切る - さらにごく一部のパスはNRCを一切使わないで 訓練データ作成 (Truly unbiased) - 1フレームの中で訓練データの生成と学習を行う “Generalization via Adaptation”

Slide 22

Slide 22 text

22 - NRCを使わない場合に比べて分散低減 - パスを早期に打ち切る効果によりフレーム時間が減ることさえもある - 特定のマテリアルに過度に依存しない入力 - ボリュームレンダリングにも適用可能

Slide 23

Slide 23 text

Cooperative Vector API 23 多くのNN支援ハードウェア(Tensor Coreなど)では Wave内の複数のスレッドが協調的に(Cooperatively) 行列積の計算、入出力行列の読み書きを行う 𝑚11 ⋯ 𝑚1𝑀 ⋮ ⋱ ⋮ 𝑚𝑁1 ⋯ 𝑚𝑁𝑀 𝑥1 ⋮ 𝑥𝑀 各スレッドが行列×ベクター を計算したい 𝑚11 ⋯ 𝑚1𝑀 ⋮ ⋱ ⋮ 𝑚𝑁1 ⋯ 𝑚𝑁𝑀 𝑥11 ⋯ 𝑥1𝑇 ⋮ ⋱ ⋮ 𝑥𝑀1 ⋯ 𝑥𝑀𝑇 Wave全体で協調的に計算する - 行列はスレッド間で共通 - 例: Neural Materialではマテリアルごとに異なる行列 - ハードウェアが直接サポートする行列サイズは固定 - ニューラルレンダリングでは部分的にアクティブなWaveや ダイバージェントなコードパスからの呼び出しが想定される - 例: Pixel Shaderでは全スレッドがアクティブとは限らない これらの問題を回避しつつシェーダーを記述するのは面倒 Cooperative Vector APIが良い感じに隠蔽、支援ハードウェアを活用してくれる