mcpField
S
scenario-unity-rendering-lighting

scenario-unity-rendering-lighting

github.com/scenario-labs创意与媒体1.2k266 次安装1 天前更新
代码仓库

关于 scenario-unity-rendering-lighting

面向图形技术美术的 Unity 渲染与照明技能,围绕 Unity 6.3 上的 URP 17.3 提供可测量的工作流。它通过脚本和可重复的质量门槛指导曝光、照明、烘焙、调色与性能检查。

主要功能

  1. 01URP 管线与质量层级配置
  2. 02使用参考卡校准曝光和照明
  3. 03照明烘焙审计与预算检查
  4. 04反射探针和漏光诊断
  5. 05渲染通道与性能测量

适用场景

  1. 01为不同设备设置图形质量层级
  2. 02先校准曝光再调整灯光
  3. 03检查烘焙照明与反射问题
  4. 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.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
ut_lighting.py
scripts/AgentKit/Lighting/
LightingAudit.cs
LightingBake.cs
LightingCapture.cs
LightingPipeline.cs
LightingPost.cs
LightingScenes.cs
LightingUtil.cs
scripts/Runtime/
AgentPlayerCapture.cs
AgentPSOWarmup.cs

详细介绍

渲染与光照(轻量化 / 图形技术美术)

Unity 中的专业光照是一套有度量的循环:先校准曝光,再以锚点为准布光、烘焙、调色;在追求审美之前,先用数字(灰卡、过曝、烘焙内存、原生 Pass)从同一组相机书签评估每个阶段。本技能通过代码驱动 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 陷阱)。

核心立场(专家的关键差异)

  1. 先曝光,后布光(Pierre Yves Donzallaz,yqCHiZrgKzs [00:20:21])。URP 6.3 只有 固定曝光:每个区域设置一个 Post Exposure,根据 18% 灰卡解算灯光(未辅助的 太阳读数为 2.0,在没有色调映射器时为 +1.03 EV;在 Neutral 下,解算后的读数为 0.98,即 +0.16 EV)。
  2. 烘焙后变灰是预期现象;应在早期选定的色调映射器下通过后期处理修正(Kyle Banks, 1agSNKuAfTM [00:04:58];PYD [01:01:29]):Lookdev 使用 Neutral;对比度、饱和度、 Shadows Midtones Highlights 推得过头后,再调回来。ACES 会使画面变暗(K3-wPnhmDi4 [00:54:50];实测 -1.4 EV):在它的设置下重新解算曝光。
  3. 先调阴影距离,再调分辨率(6.3 Manual;HCXCmHgV7Sk [00:15:32]):10 m 范围内的 1024 分辨率,胜过 40 m 范围内的 2048 分辨率。Max Distance = 玩家能看到的最远动态 阴影;最后一个级联应在最后一个投射体处结束。带软阴影的风格化房间中,1024 是最佳 选择;更高分辨率看起来“过于锐利”(URP 电子书)。
  4. 实际渲染所用的是 Quality 级别的资源,后期处理也一样(URPS [00:03:14], [00:30:06])。编辑前先确认并报告。Unity 6 会按参数叠加 Graphics 默认配置文件、当前 URP 资源的配置文件,然后是场景 Volume;依赖质量层级的后期效果(Bloom 成本、DoF、 APV 漏光减弱)应放在各层级的资源配置文件中,绝不能放进场景 Volume,因为后者会在 所有层级中生效(实测)。模板中的两个资源共用一个配置文件,并使用 Neutral 色调映射器。
  5. 烘焙不会移动的内容;按成本拆分设置(Ciro Continisio,hMnetI4-dNY [00:35:51]): 像素密度、最大尺寸、方向模式和 Shadowmask 会占用内存;采样数和反弹次数只影响烘焙 时间。小道具应保留 Contribute GI,并将 Receive GI 设为 Light Probes([00:48:30])。 一个 Shadowmask 纹素可容纳 4 个投射阴影的 Mixed 灯光(6.3 Manual)。Lightmap 的采样 成本比 APV 低 3 到 4 倍,但占用 3 倍内存(APV24 IpVuIZYFRg4 frame 00:23:43):手机 平台的静态几何体应使用 Lightmap。
  6. 天空是室内的默认光源(PYD22 DlxuvvYZO4Q [00:08:17];U25 [00:45:56])。没有 烘焙 GI 和局部 Box Probe 时,室内与光滑表面会受到天空光照影响(一张 Smoothness 为 0.3 的桌子会呈灰蓝色,直到添加 Probe 才恢复正常)。
  7. 风格化是制作选择,不是滤镜(Kyle Banks [00:22:04] 至 [00:23:06]):一张调色板 纹理、三平面世界空间噪声、一个共享着色器(对 3 张纹理进行 7 次采样,在 Switch 上 没问题);低配层级使用 Simple Lit(URP 电子书);Subtractive 是成本最低的混合模式 (TRB)。卡通着色器仍必须采样 Lightmap、Shadowmask 和 Probes,否则烘焙结果会消失; 6.3 中需基于 URP Unlit 目标构建自定义光照(差异章节第 5 节)。
  8. 在平铺式 GPU 上,带宽就是预算;务必验证(6.3 Manual;U25 [00:30:26];Ryan Keeble, bl0vKZkzNOs [00:14:30]):使用 Forward;除非确有需要,否则不要使用深度纹理或不透明 纹理(将复制操作放在 After Transparents);不使用软阴影;MSAA 设为 2x。在 Quest 2 级别的 GPU 上,每增加一个全屏 Pass,耗时 1 到 2 ms。PassAudit 会读取 Render Graph 的原生 Pass:在 After Opaques 阶段复制深度或使用 Opaque Texture,都会拆分不透明物体、 天空盒和透明物体的 Pass(实测)。

