近年のリアルタイムレイトレーシングの動向とその活用について
うでメガネ(LT枠)(学生)
色々な資料を色々なとこから拝借しています(出典は極力明記しています)、ごめんなさい...
内容に誤りを発見した有識者のみなさんは何らかの手段で指摘してください。
大作ゲームでレイトレが流行っていますね
みなさんも1度は聞いた単語なのではないでしょうか。
↓Bingに聞いてみた結果
事の発端: RTX Series GPUの登場(2018年)
レイトレのためのハードウェア実装
ラスタライズ/レイトレの併用パイプラインの構築が容易になる
出典/参考: RTX on—The NVIDIA Turing GPU : https://ieeexplore.ieee.org/document/8981896 : https://www.nvidia.com/ja-jp/geforce/turing/
RTX GPUでは何が出来るか
ハードウェア上でポリゴンと線分の交差判定が取れる
レイの評価結果をシェーダーで扱える
例)
・マテリアル評価
出典/参考: RTX on—The NVIDIA Turing GPU : https://ieeexplore.ieee.org/document/8981896 : https://www.nvidia.com/ja-jp/geforce/turing/
ソフトウェアレベルでのレイトレ近似手法
ハードウェアレイトレが無い時代でも人々はリアルタイムレイトレを試みた
どれも一長一短であり、今でも使われている
例)
・Screen Space Reflection
・Voxel Cone Tracing
・SDF Raytracing
なぜレイトレ(交差判定)が重要か?
幾何光学の要だから
写実的な絵を得るには、光線の振る舞いを再現すれば良いという考え
レイトレーシング (whitted raytracing 1980年)
視点からレイをトレースして、なにかにぶつかったら光源に向けてまたトレースする
鏡面や透過屈折の場合は適切な方向に反射・屈折
-> 直接照明(Direct Illumination)が計算できる!
->でも間接照明(Indirect Illumination)が無い...
出典/参考An improved illumination model for shaded display: https://dl.acm.org/doi/10.1145/358876.358882�https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-overview/light-transport-ray-tracing-whitted.html
パストレーシング (1986年)
ある点で、全ての入ってくる光の評価値を積分すれば、出ていく光がわかる (発光する場合はそれも含む)
パストレーシングで、大域照明(Global Illumination)が計算できる!!
出典/参考 The rendering equation: https://www.cs.cmu.edu/afs/cs/academic/class/15462-s13/www/lec_slides/86kajiyaRenderingEquation.pdf
パストレーシングの収束と分散
積分を、離散値の有限回の操作で得られる確率的な推定値とする
->たくさんレイを撃つほど精度が上がる
->1ピクセルあたりのレイの本数をサンプル数と呼んだりする
-> 分散はサンプル数Nに反比例する。
->つまり、標準偏差(ノイズ)は√Nに比例して減少する
->ノイズのないまともな画像を得るには、サンプル数100とか1000とか必要
パストレーシングの収束と分散
積分を、離散的な有限の操作に置き換えて確率的な推定値とする
->たくさんレイを打つほど精度が上がる
->1ピクセルあたりのレイの本数をサンプル数と呼んだりする
-> 分散(ノイズ)は、サンプル数Nに対し、√Nに比例して減少する
サンプル数=1
サンプル数=10
サンプル数=1024
現状のハードウェア性能
HWRTで1フレーム1ピクセル当たりに打てるレイは
せいぜい数本しかない!!!
1000本なんて夢のまた夢
アスキーアートの出典/参考: 2ちゃんねる
ハイブリッドパイプライン
Raster / Raytracingの併用を行う
例): 基本はRasterizeで一部の処理(鏡面反射や影)をRaytraceによって計算
出典/参考 Control: https://www.nvidia.com/ja-jp/geforce/campaigns/control/
併用
ラスタライズのみ
良い絵を出すには?
少ないサンプル数で出来るだけ多くの照明計算を行い、
まともなフレームレートで綺麗な絵を得たい
大域照明をリアルタイムに計算したい
例えば以下のようなことをする
・Denoise
・Sampleのかさ増し
・そもそもパストレーシングしない
・その他いろいろ(縮小バッファで計算してUpsample、フレーム補完など..)
サンプルかさ増し: SpatioTemporalな処理
目標ピクセルの処理において、
過去フレーム、近傍ピクセルのサンプルを利用する
時間 (temporal処理)
Nフレーム目
N-1フレーム目
N-2フレーム目
N-3フレーム目
N-4フレーム目
空間 (spatial処理)
ReSTIR (2019年)(レイトレSampleかさ増しの上で非常に重要)
Reservoir based SpatioTemporal Importance Resamplingの略
リアルタイム直接照明/影を、少ないライトサンプル数で低分散に得る手法
この論文で面白いのはReとIR
残念ながら解説はしません...
参考/出典 Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting:�https://research.nvidia.com/publication/2020-07_spatiotemporal-reservoir-resampling-real-time-ray-tracing-dynamic-direct
ReGIR / ReSTIR GI (2021年)
ReGIR
ReSTIR GI
光輸送経路そのものを再利用する
空間をセルに分割し、
間接光の計算結果を格納�(正確にはSecondary Rayの評価結果)
ReSTIRを発展させ、大域照明の計算に応用する試みは複数ある
ReSTIR GI
Original ReSTIR
出典/参考: ReSTIR GI: Path Resampling for Real-Time Path Tracing�https://research.nvidia.com/publication/2021-06_restir-gi-path-resampling-real-time-path-tracing
出典/参考 Raytracing Gems2 chapter23:
https://www.realtimerendering.com/raytracinggems/rtg2/index.html
ReSTIR PT (2022年)
ReSTIR PT�ReSTIRの基礎であるRISを拡張(GRIS)、異なる目標関数を扱った場合でも真値への収束を保証�GRISを使用した上で光輸送経路を部分的にピクセル間での再利用を行う
ReSTIRを発展させ、大域照明の計算に応用する試みは複数ある
出典/参考 Generalized Resampled Importance Sampling Foundations of ReSTIR : https://research.nvidia.com/publication/2022-07_generalized-resampled-importance-sampling-foundations-restir
ReSTIRはみんなのおもちゃ
比較的シンプルなので暇なグラフィックスプログラマがみんな勝手に実装しがち
商用レンダラーでの採用例もある
↑商用レンダラ
(ReSTIR GI + Surfel)
↑暇人のReSTIR GI 実装
強き者の強力な実装→
RTXDI SDK
NVIDIA製Real-Time Renderer向けSDK
ReSTIR, ReGIR, ReSTIR GI をサポート
↓Githubリポジトリ
https://github.com/NVIDIAGameWorks/RTXDI
出典/参考: https://developer.nvidia.com/rtx/ray-tracing/rtxdi� https://developer.nvidia.com/blog/lighting-scenes-with-millions-of-lights-using-rtx-direct-illumination/
Cyberpunk2077 Raytracing Overdrive (2023年)
RTXDI SDKを組み込み(多分)、Raytracing Overdrive Modeとしてフルレイトレ
出典/参考 : https://www.nvidia.com/ja-jp/geforce/news/cyberpunk-2077-ray-tracing-overdrive-update-launches-april-11/
重すぎるRaytracing overdrive mode
おそらくReSTIR + ReGIR (僕の妄想です、公式声明ではありません)
要件として、RTX4090, RTX4080, RTX3090 のいずれかが必要
4K解像度で十分なフレームレートを得るには、上記に加えてDLSSの併用が必須
放射輝度(照度)キャッシュによる大域照明
何らかの手法で照明計算を行い、その結果を何らかの形で保存する
各ピクセルは(真面目に全てを計算する変わりに)それを参照
大域照明を、パストレーシングやるよりかは高速に近似計算できる
例) Irradiance probe
出典/参考: https://developer.download.nvidia.com/rtx/rtxgi/NVIDIA-RTXGI-03-23-2020-v2.pdf?t=eyJscyI6ImdzZW8iLCJsc2QiOiJodHRwczovL3d3dy5nb29nbGUuY29tLyJ9
Unreal Engine 5 Radiance Caching (Lumen)
GI-1.0
AMDが2022年に発表したリアルタイム大域照明の近似手法
ワールド空間とスクリーン空間上での2段階のRadiance Cachingを行う
ワールド空間キャッシュではReSTIRを使用、それをスクリーン空間キャッシュが参照
出典/参考: https://gpuopen.com/capsaicin/ :https://gpuopen.com/download/publications/GPUOpen2022_GI1_0.pdf
Radiance cacheのアーティファクト
キャッシュされた値を参照するピクセルは通常 それぞれ数十~数百 ある
キャッシュ値が正しくないと、それらピクセルが影響を受けてモヤモヤアーティファクトが発生
GI1.0をいじめてモヤらせた結果
それでも重い
Fortnite以外でもUE5を採用し、リリースされたゲームはある (THE FINALS 2023年)
しかし、多分かなり手を加えている (UE5なのにRTXGI採用??)�Easy Anti Cheatに阻まれてキャプチャができません。おのれ
まだまだ発展途上
リアルタイムレイトレーシングはまだまだ発展している最中
特にリアルタイムGIはとても新しい技術(Diffuseのみなら2015年くらいからある)
オフラインレンダリングとリアルタイムレンダリングの差は縮まってきている!
みなさんも積極的にレイを発射していきましょう
お手元にRaytracing ReadyなGPUがあるのに
レイ発射したことがないみなさん、
RT Coreが泣いていますよ....?
完
既存のGPUパイプラインステージ
レイトレーシング
Denoise
Raytraced Shadow from Many Light
強き者の戯れkajiya renderer
商用だと?
それでも重い