Primer 12 — Deep dive
何を諦めると、何が速くなるのか / lumen quality vs speed

Lumen の
品質と速度

Primer 07 では Lumen を「動的な間接光」として使いました。ここではその内側 ── Lumen が現実的な速度を出すために、何を捨てているかを見ます。設定項目の意味が「どの近似をどれだけ許すか」として読めるようになると、品質を落とす場所を自分で選べるようになります。

Screen Trace Distance Field Surface Cache Radiance Cache Hardware RT
まず用語だけ — 読む前の30秒
レイ ray
ある点から光を探しに飛ばす仮想の線。当たった先の明るさを持ち帰る。
スクリーントレース screen trace
画面に写っている情報だけでレイを追う一番安い方法。画面外は追えない。
距離フィールド distance field
「最寄りの面まであと何cm」を格納した簡易形状。三角形より速く当たり判定できる。
サーフェスキャッシュ surface cache
物の表面の色と明るさを、6方向から焼いて貯めた低解像度アトラス。
ラディアンスキャッシュ radiance cache
空間に格子状に置いた「ここはどの方向がどれだけ明るいか」の記録。
デノイズ denoise
少ないレイのざらざらを、空間と時間でならして滑らかにする処理。
※ 各語の詳しい定義は、ページ末尾の用語集にもあります。

§1 — The impossible budget

まともにやると 1000 倍足りない

間接光を正直に計算するとはどういうことか、数を見てみます。1080p は約200万ピクセル。各ピクセルから半球方向にレイを飛ばして光を集めるとして、ノイズが目立たない品質には数百本が要ります。仮に256本なら毎フレーム5億本。しかも1本ごとにシーンとの交差判定と、当たった先の明るさの評価が必要です。60fps なら 16.6ms のうち数ミリ秒でこれを終える必要がある ── どう考えても無理です。

Lumen がやったのは高速化ではなく、問題そのものを小さく作り替えることでした。使う近似は大きく4つ。それぞれが「どの正確さを、どれだけ捨てるか」の判断です。


§2 — The trace ladder

レイ1本が辿る、安い順の梯子

Lumen のレイは、いきなりシーン全体に当てにいくわけではありません。安くて狭い手段から順に試し、答えが出たらそこで打ち切るという梯子構造になっています。設定を変えるというのは、この梯子のどの段を使うかを変えることです。

この構造から、Lumen の癖がそのまま導けます。画面に写っている物からの跳ね返りは正確で、画面外のものは急に雑になる ── カメラを振ると間接光が変わって見えるのは、レイが上の段から下の段へ落ちるからです。


§3 — Quality dial

品質つまみを回してみる

下は 2D 断面の小さな Lumen です。天井の光源から出た光が壁で跳ね返り、赤い壁からは赤が、緑の壁からは緑が床に回り込みます(カラーブリーディング)。プローブを置き、レイを飛ばし、距離フィールドに当て、バウンスを重ねる ── 本物と同じ手順を実際に計算しています。品質を上げると数字がどう膨らむかを見てください。

狭いほど間接光が細かい。数は2乗で増える。
少ないとざらつく。多いと線形に重い。
2回目以降で色が回り込み、暗部が持ち上がる。
ノイズは消えるが、光の変化への追従が遅れる。
この設定のコスト
プローブ数
レイ本数 / フレーム
相対 GPU 時間
60fps の予算 16.6ms のうち
品質の内訳

つまみを一通り回すと、Lumen の設計思想が見えてきます。レイを増やして品質を買うのは高い。時間蓄積で買うのは安いが、遅れという別の代金がある。Lumen が既定で「レイは少なく、履歴は深く」に振っているのはこのためで、そして遅れこそが次の節のアーティファクトの正体です。


§4 — Artifacts

アーティファクト事典 ── 症状から近似へ

Lumen の変な絵は、ほぼすべて §1 の4つの近似のどれかが破綻した結果です。症状からどの近似を疑うかが分かれば、触るべき設定も一意に決まります。クリックで開きます。


§5 — In UE

設定の意味と、環境ごとの構え

Post Process Volume の Global Illumination / Reflections、または Project Settings で設定します。効き目の大きい順に並べました。それぞれが §1 のどの近似のつまみかを添えています。

PC(デスクトップGPU)
RTコアがあるなら Hardware Ray Tracing + Detail Trace が第一候補。形が正確になるのでリークと接地の甘さがまとめて減ります。60fps を狙うなら Lumen Scene Detail と Final Gather Quality を落とし、内部解像度は TSR に任せる(Primer 10)。GPU Visualizer で Lumen 系のパスが 4〜5ms を超えたら黄信号です。
コンソール(PS5 / XSX 相当)
30fps なら HW レイトレースも現実的ですが、60fps では Software(Global Distance Field)が基本線。予算は GI 全体で 2〜3ms 程度に収めます。薄い壁を作らない、床と壁の接合部に隙間を残さない、といったレベル設計側の配慮が、設定を下げるより効くことが多いです。
切り分けの手順
ShowFlag.GlobalIllumination 0 で GI を切り、症状が消えるか確認。② 消えるなら r.Lumen.Visualize 1 でトレース結果そのものを見る(画面に写っている絵ではなく、Lumen が世界をどう認識しているかが出ます)。③ 実物と食い違っていれば距離フィールドか Surface Cache の問題 ── r.Lumen.Visualize.CardPlacement 1 でカードの貼られ方を確認。④ 認識は合っているのに絵が変ならデノイズ・時間蓄積側。⑤ 重さは GPU Visualizer で段ごとに見る(Primer 08)。

Glossary — 用語

よく出る言葉

前の深掘り
Primer 11 · Nanite とオーバードロー
基礎に戻る
Primer 07 · ライティングと影