关于 scenario-unreal-cinematics
面向 Unreal Engine 5.8 影视制作的技能,服务于使用 Sequencer 和 Movie Render Graph 的创作与技术团队。它将剪辑规划、镜头构建、渲染审计和 EXR 交付纳入可检查的流程。
主要功能
- 01以数据规划镜头和剪辑结构
- 02按统一模板构建 Sequencer 镜头
- 03检查预卷、画面与剪辑连续性
- 04按镜头组织 Movie Render Graph 渲染
- 05审计 EXR 输出并生成交付说明
适用场景
- 01在动画制作前检查剪辑节奏和镜头计划
- 02按镜头制作并审核灯光与画面
- 03为最终渲染配置 EXR 和色彩流程
- 04在渲染后整理剪辑表与交付文件
MCP 相关
工作流建议先检查 MCP SequencerTools 工具集;MCP 或 PythonRemote 可用于编辑器中的工作。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-unreal-cinematics安装后在 Claude Code 中输入/scenario-unreal-cinematics确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/cine_render_callbacks.pyue_cine.py详细介绍
Unreal Engine 5.8 中的电影制作(Sequencer 和 Movie Render Graph)
此处的专家级水准意味着:在构建任何内容之前,先将剪辑作为数据进行检查;评判渲染时看的是文件和帧,而不是视口。核心原则:离线规划,在一次事务中完成构建,在动画制作前根据音乐锁定时序,依据已批准的母版布光,通过一个模板图表按镜头渲染,并将线性 EXR、剪辑和色彩说明交给调色。如果此处提到的同级技能不在你可用的技能中,请用户安装该技能
(npx skills add scenario-labs/skills --skill <name>);若是在无人值守的情况下,请依据工具架构继续操作,并标明这一缺口。
必备背景: scenario-unreal-expert(通道、审核流程、5.8 陷阱)。
状态(2026-09-24): scripts/ue_cine.py 和
scripts/cine_render_callbacks.py 尚未在
Unreal 中运行;离线测试已通过(计数见:references/sources.md)。在引擎中,先运行 tests/code/unreal-cinematics/job_00_probe_cine.py。
立场(专家的独到见解)
- 主序列负责剪辑;镜头负责内容。 摄影机、角色和关键帧都放在镜头中;各专业的子序列(灯光、特效)也置于镜头内,因此调整节奏时移动的是片段,而不是动画(Sir Wade,ywtvn1uncZo [00:07:32];Glitch,uzTo5vQchkk [00:35:24])。每个镜头专属的对象是生成型对象,场景则是可占有对象,因此电影序列能在任意关卡中播放(yOcgYMcxr3Q [00:07:53] [00:13:50]);在一个镜头中动画化的可占有对象会在镜头结束后复位;大纲视图中的可见性不会保存,关卡面板中的可见性则会保存([00:10:34] [00:02:23])。复制主序列会共享镜头:“有人调整了灯光,七个镜头都会受影响”(Epic CAT,S4Iyzbl-oaE [00:41:34]);要尝试不同方案,请使用 New Take。
- 结构由模板和脚本定义,绝不靠点击拼凑。 显示帧率、起始帧、偏移量、命名和文件夹模板只需在版本控制下的
DefaultEngine.ini中设置一次(S4Iyzbl-oaE [00:15:22] [00:21:52]);CAT 5.8 架构支持嵌套,也可以为每个镜头分配自己的关卡(VP 5SJA1FfRPWs [00:19:07] [00:20:44])。每个工具都要用一个ScopedEditorTransaction包裹一个ScopedSlowTask,因为“运行时间较长的 Python 代码看起来很像引擎冻结了”(SPI,moQTQzAOFVA [00:16:16])。 - 动画制作前先锁定时序。 用恒定关键帧制作分镜,音乐放在独立轨道上,音效强调点要精准落在剪辑点上;“你不想把时间花在最终影片中永远不会出现的帧上”(Toonen,mAMp6qCt7kc [00:15:04] [00:15:36] [00:04:55])。重新定时必须保留原有意图:关键帧随镜头移动,跨越多个镜头的子序列则要拆分,并为每一段创建独立资源(moQTQzAOFVA [00:14:04] [00:24:19])。
- 预热只需处理三项,结束帧不包含在范围内。 CPU 空闲时进行模拟:将 Engine Warm Up Count 设为 30 以上;需要时间历史时:使用 Render Warm Up;第 1 帧就有运动时:在起始帧之前延长动画和摄影机切换,并进行摄影机切换预热,以便计算前置帧,而不是停留在第 1 帧(技巧文档;Comly/Hoffman,《demystifying MRQ》)。范围 0 到 50 会渲染 0 到 49。
- 采样只提升动态模糊和抗锯齿,不会带来其他效果。 噪点要从源头处理(《demystifying MRQ》;Faucher,fVg5ihB8Wdc [00:09:15])。仅使用时间采样,搭配 Frame Center 时使用奇数采样数;或搭配 Frame Close 时使用 Blur 的 24/48/64(AAAhD5tEUBs [00:39:32]);采样数超过 8 时将 AA 设为 None;除非某个命名镜头有特定问题需要解决,否则不要设置控制台变量(fVg5ihB8Wdc [00:03:00])。
- 以线性 EXR 在外部调色,并说明如何解读。 关闭色调曲线会得到线性 sRGB,其亮度比视口约低一档,因为 UE 的色调曲线“带有 ACES 风格,但并非真正的 ACES”(Faucher,2Q3CybANHKE [00:04:31] [00:09:39])。在 Resolve 中使用 ACES Transform:开启色调曲线时,选择 sRGB (Linear) 到 sRGB Texture;关闭时,选择 Linear sRGB 到 sRGB;若供应商要求,则使用 ACEScg 到 sRGB([00:08:30] [00:09:05])。通过视口的 OCIO Display 进行打光和审片,并将其设为对应视图([00:10:28] [00:11:00])。
- 镜头是渲染的基本单位。 “Unreal Engine 中最小的可分发工作单位是单个摄影机切换”(MRQ 命令行文档):每个镜头一个任务、一个模板图表、每个任务单独覆盖变量,绝不修改共享图表。普通 MRQ 需要人工看管,崩溃会导致镜头丢失,因此无人值守的多镜头渲染应交由农场管理器处理(Glitch [00:40:14])。
- 通过流程让灯光制作规模化。 从第一天起就使用临时摄影机灯光;然后为每种灯光场景选择一两个代表性镜头,与导演一起锁定;接着从这些镜头派生每个镜头的
_LGT子序列,并根据它们与主镜头的差异进行调整(Glitch [00:27:18] [00:28:51] [00:29:23] [00:31:32] [00:36:59])。
先确定事项
| 输入 | 变更 | 未说明时的默认值 |
|---|---|---|
| 交付:调色或直出 | 色调曲线、格式、OCIO、色彩说明 | 调色:EXR 16-bit half,关闭色调曲线 |
| 制作记录(帧率、起始帧、偏移、命名) | 每个序列、EDL | 项目的 DefaultEngine.ini;否则为 24 fps,起始帧为 0(SPI 101、CAT demo 1000:与剪辑保持一致) |
| 时长、镜头、音乐 | 布局、提示音 | 创意简报;分镜前先准备一条临时音轨 |
| 画幅和胶片后背 | 镜头、构图 | 16:9 Digital Film[核实 mm];宽银幕使用 2.39 裁切 |
| 关卡和现有内容 | 绑定 | 设置为可占有;摄像机、角色、镜头灯光设为可生成;主灯光放在关卡中 |
| 演员 | 预滚、成本 | 使用现有的 Animation Sequences;每个角色对应的关节和网格 |
| 每个镜头的运动、快门时序 | 采样、预滚 | Frame Center,使用奇数计数 |
| 曝光 | 连贯性 | 手动曝光、物理摄像机;通过 ISO 补偿光圈变化 |
| 渠道 | 构建、分镜、渲染 | 分镜使用实时编辑器(MCP、PythonRemote);最终输出使用 ue_run 或命令行 |
工作流
import ue_cine as C(技能 scripts/,并将 scenario-unreal-expert 的 scripts/ 加入路径)。完整代码:references/procedures.md。
- 搭建基础(每个项目一次)。 生产默认设置只需记录一次(CAT Production Setup 或 Project Settings),并复制到
plan["production"];文件夹模板;镜头按 10 递增编号;使用 CAT 5.8 时,镜头架构包含_LGT架构;镜头需要独立场景状态时,每个镜头使用一个关卡(P2)。先检查 MCP SequencerTools 工具集 [verify]。GATE:C.check_production(plan)无失败;检查audit_sequence的 seq.rate 和 seq.start。 - 将剪辑规划为数据(python3)。 镜头、景别、镜头、摄影机和主体位置、运动、标志、演员阵容(关节、网格体)、转场音效、灯光场景。
C.check_plan(plan):时长、镜头、构图、180 度轴线、屏幕方向、跳切、景深、预滚、曝光、演员阵容、转场音效、灯光组(P1)。GATE:无失败;每条警告都已修复或在计划中作出回应。 - 在一个事务中构建(编辑器)。
C.build_from_plan(plan):包含 Shots 和音乐的主序列;每个镜头一个可生成的 Cine Camera(镜头参数设为关键帧,开启 Use Field of View for LOD);摄影机剪辑从预滚开始,到不包含终点的结束位置;演员预滚;带临时灯光的<shot>_LGT(P3);绝不覆盖。GATE:C.audit_sequence无失败;bind.override已作出回应;C.empty_level_test仅列出场景物件。 - 分镜并锁定剪辑(延迟编辑器)。
C.board_generator(..., preroll=True):每个镜头的首帧、中间帧、末帧,以及单独读取的每个镜头的首个预滚帧(GUI:Evaluate Sub Sequences In Isolation);ue_review.image_checks、接触表(P4)。调整时长(C.retime_shot)、拍摄条目(C.new_take),在C.editor_tool中使用自有工具(P5)。GATE:没有全白或全黑帧;评估接触表和配乐剪辑;C.ready_to_animate(plan)通过。 - 打磨表演和摄影机。 将拉焦设为关键帧 Manual Focus Distance(P6),摄影机运动采用基础层加偏移层再加抖动层(P7);仅在景深为核心的镜头中使用 Accumulation DOF。GATE:重新生成分镜;关键帧焦点等于主体距离;段落边界处没有跳变。
- 灯光(配合 scenario-unreal-lighting-rendering)。 临时灯光渲染可让所有人继续工作;执行
C.lighting_masters(plan),仅渲染这些镜头(render_jobs(plan, only=...)),将导演批准结果写入plan["lighting_approved"];然后在_LGT中为每个镜头添加轮廓光和补光,并通过视口 OCIO Display 检查灯光效果(P7b)。GATE:C.ready_for_final_lighting(plan);亮度连续性符合要求,并已依据主样片获得批准;若镜头渲染缓慢,检查stat unit或 Insights 跟踪记录。 - 渲染草稿并审阅。 使用审阅图表或 5.8 Basic 配置;配上音乐运行
C.review_movie_cmd(P10)。GATE:依次运行C.check_render_output、C.first_frame_pop、C.cut_flash,然后带声音观看。 - 最终 EXR。 使用 P8 的模板图表和
CineWrittenFilesExecute Script(仅限编辑器);运行C.audit_render_settings(C.normalize_graph_snapshot(C.graph_snapshot(graph)));运行C.render_jobs(plan, sequences=C.active_shot_paths(master, plan))、C.render_orchestration,然后运行C.render_generator(全局持有执行器)或按镜头运行C.mrq_command_line(始终使用-notexturestreaming)(P9)。GATE:设置审计通过;对抽样帧运行C.check_manifest、C.exr_checks;发生崩溃后,整段重新渲染C.shots_to_render(...)所列镜头。 - 交付。 每个镜头的 EXR、
C.edl(plan)、审阅用 MP4、C.delivery_note(plan, settings)(Resolve 解释)、JSON 报告;技术意见与创意意见分开,进行三轮创意修改,然后安排现场会议(Glitch [00:32:37] [00:33:40])(P11)。
数值
| 项目 | 数值 | 相对于,来源 |
|---|---|---|
| 层级偏置 | 根节点为 0,每级增加 100,相同数值会混合 | 镜头文档 |
| 预滚动 | 布料、头发、运动中的粒子需预留 24 到 48 帧 | 摘要;技巧文档 |
| 引擎预热,静止布料 | 超过 30 帧 | 技巧文档 |
| 时间采样 | 帧间闭合:基础值为 24(占 Blur 镜头的 95%),快速运动为 48,非常快速运动为 64;帧中心:奇数(15、25、49、65;Faucher:15 到 31 可覆盖 95% 到 98%) | AAAhD5tEUBs [00:39:32] [00:40:05];fVg5ihB8Wdc [00:06:01] [00:10:58] |
| 抗锯齿方法 | 总采样数超过 8 时不使用 | MRG 图像质量文档 |
| 预热采样 | 仅对预热阶段的最后 5 帧进行采样 | 5.6 和 5.8 说明 |
| 线性视图与视口 | 暗约 1 档 | 2Q3CybANHKE [00:09:39] |
| 审片 MP4 视频比特率 | fps x 2 x 1000 kb/s(24 fps 时为 48,000) | 2Q3CybANHKE [00:22:54] |
| 角色 | 少于 200 个关节 | Glitch [00:05:33] |
| 主灯光 | 每集 400 个镜头配置 10 到 13 组,每组耗时 1 到 2 天 | Glitch [00:28:51] |
质量关卡
- 可测量:
check_plan、ready_to_animate、ready_for_final_lighting和audit_sequence均须通过;audit_render_settings须通过,且不得有未处理的警告;帧数使用不包含结束帧的计数方式(check_render_output、check_manifest);EXR 为 half 格式,无 NaN 或 Inf,不得为黑帧,线性模式下明亮镜头的数值须高于 1.0,且元数据齐全;first_frame_pop和cut_flash均为 false;仅在预期位置出现亮度跳变。 - 视觉: 联系表、独立查看的预滚动帧、首帧、每个剪辑点、头发和遮挡物边缘的景深、最快速运动的运动模糊、通过调色的 OCIO 视图查看灯光与主光照的匹配情况,以及配乐下的剪辑点。
常见错误
| 错误 | 表现 | 修正 |
|---|---|---|
| 复制主场景以进行试验 | 更改泄漏到“备份”中 | 在镜头内创建新的 Take(new_take) |
| 将角色和摄像机设为可占有对象 | 在另一张地图中出错 | 使用生成对象;empty_level_test |
| 将布景作为可占有对象进行动画制作 | 镜头结束后它会跳回原位 | 在需要的位置添加关键帧,或使用生成对象(bind.override) |
| 使用 Outliner 的眼睛图标隐藏 Actor | 重新打开后又会出现 | 使用 Levels 面板或 Level Visibility 轨道 |
| 多个骨骼网格,共用一个动画轨道 | 部件不会跟随 | 设置 Leader Pose Component(check_characters) |
| Python 工具运行时间长,且无进度提示 | “冻结”的编辑器在写入途中被终止 | 使用 editor_tool |
| 尚未锁定时序就开始制作动画 | 在最终被剪掉的帧上浪费工作 | 使用分镜板、在剪辑点添加提示音,并运行 ready_to_animate |
| 对运行中的角色使用 Engine Warm Up | 布料在第一帧跳变 | 使用预滚动以及镜头剪辑预热 |
| 认为会包含最后一帧 | 0 到 50 帧中“缺少”第 50 帧 | 结束帧不包含在内;计数为 end - start |
| 通过增加采样数来减少噪点 | 耗时增加,噪点却没有变化 | 修正灯光或后期处理设置 |
| 使用 Frame Center 时采用偶数采样,混合时间采样和空间采样 | 画面跳变、浪费资源 | 仅使用奇数时间采样(或使用 Frame Close 时采样数设为 24) |
| 逐镜头布光,没有主场景 | 创意方向后期变更 | 先批准主场景 |
| 在默认视口中布光,却以线性空间渲染 | 画面观感会相差一档 | 使用视口 OCIO Display |
| 发送线性 EXR,却没有说明如何解读 | 在 Resolve 中画面偏暗、颜色异常 | 使用 delivery_note |
| 按镜头编辑共享图表 | 每个任务都会受到影响 | 为每个任务公开变量 |
| 使用本地队列过夜,或使用本地执行器 | 崩溃会导致队列丢失;渲染停止 | 使用农场管理器,或每个镜头运行一个进程;使用 shots_to_render 和 start_render |
无头渲染时未添加 -notexturestreaming | 第一批帧画面模糊 | 使用 mrq_command_line |
交接
- 接收自 scenario-unreal-lighting-rendering:已布光的关卡(天空、雾、主光、无界 PPV、曝光策略、作为子关卡或数据层的主照明)、源头已修复的噪点、供审批的已布光母版。自 scenario-unreal-animation:带有时长和帧率的 Animation Sequences、关节数少于 200 且多网格 Blueprint 上设置了 Set Leader Pose Component 的角色、布料或物理标记。自 scenario-unreal-vfx:带有用户参数和预热需求的 Niagara 系统。自 scenario-unreal-world-building:地图及其场景元素。
- 交付给剪辑师和调色师:每个镜头的 EXR(
{sequence_name}/{sequence_name}.####.exr,线性、半精度、元数据)、<prod>.edl、交付说明、审片 MP4、联系表、JSON 报告、母版。交付给 scenario-unreal-lighting-rendering:未通过连续性或噪点检查的镜头及对应帧。将渲染农场命令交给 scenario-unreal-pipeline-automation;将耗时较长的镜头交给 scenario-unreal-performance。
UE 5.8 说明
- MRG 已可用于生产,新功能仅支持图形界面;队列以 Basic 配置打开;新增:Light Modifier、图层预热、DWAA/DWAB EXR、Accumulation DOF(实验性插件)(5.8 说明;VP [00:33:35])。
- 在 MRG 中,Game Overrides 仅在连接时生效;渲染器节点上设置色调曲线,输出节点上设置 OCIO;Execute Script 节点需要启用 Editor Only 模式才能使用 Python(过渡文档;5.8 说明)。
- Spawnables 是自定义绑定;使用
LevelSequenceEditorSubsystem.add_spawnable_from_class创建;没有add_master_track;时间函数接受MovieSceneTimeUnit(seq-py 文档;版本差异)。 - 播放遵循所选范围;Sensor Aspect Ratio 不可设为动画;Take Recorder 和 VCam 接受 spawnables;使用 Sandboxes 进行实验。
- 搭配 ACES 2.0 的 OpenColorIO 2.5.1:视图名称可能与“ACES 1.0 SDR Video”不同[待验证]。
- Mac:MRG 的 H.264 节点仅适用于 Windows(使用 ffmpeg 编码);ProRes 在 Mac 上存在冲突[待验证];路径追踪需要 macOS 26.4+。
参考资料
references/procedures.md:P0 到 P11、完整代码、计划字段、模板图表规范(P8)。编写 Sequencer 或渲染代码前请先加载。references/expert-notes.md:各位专家的判断、时间戳、决策条件。references/critique.md:评估标准及其对应的代码检查。references/gui-paths.md:相应流程的菜单和设置。references/sources.md:来源、凭据、URL、时间戳;修订历史。scripts/ue_cine.py(工具包;其文档字符串列出了所有调用)和scripts/cine_render_callbacks.py(Execute Script 类)。