
Unreal Engine 5 Path Tracing
Hey Guys !
未来さきっぽ研究所の秋葉三笠です。
今回はウィリアム・フォルシェー兄貴のPath Tracingの解説動画を自分なりに要約していこうかなと思います。
(画像にURLが埋め込まれています)


結論
基本はLumenで良いが、色付きガラスやガラス内の反射の動き、SSSと言った細かいリッチな表現をしたい時に使う。
拡大してみてみると、エッジの処理にブロック感が無く滑らか。
十数時間かけても良い時だけ使う。ここまでレンダリング時間かけるならArnoldやCycleで良くね?
プレビューのレンダリング進捗表示
r.PathTracing.ProgressDisplay 1
PostVolumeProcess のPathTracing 設定
Max.Bounces = 100
Sample Per Pixel = 1,000
Denoiser = Disabled
後はデフォルト設定。
レンダリング時間が40秒程度と速度と品質のバランスが取れている
レンダーキューのアンチエイリアスの設定。
レンダーキューでPath TracingとAntialiasingを追加。
Antialiasingの中にPathTracingのサンプル数設定がある。
Spatial Samples = 101
Temporal Samples = 1001
SpatialとTemporalの合計サンプル数とアンチエイリアスTAAのサンプル数を奇数で合わせる。
やらないと警告が出るのでやっておく。
r.TemporalAASamples 101101
要求スペックが高く爆熱。
ELSA RTX3070Ti でレンダリングすると102℃固定。
Ryzen9 3900Xは熱くならない。
今回使用するプロジェクト
Epic Games Luncher>サンプル
「リアルなレンダリング」を使用します。
レンダリングをテストするだけなので、別のプロジェクトでも問題ないですが、シティーサンプルや古代の谷は重すぎるかなと思います。

用語解説
Path Tracing
Max.Bounces
Sample Per Pixel
Render Queue
Spatial Samples《空間サンプル》
Temporal Samples《ピクセルごとのサンプル》
Lumen
サンプル数
Subsurface Scattering
皮膚、ワックス、大理石、ミルクといった素材向けに、シンプルな表面下散乱を追加するために用います。
これらの素材の場合、光は表面で直接反射するのではなく、表面を通して内部で反射してから、吸収されるか、近くのポイントから表面を離れていきます。
RGBカラーチャンネルごとに、平均の色のばらつきを設定できます。
たとえば、肌の場合、赤い色がさらに分散し、独特な赤い色の影と柔らかな外観となります。
引用
Path Tracing を有効化
ビューポート>表示モード
パストレーシングを選択

計算の進捗を表示
画面左下のアウトプットログから
r.PathTracing.ProgressDisplay 1
と入力。
Display 1の進捗を表示するという意味で、ディスプレイが変わる時は数字を変更します。

ビューポートのカメラをぐりぐり回すと、画面中央下に進捗バーが表示されます。

サンプル数をプレビュー用に変更
Path TracingやRay Tracingの設定はPostProcessVolumeに格納されています。
アウトライナー>PostProssessVolume>詳細
詳細ウィンドウでPath と検索すると、Path Tracingの設定のみ表示されます。
Sample Per Pixelを16,384から10にする

レンダーキューでのサンプル数(検証)
サンプル数10と500の比較。
4K解像度の動画でPixel 6で見てもぱっと見の変化はわかりませんが、サンプル数10はどこか解像感が甘く、絵が眠い印象を持ちました。
iPad Pro 11インチや27インチモニターで見ると違いが歴然。

拡大すると、ノイズ処理のせいでディテールがかなり潰されています。

レンダーキューでレンダリングしてみると違いが歴然。
静止画で見るとあまり違和感が無いが、動画で見ると動的ノイズが乗りちらついています。
動画時間9:04 を参照
Spatial Samples = 100
Temporal Samples = 1
Denoiser = Enabled
(PostProssessVolume内ではなく、レンダーキューのアンチエイリアス内の設定)
だめだめ、とてもじゃないが使えないしこれならLumenの方が5億倍良い。

Spatial Samples = 10
Temporal Samples = 10
Denoiser = Enabled
悪くないですが、まだLumenの方が綺麗。

ウィリアム兄貴の検証結果では個人的に納得がいかなかったので、自分で検証してみました。
レンダーキューで1920x1080、.jpgで書き出してAfter Effects でならべて見ました。
正直違いがわかりません。
Lumenが優秀過ぎる…

最終的なレンダリングの設定方法
PostVolumeProcess > PathTracing
Max.Bounces = 100
Sample Per Pixel = 1,000
Denoiser = Disabled
レンダーキュー > アンチエイリアス
Spatial Samples = 101
Temporal Samples = 1001
r.TemporalAASamples 101101
設定としてはこんな感じです。
諸々検証した私の感想として、中途半端にレンダリング時間を短縮するならLumenの方が良いので、PathTracingはレンダリング時間を考慮せず、クオリティーを追い求める設定が良いかなと思いました。
ではやり方を説明します。
ビューポート > レンダリング設定
パストレーシングに変更
アウトライナー > PostProcessVolume > 詳細 > PathTracing
Max.Bounces = 100
Sample Per Pixel = 1,000
Denoiser = Disabled
Max.Bounces : Sample Per Pixel = 1 : 10

編集 > プラグイン
Movie Render Queueを有効化して再起動

コンテンツ > Cinematic
archviz_cine_MASTER(レベルシーケンス)を選択してシーケンサーを起動

書き出しボタンからムービーレンダーキューを選択

ムービーレンダーキュー > Unsaved Config
設定ウィンドウを表示する

+設定ボタンから
・アンチエイリアス
・パストレーサー
・任意の拡張子(私は.pngか.exrが好み)
を追加

アンチエイリアスを選択して
Spatial Samples = 101
Temporal Samples = 1001
に設定
TAAのサンプル数を101,101にしなさいとエラーメッセージが出る。
サンプル数を奇数にしないと行けない理由は、TAAサンプル数を奇数にしないといけないから。

アウトプットログを起動して
r.TemporalAASamples 101101
と入力するとTAAサンプル数を101,101に指定することが出来る。

ムービーレンダーキューの設定を再起動するとエラーメッセージが消えている。

解像度や命名規則はお好みで。

んじゃ、ローカルレンダリングボタンを押してレンダリング開始。
レンダリングを強制終了する時はescキーを連打すると落とせる。
全体
Total Frames = レンダリングが終了したフレーム数(54フレーム終了)
Elapsed Time = 経過時間(1時間16分26秒経過)
Est. Time Remaining = 完了予想時間(9時間55分46秒後終了予定)
1フレームごと
Cut Name = 何カット目をレンダリング中(1/11をレンダリング中)
Frame = 現在レンダリング中のフレーム(55フレーム目)
Sub Samples = 指定サンプル数を計算し終わったら次のフレームへ

以上。
検証結果まとめでした。
ウィリアム兄貴の動画だけでは結構不足だったので自分で調べて検証しました。
完走した感想としては、基本Lumenで必要性を感じたらPathTracingって感じで使い分ければいいかなと思います。
日月(休日)を返上したかいがありました。
やっぱアンリアルはわくわくして楽しいです。
ではまた~