1.

UE5 の Lumen とは|リアルタイムGIの仕組みと有効化手順

編集

この記事の要点

  • Lumen は UE5 に標準で搭載された、ライトマップのベイクを前提としない動的なグローバルイルミネーション(GI)と反射のシステム。
  • 有効化そのものは簡単で、プロジェクト設定の「Dynamic Global Illumination Method」と「Reflection Method」を Lumen にするだけ。
  • 内部ではシーンをメッシュ距離フィールドと Surface Cache という簡略表現に置き換え、そこへレイを飛ばして間接光を集めている。
  • トレース方式にはソフトウェアレイトレーシングとハードウェアレイトレーシングの 2 系統があり、後者は DirectX 12 と対応 GPU が前提。
  • 時間帯が変わる・オブジェクトが動く制作に強く、低スペック固定ターゲットや前方シェーディングとは相性が悪い。

Lumen は Unreal Engine 5 (UE5) から導入された、完全に動的なグローバルイルミネーションと反射のソリューションです。従来の Unreal Engine では、屋内の柔らかい照り返しや壁からの色移り(カラーブリード)を得るには Lightmass によるライトマップのベイクが実質的に必須で、ライトを 1 灯動かすたびにビルドを待つ必要がありました。Lumen はこのベイク工程そのものを不要にし、エディタでライトを動かした瞬間に間接光まで追従する、という制作体験を実現するために作られています。

ただし「有効にすれば勝手にきれいになる」ものではありません。Lumen はシーンを厳密にトレースしているわけではなく、簡略化された表現の上で計算しています。この前提を知らないと、光漏れや暗さの原因が分からなくなります。

1Lumen が解決している問題

ゲームエンジンにおける ライティング は、大きく「直接光」と「間接光」に分けられます。難しいのは間接光、つまり床や壁で跳ね返った光です。赤いカーペットの上に立つ白い柱がうっすら赤みを帯びる、窓のない廊下でも壁の反射だけで薄暗く見える、といった表現がこれにあたります。

間接光は本来、光が何度も反射する経路をすべて追う必要があり、リアルタイムでの厳密な計算は現実的ではありません。そこで従来は、オフラインで計算した結果をテクスチャ(ライトマップ)に焼き込む方式が主流でした。品質は高い反面、次のような制約が付きまといます。

  • ライトや形状を変えるたびにビルドが必要で、イテレーションが遅い
  • ベイク結果は静的なので、時間帯の変化や破壊表現に追従できない
  • ライトマップ用の UV とテクスチャ容量を、アセットごとに管理しなければならない
  • プロシージャルに配置される要素や、実行時に生成されるジオメトリには原理的に使えない

Lumen は「多少の精度を犠牲にしてでも、毎フレーム計算し直せる間接光」を目指した仕組みです。ライトマップを持たないので、ライトを動かせば照り返しも即座に変わり、実行時にスポーンしたオブジェクトも周囲に光を返します。

2仕組み — Lumen Scene と Surface Cache

Lumen の中核にあるのが、実際の描画シーンとは別に持つ簡略化された世界の表現です。おおまかには次の要素で構成されます。

実シーン メッシュ / マテリアル / ライト 距離フィールド 形状を粗く表した ボリュームデータ Surface Cache 表面の色・法線・ 放射をキャッシュ Lumen Scene トレース対象の世界 トレース段階 スクリーントレース → 距離フィールド or ハードウェアレイトレーシング → 遠景フォールバック Final Gather 画面上の各点に届く間接光・反射を合成
Lumen のおおまかな流れ。実シーンをそのままトレースするのではなく、簡略化した Lumen Scene に対してレイを飛ばす。

メッシュ距離フィールドは、スタティックメッシュの形状を「その地点から最も近い表面までの距離」というボリュームデータとして事前に持っておくものです。三角形と一本ずつ交差判定するより桁違いに速くレイの当たり判定ができるため、ソフトウェアレイトレーシングの土台になります。プロジェクト設定で「Generate Mesh Distance Fields」を有効にしていないと生成されないため、Lumen をソフトウェアモードで使う場合はここが必須になります。

Surface Cacheは、メッシュ の表面を複数の向きからキャプチャして、ベースカラー・法線・放射(エミッシブ)などを低解像度で保持したものです。レイが何かに当たったとき、その地点の「光っている量」をここから読み出します。マテリアル の見た目が Lumen の GI に反映されるのはこの Surface Cache を経由しているためで、逆に言えばここに載らないもの(後述する半透明マテリアルなど)は間接光に寄与しません。

トレースは段階的に行われます。まず画面内の情報を使った安価なスクリーントレースを試し、答えが出ない場合に距離フィールドやハードウェアレイトレーシングへとフォールバックします。この多段構成が、Lumen の速度と「画面外の情報は精度が落ちる」という特性の両方を生んでいます。

3有効化の手順

