Slide 1

Slide 1 text

redflash revolution 2022-09-03 レイトレ合宿8 @gam0022 / Sho HOSODA

Slide 2

Slide 2 text

基本機能
 • Unidirectional Path Tracing
 ‣ implemented in NVIDIA® OptiX
 • Disney BRDF
 • Next Event Estimation (Direct Light Sampling)
 • Multiple Importance Sampling
 • Primitives
 ‣ Sphere
 ‣ Mesh
 ‣ Distance Function (Raymarching )
 • ACES Filmic Tone Mapping
 • Deep Learning Denoising
 2

Slide 3

Slide 3 text

revolution? 
 3 redflash redflash revolution 2019年 2022年 バージョンアップ

Slide 4

Slide 4 text

レンダラーの出力設定 
 • 解像度
 ‣ 1920x1080
 
 • フレーム数 
 ‣ 300フレーム 
 • 30FPS
 • 10秒(今回の上限)
 4 1フレーム2秒 で1920x1080描画!


Slide 5

Slide 5 text

10秒の尺に詰め込んだ要素 
 3つのアニメーション 
 
 5 ライト レイマーチングの ジオメトリー マテリアルの パラメーター

Slide 6

Slide 6 text

ライトのアニメーション 
 ライトのAcceleration構造を毎フレーム更新 
 6

Slide 7

Slide 7 text

レイマーチングのジオメトリーの変形アニメーション 
 距離関数のパラメーターをアニメーション 
 7

Slide 8

Slide 8 text

マテリアルのアニメーション 
 マテリアルのパラメーターを上書きするCallableProgramを指定可能に 
 edge検出などをしてEmissiveをアニメーションさせた 
 8

Slide 9

Slide 9 text

急激に変化するカメラワーク対応 
 レイマーチングの衝突したとみなす距離の epsをアダプティブに調整 
 カメラとオブジェクトの距離が急激に変化するカメラワークに対応 
 9

Slide 10

Slide 10 text

カメラワークの工夫 
 10 手ぶれ Easingによる緩急 
 映像としての品質や説得力を多少は向上できた 


Slide 11

Slide 11 text

ポストエフェクト 
 • Vignette 
 ‣ 周辺減光
 
 • Fade In / Fade Out 
 ‣ 暗転で終了
 11

Slide 12

Slide 12 text

レイマーチングの高速化 
 • 速度比較!レイマーチングvsレイキャスティング | gam0022.net 
 12 
 
 レイマーチング はレイキャストより15~20倍くらい重い 
 (MengerSpongeで計測した場合) 


Slide 13

Slide 13 text

レイマーチングの高速化 
 • 通常のレイマーチング 
 ‣ カメラの座標からレイマーチングをスタートする 
 
 • 少し工夫したレイマーチング 
 ‣ AABBの表面からスタート(少し高速化できる) 
 
 • 今回のレイマーチング 
 ‣ 1サンプリング目のDepthを保存 
 ‣ 2サンプリング以降は、カメラからレイをDepthだけ進めた座標からスタート 
 ‣ プライマリレイの交差判定は劇的に高速化 
 • 1回目のmarching loopで衝突判定が終了 
 • marching loopが300回→1回であれば、300倍に高速化 
 ‣ セカンダリレイの交差判定には効果なし 
 • roughnessが0に近い完全鏡面のようなマテリアルなら 
 セカンダリレイのDepthを保存するのは意味があるかもしれない 
 13

Slide 14

Slide 14 text

[デバッグ機能] 軽量レンダラー 
 DirectionalLight + PointLightのDirectLight + Emissive 
 リアルタイムにアニメーションを確認可能になった 
 14

Slide 15

Slide 15 text

[デバッグ機能] WASD移動 
 • 個人的にマウスよりカメラを調整しやすい 
 • WASDでカメラワークのあたりをつけた 
 15

Slide 16

Slide 16 text

レンダリングの戦略 
 • 1フレームあたり2回OptiXのlaunch
 ‣ 1回目のlaunch
 • シーンの重さとGPU性能をベンチマーク
 • 1フレームあたりのサンプリング数を決定
 ‣ 2回目のlaunch
 • 制限時間ギリギリのサンプリング数でレンダリング
 • 1回目のlaunchの描画結果も平均値に加算
 16 どんな環境でも制限時間以内にレンダリング完了 


Slide 17

Slide 17 text

PNG保存の並列化 
 • PNG保存とレンダリングは並列実行
 ‣ main-thread: 現在フレームのレンダリング
 ‣ sub-thread: 前フレームのPNGエンコードとファイル保存
 
 • 余談
 ‣ stb_image + 4K解像度
 • レンダリングよりPNG保存がボトルネックになった
 17

Slide 18

Slide 18 text

END. 18