首先确认

只询问一次:平台和设备档位(计算能力或 GLES);帧预算(移动端按 65% 计算);一句情绪描述(KB [00:03:25])、参考素材、风格化还是写实;一天中的时间;哪些内容会移动;室内场景;自定义着色器;烘焙内存预算。

决策默认值何时更改
渲染管线URP 17.3仅当 PC/主机需要其独有功能时使用 HDRP;不用于新功能、移动端、Web 或 Switch 1 (rps)
PC 档位Forward+、深度纹理、MSAA 4x、HDR 32-bit、2048 阴影(覆盖 60 m,分为 2 个级联)、软阴影 Medium、附加阴影、Distance Shadowmask(已在 Forward+ 上验证)、当绘制调用受 CPU 限制时启用 GPU Resident Drawer设备测试
移动端档位Forward,不使用深度/不透明纹理(不透明纹理也会在没有 StoreAndResolve 时静默禁用 MSAA)、MSAA 2x、渲染比例 0.85、1024 阴影(覆盖 30 m)、1 个级联、关闭软阴影、不使用附加阴影、Shadowmask 模式、偏差 0.1 / 0.5(模板中的 1 / 1 泄漏了)设备范围较广时:通过 copy_from 添加低端档位(Simple Lit、不使用实时阴影)[已添加]
各档位后期处理一个 Grading Mode (HDR) 和各处使用 LUT 32;移动端配置文件:bloom Kawase 或 Dual (6.3)、不使用 HQ filtering、Half 或 Quarter、最多 5 次迭代、不使用 DoF、不使用 SSAO、Leak Reduction Performance;PC:SSAO Downsample、Leak Reduction Quality美术方向
全局光照静态几何体使用光照贴图,并搭配 Mixed sun(当手机档位会烘焙静态太阳阴影时使用 Shadowmask,否则使用 Baked Indirect);动态物体使用 APV;开放或布局会变化的场景:仅使用 APV低端风格化项目使用 Subtractive (CC [00:41:17]);一天中的不同时间使用 APV 场景或天空遮蔽
探针Adaptive Probe Volumes不支持计算时使用 Light Probe Groups,或需要移动探针时使用 (APV24 [00:08:31])
抗锯齿PC 使用 MSAA 4x 或 TAA/STP;移动端使用 MSAA 2x 或 FXAATAA/STP 绝不与 MSAA、堆叠或动态分辨率同时使用;GLES 上不使用 STP

工作流