新規プロジェクトを標準設定で作った場合、Lumen は既に有効になっていることがほとんどです。既存プロジェクトで切り替える場合や、意図せず無効になっている場合は次の順に確認します。

  1. プロジェクト設定を開く:メニューの「編集 → プロジェクト設定」から、Engine カテゴリの「Rendering」を選びます。
  2. GI 方式を Lumen にする:「Global Illumination」セクションの Dynamic Global Illumination MethodLumen に設定します。
  3. 反射方式を Lumen にする:「Reflections」セクションの Reflection MethodLumen に設定します。GI だけ Lumen にして反射がスクリーンスペース反射のままだと、見た目が噛み合わないことがあります。
  4. メッシュ距離フィールドを有効化する:同じ Rendering 内の Generate Mesh Distance Fields をオンにします。この項目の変更はシェーダの再コンパイルとエディタ再起動を伴うため、時間がかかります。
  5. スタティックライティングの扱いを決める:Lumen を主軸にするなら Allow Static Lighting をオフにする構成が一般的です。ライトマップ関連の処理が省かれ、品質・パフォーマンスの面で有利になります。ただしベイク済みのレベルが混在するプロジェクトでは影響が大きいので、切り替え前に方針を決めてください。
  6. ライトの Mobility を確認する:Lumen は動的な GI なので、シーンのライトは Movable もしくは Stationary で使います。Static にしたライトはベイク前提の扱いになり、Lumen の間接光としては期待どおりに働きません。
  7. スカイライトを置く:屋外・屋内を問わず、空からの環境光を担う Sky Light は Lumen の見た目に大きく影響します。空の状態に追従させたい場合は Real Time Capture を使う構成が扱いやすいです。
  8. 結果を確認する:ビューポートの表示モードから Lumen 関連のビジュアライズ(Lumen Scene や Surface Cache)に切り替えると、Lumen が実際にどう世界を見ているかを確認できます。メニューの階層や名称はバージョンによって変わります。

なお、手順 4 のようにシェーダの再コンパイルが走る設定変更のあとは、初回のレンダリングやスクリーンショット取得が極端に重くなることがあります。設定を変えた直後の重さは一時的なものなので、コンパイルが落ち着いてから見た目を判断してください。

4ソフトウェアとハードウェアのレイトレーシング

Lumen のトレースには 2 系統あり、どちらを使うかで品質・対応範囲・要求スペックが変わります。

観点ソフトウェアレイトレーシングハードウェアレイトレーシング
当たり判定の対象メッシュ距離フィールドおよびそれを統合したグローバル距離フィールド実際の三角形(GPU のレイトレーシング機能を使用)
必要な環境距離フィールドの生成が有効であること。対応 GPU の幅は広いDirectX 12 と、レイトレーシングに対応した GPU。プロジェクト側でハードウェアレイトレーシングのサポートを有効にする必要がある
形状の精度距離フィールドは形状を粗く近似するため、薄い壁や細かい造作は再現しきれない実形状に沿うため、薄い板や細部でも破綻しにくい
反射の質ざらついた面の反射に向く。鏡面に近い面は苦手ヒットライティングを併用すると、鏡面に近い反射でも精度が出しやすい
コスト相対的に軽い相対的に重い。シーンによって差が大きい

共通して押さえておきたいのは、マテリアルのワールドポジションオフセットによる変形は距離フィールドに反映されない点です。風で揺れる草木のように頂点シェーダで形を動かすものは、Lumen 側では元の位置にある扱いになり、影や照り返しがずれます。

5品質に効く主なパラメータ

Lumen の詰めはプロジェクト設定と Post Process Volume の両方から行います。おおむね、プロジェクト設定が既定値、Post Process Volume がレベル単位・エリア単位の上書きという関係です。

パラメータ効果使いどころ
Lumen Scene DetailLumen Scene に細かいオブジェクトをどれだけ取り込むか小物の照り返しが出ないときに上げる。上げるほど重くなる
Final Gather Quality間接光を集める際のサンプル品質ノイズやちらつきが気になるときに上げる
Max Trace Distanceレイを飛ばす最大距離広い屋外で遠景からの光が届かないときに伸ばす
Lumen Scene View DistanceLumen Scene として維持する範囲大規模レベルで遠方のオブジェクトが GI に寄与しないときに調整
Reflection Quality反射のトレース品質反射がぼやける・ノイズが出るときに上げる
Max Roughness To Traceどこまで粗い面に対して反射トレースを行うかざらついた面の反射が省かれてしまうときに上げる

加えて見落としやすいのがエンジンのスケーラビリティ設定です。グローバルイルミネーションや反射のスケーラビリティを最も低い段階にすると Lumen は動作しません。「設定したのに効かない」ときの定番の原因なので、まずここを疑ってください。

6向いている場面・向かない場面

○ 向いているケース
昼夜が変化する、あるいは天候が変わるオープンワールド。ライトの位置や強さを頻繁に触るルックデヴ。プレイヤーが壁や地形を壊す・組み立てるゲーム。実行時に生成・配置される建物や小物が多いシーン。ストリーミングを前提とした大規模レベルで、ベイク待ちを避けたい制作。
△ 注意が必要なケース
要求スペックを大きく下げたいタイトル。前方シェーディングや VR 向けの構成。完全に静的で、時間をかけたベイクのほうが品質・負荷ともに有利になるシーン。薄い板を多用した建築的なジオメトリで、光漏れの対策コストが高くつく場合。

「動的である」ことのコストは小さくありません。ベイクなら描画時にテクスチャを引くだけで済んだ間接光を、Lumen は毎フレーム計算し続けます。最低動作環境と、ライティングが動く必要が本当にあるかを天秤にかけて選ぶのが基本です。レベルの土台を選ぶ段階から関わる話なので、レベルの「基本」テンプレートと「オープンワールド」テンプレートの違い もあわせて確認しておくと判断しやすくなります。

7まとめ

Lumen はベイクを不要にする代わりに、シーンを簡略表現へ置き換えてトレースするという割り切りをした仕組みです。有効化自体はプロジェクト設定の 2 項目で完了しますが、狙った絵を出すには、距離フィールドの生成、ライトの Mobility、スカイライトの有無、スケーラビリティ設定といった周辺条件が揃っている必要があります。うまく光らない場合は、まず「Lumen 自体が動いているか」「Lumen Scene に対象が載っているか」の 2 点から切り分けるのが近道です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Lumen とは?リアルタイムGIの仕組みと有効化
  2. Lumen が暗い・反射しない時の確認ポイント
  3. ライトの種類と使い分け(Directional / Point / Spot / Rect)