1 of 36

近年のリアルタイムレイトレーシングの動向とその活用について

うでメガネ(LT枠)(学生)

色々な資料を色々なとこから拝借しています(出典は極力明記しています)、ごめんなさい...

内容に誤りを発見した有識者のみなさんは何らかの手段で指摘してください。

2 of 36

大作ゲームでレイトレが流行っていますね

みなさんも1度は聞いた単語なのではないでしょうか。

↓Bingに聞いてみた結果

3 of 36

事の発端: RTX Series GPUの登場(2018年)

レイトレのためのハードウェア実装

ラスタライズ/レイトレの併用パイプラインの構築が容易になる

出典/参考: RTX on—The NVIDIA Turing GPU : https://ieeexplore.ieee.org/document/8981896 : https://www.nvidia.com/ja-jp/geforce/turing/

4 of 36

RTX GPUでは何が出来るか

ハードウェア上でポリゴンと線分の交差判定が取れる

レイの評価結果をシェーダーで扱える

例)

・マテリアル評価

出典/参考: RTX on—The NVIDIA Turing GPU : https://ieeexplore.ieee.org/document/8981896 : https://www.nvidia.com/ja-jp/geforce/turing/

5 of 36

ソフトウェアレベルでのレイトレ近似手法

ハードウェアレイトレが無い時代でも人々はリアルタイムレイトレを試みた

どれも一長一短であり、今でも使われている

例)

・Screen Space Reflection

・Voxel Cone Tracing

・SDF Raytracing

6 of 36

なぜレイトレ(交差判定)が重要か?

幾何光学の要だから

写実的な絵を得るには、光線の振る舞いを再現すれば良いという考え

7 of 36

レイトレーシング (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

8 of 36

パストレーシング (1986年)

ある点で、全て入ってくる光評価値を積分すれば、出ていく光がわかる (発光する場合はそれも含む)

パストレーシングで、大域照明(Global Illumination)が計算できる!!

出典/参考 The rendering equation: https://www.cs.cmu.edu/afs/cs/academic/class/15462-s13/www/lec_slides/86kajiyaRenderingEquation.pdf

9 of 36

パストレーシングの収束と分散

積分を、離散値の有限回の操作で得られる確率的な推定値とする

->たくさんレイを撃つほど精度が上がる

->1ピクセルあたりのレイの本数をサンプル数と呼んだりする

-> 分散はサンプル数Nに反比例する。

   ->つまり、標準偏差(ノイズ)は√Nに比例して減少する

->ノイズのないまともな画像を得るには、サンプル数100とか1000とか必要

10 of 36

パストレーシングの収束と分散

積分を、離散的な有限の操作に置き換えて確率的な推定値とする

->たくさんレイを打つほど精度が上がる

->1ピクセルあたりのレイの本数をサンプル数と呼んだりする

-> 分散(ノイズ)は、サンプル数Nに対し、√Nに比例して減少する

サンプル数=1

サンプル数=10

サンプル数=1024

11 of 36

現状のハードウェア性能

HWRTで1フレーム1ピクセル当たりに打てるレイは

せいぜい数本しかない!!!

1000本なんて夢のまた夢

アスキーアートの出典/参考: 2ちゃんねる

12 of 36

ハイブリッドパイプライン

Raster / Raytracingの併用を行う

例): 基本はRasterizeで一部の処理(鏡面反射や影)をRaytraceによって計算

出典/参考 Control: https://www.nvidia.com/ja-jp/geforce/campaigns/control/

併用

ラスタライズのみ

13 of 36

良い絵を出すには?

少ないサンプル数で出来るだけ多くの照明計算を行い、

まともなフレームレートで綺麗な絵を得たい

大域照明をリアルタイムに計算したい

例えば以下のようなことをする

・Denoise

・Sampleのかさ増し

・そもそもパストレーシングしない

・その他いろいろ(縮小バッファで計算してUpsample、フレーム補完など..)

14 of 36

サンプルかさ増し: SpatioTemporalな処理

