关于 scenario-unreal-lighting-rendering
面向 Unreal 场景艺术师的灯光与渲染技能,覆盖曝光校准、物理光照、Lumen、MegaLights 和静帧输出。它通过表示视图、数值检查和逐镜头评审来定位噪点与画面问题。
主要功能
- 01校准相机曝光与光照
- 02规划灯具、霓虹灯和窗户补光
- 03检查 Lumen、MegaLights 与阴影
- 04按镜头记录并评审画面
- 05准备路径追踪静帧并比较结果
适用场景
- 01为室内外场景设定曝光与照明
- 02定位 Lumen 或 MegaLights 噪点
- 03检查场景代理与最终照明是否一致
- 04制作并核验路径追踪静帧
MCP 相关
可通过 Epic 的 MCP server 或 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 的阳光看起来一样。将灰球放在主体处,将 Exposure Compensation 设为 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 [验证节点] 将增强幅度设为 5 到 10,仅对 Lumen 生效(Campbell BKaAzhMHJZ0 [00:14:09]);路径追踪器会忽略该开关,因此灯管及其灯光会被重复计算(路径追踪器文档)。 - 渲染器看到的是代理;要检查它。 将 Lumen Scene 和 Surface Cache 与同一台相机下的已照明视图对照(黑色 = 仅屏幕追踪,粉色 = 没有卡片,常见于仅由一个网格构成的房间);还要检查 MegaLights 阴影投射体不匹配及 VSM 缓存页面(Faucher [00:07:21] [00:06:42];Lumen、MegaLights、VSM 文档)。
- MegaLights 的噪点来自被占用的采样,而不是灯光数量。 隐藏的灯光会占用最多 20% 的采样(重投影失败后占 50%),方向光最多占 50%。缩小半径、使用聚光锥和挡光板、避免灯光置于几何体内部、合并集群,并让太阳光使用延迟渲染加 VSM(Narkowicz 和 Costa dmmN8_c8Tb0 [00:10:37] [00:16:40])。默认情况下,光线追踪会忽略 Alpha 遮罩 (MegaLights 文档)。
- 阴影方法应根据运动情况选择。 游戏运行期间,局部灯光保持光线追踪:每个穿过 VSM 局部灯光的角色都会使其页面失效,而光线追踪按可见像素计费,并且半影不额外耗费成本(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]);然后按顺序调整:直射光、单盏灯的间接光增强、Diffuse Color Boost,最后才调全局曝光(Faucher 0GYyHDuaPcg [00:08:14] [00:13:42])。光泽表面需要直射光:Lumen 的间接光几乎不产生镜面反射(Faucher [00:10:28])。
- 静帧渲染以路径追踪器为准,采样数是唯一的质量调节项。 在延迟渲染路径中,增加采样数只会改善运动模糊和抗锯齿;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,支持路径追踪(差异见文件) |
| 交付物 | 曝光模式、静帧方案 | 游戏玩法加一张静帧;直接交付(色调映射后的 PNG 加 EXR) |
| 玩家会经过的环境条件 | EV100 档位 | CONDITIONS:室内 4、蓝调时刻 6.5 [新增]、低角度阳光 7、月光 1 |
| 风格 | 写实与艺术化处理的月光和阳光 | 以写实为基础;仅为提升可读性,采用电影感月光和 15 度太阳高度下限(Faucher;Oakley rX0wZZxpB-U [00:19:16]) |
| 关键摄像机;画面中的玻璃和自发光灯具 | 雾散射、取巧处理、玻璃和重复计数审查 | 使用需求简报中的书签;仅在英雄玻璃周围的 PPV 中启用前景图层 |
工作流
通过 Epic 的 MCP 服务或 ue_remote 使用 Editor Python;import ue_light as L;完整代码见
references/procedures.md。截图是潜在的:每次调用捕获一张。
- 探测和设置(P0、P1)。
probe()、render_settings_report,备份后再运行ini_patch; 仅在新项目中使用扩展亮度范围。门槛:已读取探测 JSON。 - 校准摄像机(P2)。 在主体处运行
spawn_calibrator,然后创建一个未绑定的PPV_Global:apply_exposure(ppv, exposure_plan("gameplay", ("interior", "blue_hour")))、apply_look(使用 Lumen GI 时必须启用 Local Exposure;仅在此处使用 Film)。门槛: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。门槛:scene_lint无问题;太阳不在 MegaLights 中。 - 实用灯、霓虹灯、开口(P4、P5)。 使用
FIXTURES设置流明和色温,半径由tight_attenuation_radius确定且不超过房间范围,光源半径、长度或大小与灯具匹配,每个搁架放置一个矩形灯,每个标牌前放置一个neon_sign_light,窗户处放置opening_rect_light;通过emissive_for_stops设置发光值,再运行emissive_strategy(Emissive Light Source,可选增强)。门槛:在 gameplay 配置中,light_lint无警告(灯具、形状、VSM、集群),或提供书面说明。 - 渲染器能看到吗(P7 至 P9)。 检查 Lumen 视图与 lit 视图;在粉色视图中运行
room_shell_lint; 查看 MegaLights 转储和不匹配视图;检查遮罩投射体;检查 VSM 缓存页面。门槛:需要反弹光的区域没有黑色或粉色;转储中没有隐藏光源;VSM 红色占比接近 0;在运动中评估噪声。 - 视觉效果(P10)。 先塑造环境光,再确定焦点色调,然后营造“还有更多内容”的暗示:光线延伸出画面、点亮一条侧街(Oakley [00:07:34] [00:09:19] [00:08:44]);按顺序调整阴影提亮阶梯;最后调整色彩分级;通过 A/B 截图确定白平衡方向。门槛:
frame_report达到 B3 至 B8。 - 评审循环(P11、P12)。 每个书签执行:
log_mark、捕获、frame_report(frame, brief, log_text=log_since(...)),进行一次更改,并记录到iterations.jsonl。5.8 曝光范围警告会导致帧不合格;高光区域必须保留高光;沿玩家路径行走以检查适应效果。计时使用 P12 的测量预设(异步计算,关闭动态分辨率),并提交至 scenario-unreal-performance。门槛:无失败项。 - 静帧(P13)。 先进行场景审计:通过
albedo_check检查 Base Color 缓冲区; 检查emissive_fixture_pairs(A/Br.PathTracing.EnableEmissive 0,关闭 Indirect Emissive), 检查glass_lint。然后运行still_plan("path_traced", "final", glass=True, sky_atmosphere_visible=True, emissive_fixtures=...), 确认mrg_lint无问题,运行set_cine_camera_exposure(Manual 测光,启用 Apply Physical Camera Exposure), 再运行queue_mrg_still。仅用于静帧的作弊设置通过still_only_light_plan配置在独立的照明通道上。 离线检查:线性 EXR 中的灰卡曝光偏差不超过 1/3 档;运行compare_ground_truth,检查 100 percent 裁剪图; 如果渲染结果与视口不同,则按RENDER_DIFF_TRIAGE排查。门槛:达到 critique.md 中的 C1 至 C11。 - 交接(P14)。
lighting_manifest(path, ctx):灯光、PPV、lint、作弊设置、发光配对、遮罩投射体、cvars。
数值
| 项目 | 数值 | 相对参照,来源 |
|---|---|---|
| 太阳、月亮 | 天顶处(0.545 degrees)为 120,000 lux;月光为 0.26 lux | Epic 天空文档 |
| 观察目标(EV100) | 日照 14、多云 10、低角度阳光 7、室内 4、月光 1、无月光 -2 | Gobey 图表 [00:12:02];这些是目标值,不是测光读数 |
| 灯具 | 蜡烛 12 lm、1,900 K;装饰灯 300;室内灯 1,000;室外灯 10,000;街灯 2,500 至 10,000 lm | Gobey 图表;Argyriou [00:13:36] |
| 单位 | 1 cd = 625 无量纲 = 12.6 lm(点光源)= 3.14 lm(矩形光源)= 1.76 lm(聚光灯,44 degrees) | 曝光文档 |
| 曝光 | EV100 = log2(N^2 / t x 100 / ISO);B = L / 2^(EV100 + comp);f/2.8、1/50、ISO 800 的 EV100 为 5.6 | 曝光文档 |
| 自动曝光 | 低限 70 至 80%,高限 80 至 95%;Speed Up 3,高于 Speed Down 1 | 曝光文档;Gobey 画面 [00:21:52] |
| 局部曝光、胶片 | 对比度 0.6 至 1(默认值 0.8);Toe 默认值 0.55,暗室内场景使用 0.3 | 曝光文档;Gobey |
| 反照率 | 0.02 [added] 至路径追踪的 0.8,Lumen 为 0.9 | 路径追踪器文档;Faucher 1e6oOiKh91U [00:13:35] |
| MegaLights | 20 percent 的采样用于隐藏灯光(重投影失败后为 50);太阳最高 50 | SIGGRAPH [00:10:37] [00:16:40] |
| 路径追踪静帧 | 1 个时间采样;空间采样草稿为 256,最终为 1024 或更高;玻璃 10 次反弹;Max Path Intensity 默认值 | 路径追踪器文档;Faucher X5zVhc5ahl0 [00:16:47] |
| 延迟渲染静帧 | 仅空间采样,奇数值(草稿 9、最终 15、明亮细节 31);AA 高于 8 时设为 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的偏差不得超过一档曝光;在 VSM 缓存视图上运行red_fraction; 在预热期间运行temporal_flicker。标记为 [added] 的阈值需基于每个项目的一帧获批画面进行校准。 - 视觉: 每个书签都要以全尺寸查看,并作为缩略图与其表现视图并排查看;移动摄像机检查噪点;
检查内角是否漏光;检查镜面高光;以 100 percent 查看静帧;按照
references/critique.md中的顺序进行。
常见错误
| 错误 | 表现 | 修正 |
|---|---|---|
| 在默认自动曝光下布光 | 任何数值“看起来都不错”;画面闪烁 | exposure_plan,先将补偿设为 0,再布置实体灯光 |
| 霓虹灯仅靠自发光照亮 | GI 斑驳、闪烁 | 每个招牌配一盏矩形灯;Emissive Light Source |
| 路径追踪静帧中,灯管和对应灯光同时存在 | 灯具亮度是 Lumen 下的两倍 | A/B 测试 r.PathTracing.EnableEmissive 0;关闭 Indirect Emissive |
| 为照亮一扇小窗而提高天空光或曝光 | 斑驳、室内呈平坦的灰色 | 使用尺寸与开口相符的 opening_rect_light |
| 在 MegaLights 下使用许多小灯、大半径,以及室内太阳光 | 运动时出现噪点和残影 | 收紧范围、合并光源组,太阳光使用 VSM |
| 在 VSM 下对移动角色使用局部灯光 | 持续失效、开销激增 | 使用光线追踪阴影;只有确有需要时才使用 VSM |
| 在 MegaLights 下使用格栅或植物 | 离开屏幕后阴影变成实心 | 建模出孔洞,或将 EvaluateMaterialMode 设为 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 下此设置不起作用 |
| 渲染结果与视口不同,且复制粘贴了 cvars | “渲染坏了” | RENDER_DIFF_TRIAGE:先检查 Global Game Overrides |
| 仅用于静帧的轮廓光留在关卡中 | 欺骗性灯光影响了游戏过程 | 使用独立的 Lighting Channel,将间接光设为 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 已可用于正式制作(灯光通道、云层阴影、不匹配视图);除非设置
r.MegaLights.DirectionalLights 1,否则会排除方向光;r.MegaLights.Debug、r.MegaLights.DownsampleMode。 - Lumen Lite 可在 Medium 使用(Beta);SSGI 已弃用;RTGI 自 5.4 起移除;细节追踪已弃用;
r.Lumen.HeightFog 1为默认值。 r.EyeAdaptation.CachedLightingPreExposure(默认值为 4)统一预曝光,并会在曝光超出支持范围时显示屏幕警告。- ACES 2.0 是 SDR 路径;OCIO 2.5.1;调色示波器为
ShowFlag.VisualizeColorGrading。 - Mac 上支持路径追踪器(macOS 26.4+);始终启用背面剔除;HDRIBackdrop 不兼容;Reference Atmosphere 会忽略 Sky Lights。
- Movie Render Graph 已可用于正式制作:默认使用 Basic 配置、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:供计算机操作 Agent 或人工使用的菜单和编辑器路径。references/sources.md:所有来源、凭据、URL、最佳时间戳和修订历史。scripts/ue_light.py:工具包;其文档字符串列出了所有调用及其运行位置。