More Related Content Similar to UE4のレイトレで出来ること/出来ないこと
Similar to UE4のレイトレで出来ること/出来ないこと (20) More from Satoshi Kodaira
More from Satoshi Kodaira (6) UE4のレイトレで出来ること/出来ないこと10. リアルタイムレイトレとパストレーシング
同じじゃないの?
• レイトレーシングは始点と方向(有限 or 無限)を持ったレイを追跡する技術
追跡してシーンとの衝突を検出する
衝突したあとに何をするかは自由
• パストレーシングは光の経路(パス)を追跡する
カメラに飛び込んでくる光がどのような経路をたどったかを調べる
カメラからレイを飛ばしてその経路を追跡する
ここでレイトレーシングが使われている
• レイトレーシングを使って映像を作成する方法をパストレーシングと呼ぶ
パストレーシングはレイトレーシングの一種とも言える
16. アンビエントオクルージョン
• Screen Space Ambient Occlusionの代替として使用できる
デフォルトON
OFFにするとSSAOに切り替わる
• デバッグコマンド
r.RayTracing.AmbientOcclusion
レイトレAOのON/OFF切り替え
• アクター設定
PostProcessVolume.RayTracingAmbientOcclusion.SamplesPerPixel
レイトレAOのサンプリング数/1Pixel/1Frame
• AOの強度と範囲はSSAOと共用
PostProcessVolume.AmbientOcclusion項目が使える
• レイトレ後、時間的/空間的なデノイズ処理が行われる
20. リフレクション
• リアルタイムレイトレの目玉機能
Screen Space Reflectionの代替機能
デフォルトON
OFFにするとSSRが有効化
• デバッグコマンド
r.RayTracing.Reflections
レイトレリフレクションのON/OFF
• アクター設定
PostProcessVolume.RayTracingReflections.MaxBounces
リフレクションのバウンス回数
回数を増やすことで合せ鏡の描画も可能
• レイトレ後、時間的/空間的なデノイズ処理が行われる
• 完全反射のほうが有利
SSRの場合は完全反射を避けたほうがいいが、レイトレの場合は逆
ラフネスが高いとノイジーになり、残像感も残りやすい
23. リフレクション
All Roughness = 0.2
r.RayTracing.Reflections.SamplesPerPixel = 1
r.RayTracing.Reflections.SamplesPerPixel = 4 r.RayTracing.Reflections.SamplesPerPixel = 16
26. シャドウ
• Static Lightには無効
Static Lightのシャドウは焼付のみ
• Stationary, Movable Lightの処理は同一になる
Movableと同様にライトごとの計算
Stationaryの場合はライトマップの計算が行われる
• Source Radiusの値によってソフトシャドウを実現可能
ポイントライト、スポットライトのみ
Source Radiusが 0 より大きな値になっているとレイトレ後にデノイズ処理が行われる
• メッシュ単位のCast Shadowは適用される
OFFにするとシーンとリフレクション映像のシャドウのどちらも消える
Shadow Two Sidedは効果がないので、メッシュ単位で両面描画設定はできない
64. • 使えるライティングモデルは少ない
DefaultLit
Clear Coat
• DefaultLit扱いになるライティングモデル
Subsurface
Preintegrated Skin
Subsurface Profile
Two Sided Foliage
Hair
Cloth
Eye
• 何故か使えないライティングモデル
Unlit:リフレクションで無効化
制約:マテリアルの使える機能/使えない機能
71. • パッケージを作成したら[Select Target Process]ウィンドウで.exeを指定
-dx12を付けて起動することを忘れずに
• GPUキャプチャボタンが有効になっているはずなのでボタンを押してキャプチャ
複数キャプチャが可能
• あとはデバッグ!
DXRのデバッグ:PIX
起動はLaunchボタン
76. RT Global Illumination
RTGI OFF SamplePerPixel = 1
ScreenPercentage = 100
SamplePerPixel = 4
ScreenPercentage = 100
SamplePerPixel = 4
ScreenPercentage = 50
77. RT Global Illumination
SamplePerPixel = 4
ScreenPercentage = 50
MaxBouces = 1
SamplePerPixel = 4
ScreenPercentage = 50
MaxBouces = 4
SamplePerPixel = 4
ScreenPercentage = 50
MaxBouces = 8
81. • UE4ではマテリアル数に応じたHit Tableが生成される
DXRではShader Tableとも呼ばれる
マテリアルアセットが同一であればHit Group自体は同じものが使用されている
• Hit Tableとは、Hit Groupとそこに渡すパラメータ(テクスチャなど)から構成されている要素
のテーブル
レイが衝突した際にそのプリミティブの対応するHit Tableが参照される
• マテリアル数が同一であればマテリアルアセット数そのものはあまり関係なかった
マテリアルインスタンスを積極的に使っても速度差が出なかった
マスターマテリアルが相当数になってくると差が出るかもしれない
要計測
• マテリアルをまとめてHit Tableを減らせば高速化出来るのでは?
Hit Table数によるパフォーマンス
85. • 微妙な差ではあるが、安定した速度差が出ている
Hit Table数を減らした方が遅い
• なぜ?
詳細不明
イベントのプロファイルしようとしたら出来なかった
UE4の問題?要調査
• 推測
メッシュをまとめたことによりBVHの構成が変化
結果としてレイトレースが重くなっているのでは?
Hit Tableの参照やシェーダの実行自体はHit Table数とあまり関係がないかも
シェーダ自体の複雑度は実行速度に関係すると思われる
• テクスチャサンプリングを行っている場合はHit Tableが減ったほうが有利かも
https://shikihuiku.wordpress.com/2019/03/29/falcorのpathtraceサンプルをnsightgraphics
を使って最適化してみる/
Hit Table数によるパフォーマンス