目標ピクセルの処理において、

過去フレーム近傍ピクセルのサンプルを利用する

時間 (temporal処理)

Nフレーム目

N-1フレーム目

N-2フレーム目

N-3フレーム目

N-4フレーム目

空間 (spatial処理)

15 of 36

ReSTIR (2019年)(レイトレSampleかさ増しの上で非常に重要)

Reservoir based SpatioTemporal Importance Resamplingの略

リアルタイム直接照明/影を、少ないライトサンプル数で低分散に得る手法

この論文で面白いのはReIR

残念ながら解説はしません...

参考/出典 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

16 of 36

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

17 of 36

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

18 of 36

ReSTIRはみんなのおもちゃ

比較的シンプルなので暇なグラフィックスプログラマがみんな勝手に実装しがち

商用レンダラーでの採用例もある

↑商用レンダラ

(ReSTIR GI + Surfel)

↑暇人のReSTIR GI 実装

強き者の強力な実装→

19 of 36

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/

20 of 36

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/

21 of 36

重すぎるRaytracing overdrive mode

おそらくReSTIR + ReGIR (僕の妄想です、公式声明ではありません)

要件として、RTX4090, RTX4080, RTX3090 のいずれかが必要

4K解像度で十分なフレームレートを得るには、上記に加えてDLSSの併用が必須

22 of 36

放射輝度(照度)キャッシュによる大域照明

何らかの手法で照明計算を行い、その結果を何らかの形で保存する

各ピクセルは(真面目に全てを計算する変わりに)それを参照

大域照明を、パストレーシングやるよりかは高速に近似計算できる

例) Irradiance probe

出典/参考: https://developer.download.nvidia.com/rtx/rtxgi/NVIDIA-RTXGI-03-23-2020-v2.pdf?t=eyJscyI6ImdzZW8iLCJsc2QiOiJodHRwczovL3d3dy5nb29nbGUuY29tLyJ9

23 of 36

Unreal Engine 5 Radiance Caching (Lumen)

Lumen:

非常に複雑な多段構成のRadiance Cacheと、Cache更新のためのデータ構造�SSRT, SDFRT(多段) or HWRTも使用 �ここで正しく説明するには複雑すぎる!!!!詳しくはここここを見よう

24 of 36

GI-1.0

AMDが2022年に発表したリアルタイム大域照明の近似手法

ワールド空間とスクリーン空間上での2段階のRadiance Cachingを行う

ワールド空間キャッシュではReSTIRを使用、それをスクリーン空間キャッシュが参照

出典/参考: https://gpuopen.com/capsaicin/ :https://gpuopen.com/download/publications/GPUOpen2022_GI1_0.pdf

25 of 36

Radiance cacheのアーティファクト

キャッシュされた値を参照するピクセルは通常 それぞれ数十~数百 ある

キャッシュ値が正しくないと、それらピクセルが影響を受けてモヤモヤアーティファクトが発生

GI1.0をいじめてモヤらせた結果

26 of 36

それでも重い

Fortnite以外でもUE5を採用し、リリースされたゲームはある (THE FINALS 2023年)

しかし、多分かなり手を加えている (UE5なのにRTXGI採用??)�Easy Anti Cheatに阻まれてキャプチャができません。おのれ

27 of 36

まだまだ発展途上

リアルタイムレイトレーシングはまだまだ発展している最中

特にリアルタイムGIはとても新しい技術(Diffuseのみなら2015年くらいからある)

オフラインレンダリングとリアルタイムレンダリングの差は縮まってきている!

28 of 36

みなさんも積極的にレイを発射していきましょう

お手元にRaytracing ReadyなGPUがあるのに

レイ発射したことがないみなさん、

RT Coreが泣いていますよ....?

29 of 36

30 of 36

既存のGPUパイプラインステージ

31 of 36

レイトレーシング

32 of 36

Denoise

33 of 36

Raytraced Shadow from Many Light

34 of 36

強き者の戯れkajiya renderer

35 of 36

商用だと?

36 of 36

それでも重い