scenario-unreal-lighting-rendering について
Unreal のシーンアーティスト向けに、露出調整、物理ベースの照明、Lumen、MegaLights、静止画出力を扱うスキルです。表現ビュー、数値チェック、ショットごとのレビューでノイズや画面上の問題を調べます。
主な機能
- 01カメラ露出とライティングの調整
- 02照明器具、ネオン、窓の補助光の計画
- 03Lumen、MegaLights、シャドウの検証
- 04カメラごとのフレーム記録とレビュー
- 05パストレーシング静止画の準備と比較
活用シーン
- 01屋内外シーンの露出と照明の設定
- 02Lumen または MegaLights のノイズ調査
- 03シーンプロキシと最終照明の照合
- 04パストレーシング静止画の作成と検証
MCP 対応
Epic の MCP サーバーまたは ue_remote 経由で Unreal Editor の Python ワークフローを呼び出せます。このスキルはライティング、レンダリング、画像レビューの手順を提供します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-unreal-lighting-renderingインストール後、Claude Code で/scenario-unreal-lighting-renderingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/ue_light.py詳細
Unreal Engine 5.8 のライティングとレンダリング
Unreal における熟練のライティングとは、キャリブレーション済みのカメラ、物理的な光の値、そしてあなたが見ているのと同じシーンを認識するレンダラーです。それ以外はすべて、その上に重ねるアートディレクションとして扱い、そのように明記します。ライティング済みの画像を信頼する前に、各手順を表現ビューと数値で検証します。ノイズは、それを生じさせているシステムで修正します。ここに記載されている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼します(npx skills add scenario-labs/skills --skill <name>)。無人で作業を続ける場合は、ツールスキーマをもとに進め、スキルが不足していることを明示します。
必須の背景知識: scenario-unreal-expert(チャンネル、レビューループ、5.8 の落とし穴)。
ステータス(2026-09-24): scripts/ue_light.py はまだ Unreal で実行されていません。偽の unreal を使ったオフラインテストでは、200 件の純粋テスト、65 件のエディターレイヤーテスト、20 件の手順テストに合格しています。初回のエディター実行:tests/code/unreal-lighting-rendering/job_00_probe_lighting.py。
スタンス(専門家との違い)
- ライトより先にカメラ。 デフォルトの自動露出はエンジンを「子ども向け」にしてしまいます。10 lux と 100,000 lux の太陽が同じように見えます。被写体の位置にクロームボールを置き、露出補正を 0 にし、条件に合わせて Min/Max EV100 を制限してからライトを設定し、最後にエミッシブを追加します(Gobey nlbJwMoj1Dg [00:02:38] [00:11:40]; Faucher BGoaPyfZlYg [00:01:34])。Game Settings の露出で判断し、ビューポートの EV100 オーバーライドは使いません(Gobey [00:21:56])。
- 物理値で問題を解決し、チートは後から加えてレポートに記載します。 実際のルーメン値にすると、Lumen のちらつきが約
80%減少しました(Argyriou Q1whHlGJB_o [00:14:41])。アルベドはライティングの一部で、最大 0.8、
最小 0.02 です[追加](パストレーサーのドキュメント、Gobey [00:07:30]、Faucher X5zVhc5ahl0 [00:22:24])。すべての
ライトには目に見える器具があり、光源の形状も器具に合わせます(Faucher 0GYyHDuaPcg [00:15:14]
[00:15:47])。月明かり、フィル、ブーストを使ってもかまいませんが、
cheat_inventoryに記載します。パストレーサーには反映されません。 - エミッシブは見た目を作り、ライトは照明を担います。 小さくて明るいエミッシブはノイズが多く、スクリーンスペースで処理され、5.6 以降はより強くクランプされます(
r.Lumen.ScreenProbeGather.MaxRayIntensity10)。ネオンサインには、その面に合わせた矩形ライトを前面に配置します(Faucher 1e6oOiKh91U [00:12:30]; Gobey Q&A [00:37:33]; MegaLights のドキュメント)。Lumen では、小さなエミッシブメッシュに Emissive Light Source を設定し、必要に応じて Ray Tracing Quality Switch を使って Lumen 専用の 5~10 のブーストを加えます[ノードを確認](Campbell BKaAzhMHJZ0 [00:14:09])。パストレーサーはこのスイッチを無視し、チューブとそのライトを二重にカウントします(パストレーサーのドキュメント)。 - レンダラーが見ているのはプロキシです。実際に確認しましょう。 Lumen Scene と Surface Cache(黒はスクリーントレースのみ、ピンクはカードなし。メッシュ 1 つだけの部屋でよく発生)、MegaLights のシャドウキャスターの不一致、VSM のキャッシュ済みページを、同じカメラから見たライティング済みのビューとそれぞれ比較します(Faucher [00:07:21] [00:06:42]; Lumen、MegaLights、VSM のドキュメント)。
- MegaLights のノイズはサンプルの浪費であり、ライトの数が原因ではありません。 非表示のライトはサンプルの最大 20%(再投影に失敗すると 50%)、ディレクショナルライトは最大 50%を消費します。半径を狭め、コーンやバンドアを使い、ジオメトリ内にライトを置かず、クラスターを統合し、太陽には Deferred と VSM を使います(Narkowicz and Costa dmmN8_c8Tb0 [00:10:37] [00:16:40])。デフォルトでは、MegaLights のレイトレーシングはアルファマスクを無視します(MegaLights のドキュメント)。
- シャドウ方式は、何が動くかに合わせます。 ゲームプレイ中はローカルライトをレイトレーシングのままにします。VSM のローカルライトをキャラクターが横切るたびにページが無効化されますが、レイトレーシングは可視ピクセルごとの処理で済み、ペンumbラは追加コストなしです(Campbell [00:26:25] [00:31:42])。太陽には VSM を使い、レイトレーシングでは表現できないコンテンツにも、理由を明記したうえで VSM を使います。
- 暗い室内では、まずトーンマッパーを見直します。カラーグレーディングの前に光を当てましょう。 フィルを加える前に、Toe を 0.55 から 0.3 にし、Local Exposure Shadow Contrast を 0.6 にします(Gobey [00:14:58] [00:15:32])。次に、直接光、1 つのライトの間接光ブースト、Diffuse Color Boost、最後にグローバル露出という順で調整します(Faucher 0GYyHDuaPcg [00:08:14] [00:13:42])。光沢面には直接光が必要です。Lumen の間接光ではスペキュラーがほとんど得られません(Faucher [00:10:28])。
- 静止画では、パストレーサーが基準となり、品質を調整する手段はサンプル数だけです。 Deferred パスでは、サンプル数を増やして得られるのはモーションブラーとアンチエイリアスのみです。Lumen やシャドウのノイズは、ライトまたは PPV で調整します(Faucher X5zVhc5ahl0 [00:07:43]; fVg5ihB8Wdc [00:09:15]; Comly, demystifying-mrq)。
最初に確認すること
| 入力 | 変更内容 | 指定がない場合のデフォルト |
|---|---|---|
| プラットフォーム、フレームレート | Lumen のスケーラビリティ、MegaLights、HWRT | コンソール 60 fps:Lumen High。予算は scenario-unreal-performance に基づきます。Mac の数値は代替値です |
| この Mac で動作する機能(プローブ) | すべてのプラン | M5 Max、macOS 26.5.1:Lumen HWRT と MegaLights Experimental、Nanite と VSM Beta、パストレーサー対応(差分ファイル) |
| 成果物 | 露出モード、静止画プラン | ゲームプレイに加えて静止画 1 枚。直接納品(トーンマッピング済み PNG と EXR) |
| プレイヤーが移動する環境 | EV100 のブラケット | CONDITIONS:室内 4、ブルーアワー 6.5[追加]、低い太陽 7、月明かり 1 |
| スタイル | 月と太陽を物理ベースにするか、アートディレクションするか | 物理ベースを基本とします。読みやすさのために、映画的な月と 15 度の太陽の下限を設けるのはこの場合のみです(Faucher;Oakley rX0wZZxpB-U [00:19:16]) |
| 主要カメラ、ショット内のガラスと発光器具 | フォグ散乱、演出上の調整、ガラスと二重計上の監査 | brief のブックマークを使用します。ヒーローガラスの周囲に設置した PPV では前面レイヤーのみを使用します |
ワークフロー
Epic の MCP サーバーまたは ue_remote を介して Python でエディターを操作します。import ue_light as L。コード全文は
references/procedures.md を参照してください。スクリーンショットは潜在的な成果物です。1 回の呼び出しにつき 1 回キャプチャします。
- プローブと設定(P0、P1)。
probe()、render_settings_report、バックアップ後のini_patchを実行します。拡張輝度範囲は新規プロジェクトでのみ設定します。GATE:プローブの JSON を読み取ります。 - カメラのキャリブレーション(P2)。 被写体の位置に
spawn_calibratorを配置し、バインドされていないPPV_Globalを 1 つだけ作成します。apply_exposure(ppv, exposure_plan("gameplay", ("interior", "blue_hour")))、apply_look(Lumen GI では Local Exposure が必須です。Film を使うのはこの工程のみです)。GATE:ppv_lintで失敗がないこと。HDR ビューで各ターゲットがクランプ範囲内にあること。 - 屋外(P3)。
build_exterior_rig(exterior_rig_plan("blue_hour", key_camera_forward=...))を実行します。 Sky Atmosphere、地平線下 120,000 lux の太陽、リアルタイム Sky Light、黒いインスキャッタリングを伴うボリューメトリックフォグを設定します。Scattering Distribution はキーライトカメラからライトへの角度で設定します(ライトの方向からは 0.9、側面からは 0:Faucher 1LfiYtKDsac [00:16:06])。安定したランプはハローを出すため 1 より大きく散乱させ、ちらつくランプは 0 にします。GATE:scene_lintがクリーンであること。太陽が MegaLights の対象外であること。 - 実用灯、ネオン、開口部(P4、P5)。
FIXTURESのルーメン値とケルビン値を設定します。半径はtight_attenuation_radiusで求め、部屋のサイズを上限とします。光源半径、長さ、またはサイズを器具に合わせ、棚ごとに 1 つの矩形ライトを配置し、各看板の前にneon_sign_light、窓にopening_rect_lightを配置します。emissive_for_stopsで発光を設定し、続いてemissive_strategy(Emissive Light Source、ブーストは任意)を使います。GATE:ゲームプレイプロファイルでlight_lintに警告がないこと(器具、形状、VSM、クラスタ)。ない場合は理由を文書化します。 - レンダラーに見えているか(P7~P9)。 Lumen の各ビューと lit を比較します。ピンク表示で
room_shell_lintを実行し、MegaLights のダンプと不一致ビューを確認します。マスクされたキャスターと VSM のキャッシュ済みページも確認します。GATE:ライトを反射させる必要がある場所が黒またはピンクになっていないこと。ダンプに隠れたライトがないこと。VSM の赤色の割合がほぼ 0 であること。ノイズは動きの中で評価します。 - ルック(P10)。 まずアンビエントの形を整え、次に焦点の色相を決め、最後に「さらなる広がりへの期待」を作ります。フレーム外へ漏れる光や、明るい側道を使います(Oakley [00:07:34] [00:09:19] [00:08:44])。シャドウリフトの段階を順に調整し、最後にグレーディングします。ホワイトバランスの方向は A/B スクリーンショットで判断します。GATE:
frame_reportの B3~B8。 - レビューループ(P11、P12)。 ブックマークごとに
log_markを記録し、キャプチャしてからframe_report(frame, brief, log_text=log_since(...))を実行します。変更は 1 つずつ行い、iterations.jsonlに記録します。露出範囲の警告 5.8 はフレームの不合格を意味します。光沢のある領域ではハイライトを維持する必要があります。プレイヤーの経路を歩いて露出の適応を確認します。計測には P12 の計測プリセット(async compute、dynamic resolution off)を使い、結果を scenario-unreal-performance に記録します。GATE:失敗がないこと。 - 静止画(P13)。 まずシーンを監査します。
albedo_checkで Base Color バッファを確認し、emissive_fixture_pairs(A/Br.PathTracing.EnableEmissive 0、Indirect Emissive off)とglass_lintを実行します。次にstill_plan("path_traced", "final", glass=True, sky_atmosphere_visible=True, emissive_fixtures=...)を実行し、mrg_lintがクリーンであることを確認してから、set_cine_camera_exposure(Manual metering、Apply Physical Camera Exposure)を設定し、queue_mrg_stillを実行します。静止画専用の調整には、独自のライティングチャンネルでstill_only_light_planを使用します。 オフラインでは、リニア EXR 上のグレーカードが 1/3 ストップ以内に収まることを確認し、compare_ground_truthと 100 パーセントのクロップを使います。レンダリング結果がビューポートと異なる場合はRENDER_DIFF_TRIAGEに従います。GATE:critique.md の C1~C11。 - 引き継ぎ(P14)。
lighting_manifest(path, ctx):ライト、PPV、lint、調整項目、発光ペア、マスクされたキャスター、cvars。
数値
| 項目 | 値 | 基準、出典 |
|---|---|---|
| 太陽、月 | 天頂で 120,000 lux(0.545 degrees);月は 0.26 lux | Epic sky doc |
| 見た目の目標(EV100) | 晴天 14、曇天 10、低い太陽 7、室内 4、月明かり 1、月明かりなし -2 | Gobey chart [00:12:02];測定値ではなく目標値 |
| 照明器具 | ろうそく 12 lm 1,900 K;装飾用 300;室内 1,000;屋外 10,000;街灯 2,500~10,000 lm | Gobey chart;Argyriou [00:13:36] |
| 単位 | 1 cd = 625 unitless = 12.6 lm(点光源)= 3.14 lm(矩形光源)= 1.76 lm(スポット、44 degrees) | exposure doc |
| 露出 | EV100 = log2(N^2 / t x 100 / ISO);B = L / 2^(EV100 + comp);f/2.8、1/50、ISO 800 は EV100 5.6 | exposure doc |
| 自動露出 | Low 70~80、High 80~95 percent;Speed Up 3、Speed Down 1 | exposure doc;Gobey frame [00:21:52] |
| ローカル露出、フィルム | コントラスト 0.6~1(デフォルト 0.8);Toe はデフォルト 0.55、暗い室内では 0.3 | exposure doc;Gobey |
| アルベド | 0.02 [added]~0.8(パストレーシング)、0.9(Lumen) | path tracer doc;Faucher 1e6oOiKh91U [00:13:35] |
| MegaLights | サンプルの 20 percent を非表示ライトに割り当て(再投影に失敗した場合は 50);太陽は最大 50 | SIGGRAPH [00:10:37] [00:16:40] |
| パストレース静止画 | 時間方向 1、空間方向 256(ドラフト)~1024 以上(最終);ガラスは 10 バウンス;Max Path Intensity はデフォルト | path tracer doc;Faucher X5zVhc5ahl0 [00:16:47] |
| ディファード静止画 | 空間方向のみ、奇数(ドラフト 9、最終 15、薄く明るい場合 31);8 を超える場合は AA None、Motion Blur Amount 0、ウォームアップ 250 | Faucher fVg5ihB8Wdc [00:06:01] [00:10:58];1e6oOiKh91U [00:09:56] |
品質ゲート
- 測定可能:
ppv_lint、light_lint、scene_lint、glass_lint、room_shell_lint、mrg_lint、cvar_lintがすべて合格すること;すべてのブックマークで、キャプチャー以降のログを含むframe_reportを実行すること(空白フレームと露出範囲の警告は不合格);Base Color バッファーでalbedo_checkを実行すること;リニア EXR からグレーカードを確認すること;記載された例外を除き、compare_ground_truthが 1 段以内であること;VSM キャッシュビューでred_fractionを確認すること; ウォームアップでtemporal_flickerを確認すること。[added] と記されたしきい値は、プロジェクトごとに 承認済みの 1 フレームで調整します。 - 視覚的: 各ブックマークをフルサイズで確認し、表現ビューの横にサムネイルを表示すること;ノイズを
確認するためにカメラを動かすこと;漏れを確認するために内側の角を確認すること;光沢のあるハイライトを
確認すること;静止画を 100 percent で確認すること;
references/critique.mdの 順序に従うこと。
よくある間違い
| 間違い | このように見える | 対処法 |
|---|---|---|
| デフォルトの自動露出のままライティングする | どの値でも「問題なさそう」に見えるが、ちらつく | exposure_plan、コンプ 0、その後に物理ライト |
| エミッシブのみでネオンを照らす | GI に斑点ができ、ちらつく | 看板ごとに矩形ライトを設置する;Emissive Light Source |
| パストレーシングの静止画で、チューブとそのライトを併用する | 器具が Lumen より 2 倍明るく光る | r.PathTracing.EnableEmissive 0 で A/B テストする;Indirect Emissive をオフにする |
| 小さな窓のためにスカイライトや露出を上げる | 斑点ができ、室内が平坦なグレーになる | 開口部のサイズに合わせた opening_rect_light |
| MegaLights で多数の小さなライト、大きな半径、屋内の太陽を使う | ノイズや動きの中でのゴーストが発生する | 範囲を絞り、クラスターを統合し、太陽には VSM を使用する |
| 動くキャラクターに VSM のローカルライトを当てる | 継続的に無効化され、コストが急増する | レイトレースシャドウを使用する;理由がある場合のみ VSM を使う |
| MegaLights でグリルや植物を使う | 画面外に出ると影が塊になる | 穴をモデリングする、または EvaluateMaterialMode 1 を指定する |
| 部屋全体を 1 つのメッシュにする | サーフェスキャッシュがピンクになり、スクリーンスペース GI が発生する | 壁、床、天井を分割する;Max Lumen Mesh Cards |
| 暗い室内を補うためにフィルライトを追加し、最初にカラーグレーディングする | GI が平坦になり、ビューに依存する | トーとローカル露出を調整してから、調整手順に進む;最後にカラーグレーディングする |
| Lumen のみで光沢のあるバーの天板を照らす | 表面が乾いたように見え、生気がない | 反射できる直接光を当てる |
| Lumen のノイズに対して MRG サンプル数を増やす;ディファードサンプルを均一または混在させる | ノイズは変わらず、静止画がぼやける | NOISE_TRIAGE、still_plan、mrg_lint |
| パストレーシングの静止画で HDRIBackdrop を使う | 二重にライティングされる | 削除する;Sky Light cubemap と r.PathTracing.VisibleLights 2 を使う。この設定は Reference Atmosphere では何もしない |
| ビューポートとレンダーが異なり、cvar が貼り付けられている | 「レンダーが壊れている」 | RENDER_DIFF_TRIAGE:まず Global Game Overrides を確認する |
| 静止画専用のリムライトをレベルに残す | ごまかしのライトがゲームプレイにも影響する | 専用のライティングチャンネルを使い、間接光を 0 にし、ショットシーケンス内に配置する |
引き継ぎ
- 受け取るもの scenario-unreal-world-building から:レベル、モジュール式の壁、厚さ 10
cm 以上の床と天井、適切なモビリティ、
roomタグが付いた部屋のボリューム、fixture:<name>タグが付いた器具メッシュ、emissiveタグが付いた発光メッシュ。scenario-unreal-materials から:EmissiveIntensity(および Ray Tracing Quality Switch の背後にあるLumenEmissiveScale)を公開するマテリアルマスター、0.02~0.8 のアルベド、Surface ForwardShading のガラス IOR。scenario-unreal-vfx から:パーティクルライト (シャドウをオフ、Allow MegaLights)。 - 引き渡すもの scenario-unreal-cinematics へ:ライティング済みのレベル、
lighting_manifest.json、露出プラン(EV100、ISO、およびその絞り値に対するシャッタースピード)、still_planプリセット、MRG 変数、静止画専用のチートプラン。scenario-unreal-performance へ:ライト数、シャドウ方式、測定済みのパス。scenario-unreal-materials と scenario-unreal-world-building へ:アルベド、ガラス、マスク付きキャスター、部屋シェルの修正。
UE 5.8 の注意事項
- MegaLights は Production Ready(ライティングチャンネル、雲のシャドウ、不一致ビュー)です。指向性ライトはデフォルトで除外されます(
r.MegaLights.DirectionalLights 1)。r.MegaLights.Debug、r.MegaLights.DownsampleMode。 - Lumen Lite は Medium でベータ版です。SSGI は非推奨です。RTGI は 5.4 以降廃止されています。詳細トレースは非推奨です。
r.Lumen.HeightFog 1がデフォルトです。 r.EyeAdaptation.CachedLightingPreExposure(デフォルトは 4)によりプリ露出が統一され、露出がサポート範囲外になると画面上に 警告が表示されます。- SDR のパスは ACES 2.0 です。OCIO 2.5.1。グレーディングスコープは
ShowFlag.VisualizeColorGrading。 - Mac でパストレーサーを使用できます(macOS 26.4 以降)。バックフェースカリングは常に有効です。HDRIBackdrop には互換性がありません。 Reference Atmosphere は Sky Lights を無視します。
- Movie Render Graph は Production Ready です。デフォルトは Basic config、Light Modifier、レイヤーのウォームアップ、 DWAA/DWAB EXR です。
- Python:Rotator の位置引数の順序は roll、pitch、yaw です。そのため、
ue_lightはキーワードを渡します [要確認]。
参考資料
references/procedures.md:P0 から P14 までの全コード。各ブロックにテスト ID とステータスがあります。ライティングコードを記述する 前に読み込んでください。references/critique.md:セットアップ、フレーム、レンダー、予算の評価基準とコード上の指摘事項の対応表です。各ゲートで読み込んでください。references/expert-notes.md:専門家ごとの詳細、タイムスタンプ、意見の相違、判断条件。references/gui-paths.md:コンピューター操作エージェントまたは人間向けのメニューとエディター。references/sources.md:すべてのソース、認証情報、URL、最適なタイムスタンプ、改訂履歴。scripts/ue_light.py:ツールキット。docstring にすべての呼び出しと実行場所が記載されています。