scenario-unity-rendering-lighting について
グラフィックステクニカルアーティスト向けの Unity 描画・ライティングスキルで、Unity 6.3 の URP 17.3 を対象に測定可能な手順を提供します。スクリプトと反復可能な品質ゲートを使い、露出、照明、ベイク、カラーグレーディング、性能を確認します。
主な機能
- 01URP パイプラインと品質ティアの設定
- 02基準カードを使った露出と照明の調整
- 03ベイク監査と予算チェック
- 04リフレクションプローブと漏光の診断
- 05描画パスと性能の測定
活用シーン
- 01デバイス別のグラフィックスティア設定
- 02ライト調整前の露出校正
- 03ベイク照明と反射の問題確認
- 04モバイルでの描画負荷測定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-unity-rendering-lightingインストール後、Claude Code で/scenario-unity-rendering-lightingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/ut_lighting.pyscripts/AgentKit/Lighting/LightingAudit.csLightingBake.csLightingCapture.csLightingPipeline.csLightingPost.csLightingScenes.csLightingUtil.csscripts/Runtime/AgentPlayerCapture.csAgentPSOWarmup.cs詳細
ライティングとレンダリング(ライター/グラフィックス TA)
Unityで熟練したライティングを実現するには、数値を基準にした反復が欠かせません。まず露出を調整し、基準点に合わせてライティングし、ベイクしてからカラーグレーディングを行います。好みで判断する前に、同じカメラブックマークを使い、各段階を数値(グレーカード、クリッピング、ベイクメモリ、ネイティブパス)で評価します。このスキルは、コードからUnity 6.3上のURP 17.3を操作します。ここに記載した内容はすべて、2026-09-24にApple M5 Max(Metal)上のUnity 6000.3.21f1で実行しました。ここで名前が挙がっている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください
(npx skills add scenario-labs/skills --skill <name>)。無人で進める場合は、ツールのスキーマに従い、不足している点を明示してください。
必須の背景知識: scenario-unity-expert(チャンネル、ut_run、AgentCapture、AgentProfile、
ut_review、6.3の落とし穴)。
基本方針(専門家との違い)
- ライトより先に露出を調整する(Pierre Yves Donzallaz、yqCHiZrgKzs [00:20:21])。URP 6.3で使えるのは固定露出のみです。ゾーンごとにポストエクスポージャーを設定し、18%グレーカードを基準にライティングを調整します(トーンマッパーなしでは補正前の太陽光の読み値が+1.03 EV、Neutralでは調整後の読み値が0.98、+0.16 EV)。
- ベイク後は暗くなるものと考え、早めに選んだトーンマッパーの下でポスト処理して補正する(Kyle Banks、 1agSNKuAfTM [00:04:58]、PYD [01:01:29]):ルック開発ではNeutralを使います。コントラスト、彩度、シャドウ、ミッドトーン、ハイライトを強めに調整してから、控えめに戻します。ACESでは暗くなるため(K3-wPnhmDi4 [00:54:50]、実測で-1.4 EV)、その設定で露出を再調整してください。
- 解像度より先にシャドウ距離を調整する(6.3 Manual、HCXCmHgV7Sk [00:15:32]):40 mに対する2048より、10 mに対する1024のほうが効果的です。最大距離は、プレイヤーから見える動的シャドウの最遠距離に設定し、最後のカスケードは最後のキャスターの位置で終わるようにします。ソフトシャドウを使うスタイライズドな部屋では、1024が最適でした。これより高くすると「くっきりしすぎる」ように見えました(URP e-book)。
- レンダリングに使われるアセットは品質レベルのアセットであり、ポスト処理も同様です(URPS [00:03:14]、 [00:30:06])。編集前に状況を報告してください。Unity 6では、Graphicsのデフォルトプロファイル、アクティブなURPアセットのプロファイル、シーンのボリュームが、パラメーターごとに順番に適用されます。品質レベルによってコストが変わるポスト処理(ブルームのコスト、DoF、APVの漏れ低減)は各品質レベルのアセットプロファイルに設定し、すべての品質レベルで優先されるシーンのボリュームには設定しないでください(実測済み)。テンプレートの2つのアセットは1つのプロファイルとNeutralトーンマッパーを共有しています。
- 動かないものをベイクし、コストに応じて設定を分ける(Ciro Continisio、hMnetI4-dNY [00:35:51]): テクセル密度、最大サイズ、ディレクショナルモード、シャドウマスクはメモリコストを左右しますが、サンプル数とバウンス数に影響するのはベイク時間だけです。小さなプロップはGIに寄与させつつ、受信GIをライトプローブに設定します([00:48:30])。シャドウマスクの1テクセルには、シャドウを投影するMixedライトを4つ格納できます(6.3 Manual)。ライトマップはAPVよりサンプリングコストが3~4倍低い一方で、メモリを3倍消費します(APV24 IpVuIZYFRg4 frame 00:23:43)。スマートフォンでは、静的ジオメトリにライトマップを使います。
- 空は室内を照らすデフォルトの光源です(PYD22 DlxuvvYZO4Q [00:08:17]、U25 [00:45:56])。ベイク済みGIとローカルなボックスプローブがない場合、室内や光沢のある表面には空の色が反映されます(スムースネス0.3のテーブルは、プローブを追加するまでグレーブルーに見えました)。
- スタイライズド表現はフィルターではなく、制作上の選択です(Kyle Banks [00:22:04]~[00:23:06]):パレットテクスチャ1つ、ワールド座標のトライプレーナーノイズ、共有シェーダー1つ(3つのテクスチャから7回サンプリング。Switchでも問題ありません)。低品質レベルではSimple Litを使います(URP e-book)。Subtractiveは最も低コストの混合モードです(TRB)。トゥーンシェーダーでもライトマップ、シャドウマスク、プローブをサンプリングしなければ、ベイク結果は反映されません。6.3では、URP Unlitターゲットを使ってカスタムライティングを構築します(差分セクション5)。
- タイルベースGPUでは帯域幅が予算です。実測で確認してください(6.3 Manual、U25 [00:30:26]、Ryan Keeble、
bl0vKZkzNOs [00:14:30]):Forwardを使い、必要がない限り深度テクスチャや不透明テクスチャは使用しません(必要な場合はAfter Transparentsでコピー)。ソフトシャドウは使わず、MSAAは2xにします。Quest 2クラスのGPUでは、フルスクリーンパスを追加するごとに1~2 msかかります。
PassAuditはRender Graphのネイティブパスを読み取ります。After Opaquesで深度をコピーするか、不透明テクスチャを使うと、不透明、スカイボックス、透明の各パスが分割されます(実測済み)。
最初に確認すること
プラットフォームとデバイス層(コンピュートまたはGLES)、フレーム予算(モバイルでは65%)、感情を表す一文(KB [00:03:25])、参考資料、スタイライズドかリアルか、時刻、動くもの、屋内空間、カスタムシェーダー、ベイク済みメモリの予算を一度に確認します。
| 決定事項 | デフォルト | 変更する条件 |
|---|---|---|
| パイプライン | URP 17.3 | 独自機能が必要なPC/コンソールの場合のみHDRPを使用します。新機能はなく、モバイル、Web、Switch 1には対応しません(rps) |
| PC層 | Forward+、深度テクスチャ、MSAA 4x、HDR 32-bit、60 mの範囲に2048のシャドウを2カスケードで適用、ソフトシャドウはMedium、追加シャドウ、Distance Shadowmask(Forward+で検証済み)、ドローコールがCPUのボトルネックになる場合はGPU Resident Drawer | デバイステスト |
| モバイル層 | Forward、深度/不透明テクスチャなし(Opaque TextureはStoreAndResolveがない場合、MSAAも通知なく無効にします)、MSAA 2x、レンダースケール0.85、30 mの範囲に1024のシャドウを1カスケードで適用、ソフトシャドウなし、追加シャドウなし、Shadowmaskモード、バイアス0.1/0.5(テンプレートの1/1が漏れていました) | 幅広いデバイスに対応する場合:copy_fromで低性能層を追加します(Simple Lit、リアルタイムシャドウなし)[追加] |
| 層ごとのポストプロセス | すべての環境でGrading Mode(HDR)を1つとLUT 32を使用します。モバイルプロファイル:ブルームはKawaseまたはDual(6.3)、HQフィルタリングなし、HalfまたはQuarter、最大5反復、DoFなし、SSAOなし、Leak ReductionはPerformance。PC:SSAO Downsample、Leak ReductionはQuality | アートディレクション |
| GI | 静的ジオメトリはMixedの太陽光でライトマップ化します(スマートフォン層で静的な太陽光のシャドウをベイクする場合はShadowmask、それ以外はBaked Indirect)。動的オブジェクトにはAPVを使用します。レイアウトが開放的、または変化する場合はAPVのみを使用します | 低性能向けのスタイライズド表現ではSubtractive(CC [00:41:17])、時刻に応じて変化する場合はAPVシナリオまたはスカイオクルージョン |
| プローブ | Adaptive Probe Volumes | コンピュート非対応の場合、またはプローブを移動する必要がある場合はLight Probe Groups(APV24 [00:08:31]) |
| AA | PCではMSAA 4xまたはTAA/STP、モバイルではMSAA 2xまたはFXAA | TAA/STPはMSAA、スタッキング、動的解像度と併用しません。STPはGLESでは使用しません |
ワークフロー
チャンネル:レンダリングまたはベイクを行う場合は ut_run.run_method(P, "AgentKit.Lighting....", args, graphics=True)、レポート、ティア、ボリューム、監査のみの場合は -nographics を使用します(GI はベイクできません。Bake は拒否します)。プレーンコマンド(L.raw_command):
Unity -batchmode -nographics -quit -projectPath P -logFile <job>/unity.log -executeMethod <method> -agentJob <job>、
引数は <job>/args.json に格納され、結果は AGENT_RESULT 行に出力されます。コードと結果の全文:
references/procedures.md。
- パイプラインをレポートします。
LightingPipeline.ReportPipeline:レベルごとのアセット、レンダラー、機能、アセットプロファイル、GRD の前提条件。GATE:すべてのレベルに個別のアセットがあること。 - ティアをデータとして設定します。
ConfigureTiers(asset_props、renderer_props、quality_props、renderer_features、volume_profile+volume_overrides、BRG バリアントと静的バッチ処理用のプロジェクトgraphics)、その後、新しいプロセスで ReportPipeline を実行し、L.tier_checkを実行します。GATE:不一致 0 件、エラー 0 件(グレーディングの不一致、GRD チェーン、Use Rendering Layers を使わない APV マスク)。 - ブックマークとカードを用意します。
AgentView_*カメラ、グレーカード(太陽光、日陰、ゾーンごとに 1 枚)、屋内にクロムボールを配置します。CaptureStage。GATE:L.stage_reviewのエラー 0 件、シートを開いていること。 - 露出を決めてから、ライトを設定します。 Lookdev ボリューム(Neutral、Post Exposure を固定);太陽光は
I * 2^-EV(card)、その他のライトは比率で設定します。ゾーン露出ボリュームは優先度 1 にします。GATE:太陽光を受けるカードが半段以内、太陽光と日陰の差が最大 4 段 [追加]。 - ベイクします。 まず
LightingAudit.AuditLighting(寄与する要素、ライトマップ UV、ベイクを表示または反映できないシェーダー、Shadowmask の重複、style: "stylized"のルール)を実行し、次にLightingBake.Bakeのプレビュー、最後に本番ベイクを行います。各ティアで Lighting Mode がシャドウマスク範囲のシーン(P13)を実際にレンダリングすることを確認します。GATE:ベイクレポートが予算内、UV 警告なし、監査エラー 0 件。 - 反射と光漏れに対処します。 ゾーンごとにボックスプローブを配置します(importance 2、blend 0.25 m)。光漏れ対策の段階的手順:プローブ間隔に近い壁厚、APV Options のバイアス(0.1 / 0.175)、Rendering Layer マスク(
apv_layers、最大 4、再ベイク)、最後に Probe Adjustment Volume(APV24 [00:18:13] から [00:23:13])。GATE:屋内の中程度に滑らかな表面が空のような青色にならないこと(青と赤の差が 0 以下)。 - グレーディングします。 シーンボリュームで最終的な見た目を設定し、ティアプロファイルのコストフィールドを設定して、露出を再調整します。GATE:彩度とコントラストがベイク後のステージより高く、クリップ率が最大 5%で、カードが範囲内にあること。
- 計測します。
AgentProfile+ut_stat.budget_check、ティアごとのPassAudit、PC と Mobile のキャプチャを実行します。ティア固有の例外(P12)については開発プレイヤーを用意し、PSO トレースと段階的なウォームアップ(P15)も行います。GATE:予算を傾向として評価すること。ベンダー GPU キャプチャ(scenario-unity-mobile)を使って熱が安定した後にデバイスの判定を行います。Mobile は PC に対して 0.35 EV 以内、彩度は 15%以内 [追加]。
数値
| 値 | 比較対象 | 出典 |
|---|---|---|
| EV100:晴天 14、曇天 10、夕暮れ 8、明るい室内 6、暗い室内 1 | 現実世界の基準値。URP に EV はないため、比率を使用します | PYD [00:17:37] |
| 51 対 102 テクセル/m | 40 m に 2048、10 m に 1024 | 6.3 Manual |
| スポット 1、ポイント 6、最大 16 マップ | 追加ライトのシャドウアトラス | 6.3 Manual |
| 256 サンプル、テクセルあたり 4 ライト | デノイザーの下限、シャドウマスクのチャンネル | 6.3 Manual |
| 背景 0.2、プレイエリア 1 | Scale In Lightmap | CC [00:17:30] |
| 0.20 対 0.67~0.83 ms、42.7 対 14.5 MB | ライトマップと APV サンプリング(PS4 1080p)、メモリ | APV24 |
| 1,723 / 9 / 0 / 0 px | Mobile での太陽光の漏れ:テンプレートのバイアス、0.1 / 0.5、Shadowmask、Subtractive | 観測値 |
| 1.33 対 0.67 MB | 室内ライトマップセット、Shadowmask 対 Subtractive(512 x 512) | 観測値 |
| 約 2,450 対 22 対 38 ドローコール、メインスレッド / 3 | 900 個のキューブ、GRD オフ対オン、Editor Play モード | 観測値 |
| ネイティブパス 6 / 8 / 7 | Mobile:深度オフ / After Opaques でコピー / After Transparents | 観測値 |
| 14 PSO、5 フレームでウォームアップ | 屋外シーン、Metal 開発プレイヤー、1 フレームあたり 3 | 観測値 |
| フルスクリーンパスあたり 1~2 ms | Quest 2 クラスのタイルベースレンダラー | RK [00:14:30] |
品質ゲート
- 測定可能: 新規プロセスでのティア読み戻しの不一致 0 件、ReportPipeline と AuditLighting の
エラー 0 件、予算内でのベイク、最終トーンマッパー適用後にカードが範囲内、クリップ 5% 以下、黒つぶれ
30% 以下、室内のクロームボールが空の青色にならない、ティアで約束した遠方のシャドウが存在する
(P13)、スマートフォンで不透明・スカイボックス・透過が 1 つのネイティブパス内にある、
傾向把握用の
budget_check。 - 視覚的: 各ステージ後のステージシート、アクネや継ぎ目のないくっきりしたシャドウ、接合部で光が漏れない、
空の色かぶりがない、感情を表す一文がフレームを描写している、Mobile でも同じ画像として認識できる
(
references/critique.md)。
よくある間違い
| 間違い | どのような状態か | 対処法 |
|---|---|---|
| 感覚でライトを調整し、露出で補正する | カードが +0.9 EV になり、室内の明るさがいつまでも合わない | グレーカードを使い、露出を固定して、ライトを調整します |
| 距離を短くせず解像度を上げる | 4096 でもカメラ近くがぼやける | Max Distance を最後に見える動的シャドウまでの距離に設定します |
この Mac で CPU ライトマッパーまたは -nographics でベイクする | 拒否される、または何もベイクされない | GPU ライトマッパーを使い、graphics=True にします。Apple Silicon には CPU フォールバックがありません |
| 小道具で Contribute GI をオフにする | ベイクされた接触シャドウがなく、Shadowmask の下ではリアルタイムシャドウが表示される | Contribute GI をオンにし、Receive GI = Light Probes に設定します |
| 1 つの面でシャドウ付き Mixed ライトが 4 つを超える | 余分なライトが完全にベイクされた状態で固定される | light.shadowmask_overlap を使います。余分なライトを Baked または Realtime にします |
| ライトマップ対象のジオメトリに Toon またはカスタムシェーダーを使う | ベイクされたライトとシャドウが消える | light.shader_no_lightmap / no_shadowmask / no_meta を使います。scenario-unity-shaders は各バリアントを追加します |
| シーンのボリュームでティアごとにブルームを設定する | モバイルでも PC 向けブルームのコストがかかる | コストに関するフィールドはティアプロファイルにのみ設定します |
| 一方のティアが LDR、もう一方が HDR | グレーディング後にティア間で差が生じる | Grading Mode(HDR)を統一し、LUT サイズも統一します |
| Use Rendering Layers を使わずに APV マスクを使う | そのティアではマスクが無視される | すべてのアセットで m_SupportsLightLayers を設定します |
| 屋内にローカル反射プローブがない | クロームや木材に空が反射する | ゾーンごとにボックスプローブを配置し、importance を 2 に設定します |
| カスタムシェーダーで Depth Priming をオンにする | MSAA をオフにするとオブジェクトが消える | DepthOnly と DepthNormals のパスを追加するか、プライミングを Disabled にします |
| 薄い壁でテンプレートの Mobile bias が 1 / 1 のまま | 壁と天井の継ぎ目にギザギザの太陽光が現れる | bias を 0.1 / 0.5 にします。太陽光をベイクします(Shadowmask または Subtractive) |
| 必要な一連の設定なしで GRD をオンにする | バッチ処理されない | BRG Variants Keep All、SRP Batcher、Forward+ を有効にし、静的バッチ処理をオフにします |
引き継ぎ
- 受け取り: scenario-unity-world-building からのブロックアウト(静的フラグ、ライトマップ UV をここで確認);scenario-unity-shaders からのシェーダー(DepthOnly、DepthNormals、Meta パス;ライトマップを使用する場合は LIGHTMAP_ON と SHADOWS_SHADOWMASK のバリアント);scenario-unity-performance および scenario-unity-mobile からの予算。
- 提供: ティア(JSON 仕様+読み戻し)、ティアプロファイル、レポート付きベイク、ステージシート、パス監査。scenario-unity-shaders には、スタイライズドシェーディングの概要(パレット、共有シェーダー、ライトマップ、シャドウマスク、APV をサンプリングする URP Unlit ターゲット上のランプ、低ティア向けの Simple Lit バリアント)と Render Graph パスを提供します。scenario-unity-performance には GRD ベンチマーク CSV と GPU に関する質問を提供します。scenario-unity-mobile には、Mobile ティア、グラフィックス API ごとの PSO トレース、熱負荷テスト、ベンダー GPU キャプチャ(Xcode、Android GPU Inspector、Arm Performance Studio、Snapdragon Profiler)を提供します。scenario-unity-pipeline-automation には CI 用の生のコマンドラインを提供します。2D Renderer ライトについては scenario-unity-2d を参照してください。
Unity 6.3 に関する注意事項
- Render Graph のみです。
_CLUSTER_LIGHT_LOOPが_FORWARD_PLUSに置き換わります。Render Graph Viewer はデバイスプレイヤーにアタッチできます。PassAuditはリフレクションで内部情報を読み取ります(移動した場合はavailable: false)。 - URP の露出は Fixed のみで、物理的な光量単位、SSR、ボリュメトリックはありません。HDRP はメンテナンスモードです。Built-in は 6.5 で非推奨になります。
- 機能表では Distance Shadowmask は「Forward レンダリングパスのみ」(MSAA も同様)とされていますが、6000.3.21f1 では Forward とまったく同様に Forward+ でもレンダリングされました(P13)。
- GPU ライトマッパーは Apple Silicon のみです。CPU ライトマッパーは 6.6 で非推奨になります。OptiX は 6.5 で非推奨になります。
- Bloom の
filter:Gaussian、Dual、Kawase(6.3 で追加)。GraphicsStateCollectionは実験的です。APVLeakReductionMode.ValidityBasedは廃止予定の別名で、ToString()は Performance と表示します。 - Dynamic batching は 6.5 で非推奨になります。STP は TAA を強制し、compute が必要で、GLES では使用できません。
参考資料
references/procedures.md:手順 P1~P16 のコピー可能なコード、それぞれのライブテストと結果。references/critique.md:キャプチャ、カード、ベイク、反射、グレード、ティア、帯域幅の評価基準。references/expert-notes.md:専門家ごとの原則、スタイライズドなレシピ、意見の相違、所見。references/gui-paths.md:同じ手順で使用するウィンドウとメニュー。references/sources.md:ソース、認証情報、タイムスタンプ、ベースラインの不足箇所、改訂履歴。scripts/ut_lighting.py、scripts/AgentKit/Lighting/*.cs、scripts/Runtime/*.cs(プレイヤーヘルパー:検証ビルドのみ)。