Primer 07 — Lighting
光がどう画面に届くか / Shadows & global illumination

ライティングと影

Nanite が「形」を担うなら、Lumen が担うのは「」です。絵のリアルさの大半は光で決まります。光には2種類 ── 光源から直接あたる光と、壁や床で跳ね返ってくる間接光(GI)。そして光をさえぎるとができます。この章では、影を作る仕組み(シャドウマップ)と、間接光を動的に計算する仕組み(Lumen)を、実際に描いて確かめます。

Direct / Indirect Shadow Map Global Illumination Lumen
まず用語だけ — 読む前の30秒
直接光 direct light
光源から物体へ真っすぐ届く光。太陽やライトが直接あたる面を照らす。
間接光 / GI indirect / GI
壁や床で跳ね返って回り込む光。影の中がうっすら見えるのはこれ。
シャドウマップ shadow map
光の視点から見た「一番近い面までの距離」の画像。影判定に使う。
Lumen lumen
UE5の動的GI・反射システム。事前焼き込みなしで間接光を毎フレーム計算。
カラーブリーディング color bleeding
色のついた面の跳ね返りで、隣の面がその色に染まる現象。GIの証拠。
PCF soft shadow
影の縁の階段状ギザギザを、周囲を平均してぼかし柔らかくする手法。
※ 各語の詳しい定義は、ページ末尾の用語集にもあります。

§1 — Two kinds of light

直接光と間接光

部屋に窓から日が差すと、日なたはもちろん明るい ── これが直接光。でも日陰も真っ暗にはならず、うっすら見えます。これは光が壁や床で跳ね返って回り込んでいるから ── 間接光(GI)です。昔のゲームは直接光しか計算せず、影は不自然に真っ黒でした。間接光を足すと一気に「そこに空間がある」感じが出ます。

直接光 · direct
光源 → 面へ一直線
計算は軽い。だが影は真っ黒、光の当たらない面は沈む。これだけだと硬く不自然。
間接光 · indirect / GI
跳ね返って回り込む
影の中も柔らかく明るく、色も移る(カラーブリーディング)。計算は重いが写実的。

§2 — Shadow map

影の作り方 ── 光から見た深度

影は「その点に光源から光が届くか?」で決まります。判定に使うのがシャドウマップ。まず光源の視点で一番近い面までの距離を記録します(下の帯)。次に各点について「自分の距離 > 記録された距離」なら、手前に何か遮る物がある=と判定。下で解像度を落とすと影の縁がギザギザに、バイアスを弄ると独特の破綻が出ます ── 実際に触ってみてください。

診断
1テクセルの幅

画面右上の帯がシャドウマップ本体(光から見た深度)。解像度が低いと帯のマスが粗くなり、地面の影の縁が階段状に。バイアスを 0 近くにすると照らされている面に縞(シャドウアクネ)が出て、大きすぎると影が物から浮きます(ピーターパン現象)。PCF は縁をぼかしてギザギザを目立たなくします。


§3 — Global illumination

間接光を足す ── これが Lumen

天井のライトだけがある部屋(コーネルボックス)です。直接光のみだと、光が直接あたる床の中央だけ明るく、隅や箱の影は真っ黒、赤い壁・青い壁の色はほとんど効いていません。Lumen(GI)を入れると跳ね返りが加わり ──(1)影の中まで柔らかく明るく、(2)赤い壁の色が床ににじみ出す(カラーブリーディング)。ボタンで切り替えて、同じ部屋がどう変わるか見てください。

① 影の中が見える
跳ね返り光が回り込み、真っ黒だった影や隅が柔らかく持ち上がる。
② カラーブリーディング
赤い壁・青い壁の色が、隣の床や箱の側面にうっすら移る。
※ 概念を分かりやすく示す図です。実際のLumenはこれをレイtrace/表面キャッシュで毎フレーム物理的に計算します。

Lumen が偉いのは、この間接光を事前計算(ライトベイク)なしで動的に出せる点です。太陽を動かしても、壁の色を変えても、その場で間接光が追従する。昔はこれを何時間もかけて焼き込んでいました。


§4 — How Lumen traces

Lumen の中身と、静と動

Lumen は光線を追って跳ね返りを集めます。追い方に2種類あり、性能と品質のトレードオフです。あわせて、昔ながらの「焼き込み」も選択肢として残っています。

Software Ray Tracing
距離場を辿る
シーンの簡易表現(SDF/メッシュ距離場)に光線を通す既定モード。RTコア無しのGPUでも動く。精度は控えめ。
Hardware Ray Tracing
実ジオメトリに当てる
GPUのRTコアで本物の三角形に光線を当てる。反射がくっきり高品質。重く、対応GPUが要る。
Baked / Lightmap
事前に焼き込む
光を動かさない前提で間接光を事前計算しテクスチャに保存。実行時ほぼ無料だが動的変化はできない。

影のほうにも同じ構図があります ── 従来のシャドウマップ(§2)は軽いが縁の破綻がつきもの、レイトレース影は正確だが重い。Lumen と Nanite は「動的でも重すぎない」を狙った、UE5 の絵づくりの両輪です。


§5 — In UE

UEでの実際 ── 有効化と確認

Lumen はプロジェクト設定の Dynamic Global IlluminationReflections を Lumen にすれば有効。効き具合はビューポートの可視化モードや Post Process Volume で調整・確認します。

Lumen Scene
GIの元表現を見る
Lumen が内部で使う簡易シーン表現を可視化。ここに映らない物はGIに寄与しないと分かる。
Shadow / Cascade
影の解像度を確認
§2 の解像度・アクネはここで確認。近距離ほど高解像度に振るカスケードの設定が要。
Post Process Volume
GI強度を調整
Primer 05 で触れた PPV から、間接光の強さや反射品質を細かく調整できる。

これで Primer 01〜07:スレッド → テクスチャ → マテリアル → 描画パス → ポスト → Nanite → ライティング。1フレームが画面に出るまでの絵づくりが、形(Nanite)と光(Lumen)まで一通りつながりました。次は最適化・プロファイリング実践(stat unit を実際に読む)へ進むと、これまでの知識が「どこが重いか」の判断に効いてきます。


Glossary — 用語

よく出る言葉