对于任何会渲染或烘焙的操作,使用 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。

  1. 报告管线。 LightingPipeline.ReportPipeline:每个关卡的资源、渲染器、功能、资源配置文件、GRD 前置条件。GATE:每个关卡都有自己的资源。
  2. 将档位作为数据配置。 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 遮罩)。
  3. 书签和色卡。 AgentView_* 摄像机、灰色色卡(太阳光、阴影区、每个区域一张),室内放置一颗镀铬球;CaptureStage。GATE:L.stage_review 错误数为 0;色卡表已打开。
  4. 先确定曝光,再布置灯光。 Lookdev 体积(Neutral,固定 Post Exposure);太阳光 I * 2^-EV(card);其他灯光按比例设置;区域曝光体积的优先级设为 1。GATE:受阳光照射的色卡与目标曝光相差不超过半档;太阳光与阴影区最多相差 4 档[新增]。
  5. 烘焙。 先运行 LightingAudit.AuditLighting(贡献对象、光照贴图 UV、无法显示烘焙结果或参与烘焙的着色器、Shadowmask 重叠、style: "stylized" 规则),再运行 LightingBake.Bake 生成预览,最后生成最终结果。使用阴影遮罩范围场景(P13)验证每个档位实际渲染时的 Lighting Mode。GATE:烘焙报告符合预算、无 UV 警告、审计错误数为 0。
  6. 反射和漏光。 每个区域放置 Box 探针(重要性设为 2,混合距离设为 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)。
  7. 调色。 在场景体积中确定最终效果,在档位配置文件中填写成本字段,并重新求解曝光。GATE:饱和度和对比度高于烘焙阶段,裁切比例不超过 5%,色卡处于范围内。
  8. 测量。 使用 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 texels/m2048 覆盖 40 m,与 1024 覆盖 10 m6.3 Manual
聚光灯 1、点光源 6、最多 16 张贴图附加光源阴影图集6.3 Manual
256 个采样;每个纹素 4 盏灯降噪器下限;阴影遮罩通道6.3 Manual
背景 0.2,游戏区域 1Scale In LightmapCC [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移动端阳光漏光:模板偏差,0.1 / 0.5、Shadowmask、Subtractive实测
1.33 与 0.67 MB室内光照贴图集,Shadowmask 与 Subtractive(512 x 512)实测
约 2,450 到 22 到 38 次绘制调用;主线程 / 3900 个立方体,GRD 关闭与开启,编辑器播放模式实测
6 / 8 / 7 个原生通道移动端:关闭深度 / 在不透明物体之后复制 / 在透明物体之后实测
14 个 PSO,在 5 帧内预热室外场景,Metal 开发版播放器,每帧 3 个实测
每个全屏通道 1 到 2 msQuest 2 级别的平铺渲染器RK [00:14:30]

质量门槛

  • 可测量: 新进程分层读取结果不匹配数为 0;ReportPipeline 和 AuditLighting 错误数为 0; 烘焙时间不超预算;最终色调映射器下的色卡处于范围内;高光剪裁最多 5%,暗部压死 最多 30%;室内的铬球不呈天蓝色;分层承诺提供远处阴影时,远处阴影必须存在 (P13);手机上不透明物体、天空盒和透明物体使用一个原生通道;将 budget_check 作为趋势指标。
  • 视觉: 每个阶段后检查舞台表;阴影清晰,无阴影痤疮或接缝;接合处无漏光;无天空色偏;情绪描述句能准确描述画面;移动端呈现的图像与其他平台一致 (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
同一表面上有超过 4 个带阴影的 Mixed 灯光多出的灯光被冻结为完全烘焙使用 light.shadowmask_overlap;将多出的灯光设为 Baked 或 Realtime
在光照贴图几何体上使用 Toon 或自定义着色器烘焙光照和阴影消失使用 light.shader_no_lightmap / no_shadowmask / no_meta;scenario-unity-shaders 会添加这些变体
在场景体积中按层级设置泛光Mobile 仍承担 PC 泛光开销仅在层级配置文件中设置开销字段
一个层级使用 LDR,另一个使用 HDR调色后各层级效果不一致使用统一的 Grading Mode(HDR)和 LUT 大小
APV 蒙版未启用 Use Rendering Layers该层级忽略蒙版在每个资源上启用 m_SupportsLightLayers
室内没有局部反射探针镀铬物体和木材反射天空每个区域设置一个盒式探针,importance 设为 2
启用 Depth Priming 并使用自定义着色器关闭 MSAA 后物体消失添加 DepthOnly 和 DepthNormals 通道,或将 priming 设为 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。

参考资料

评论

支持 Markdown