导语:「回响峡谷」开场过场第一次内部放映,九十秒里坐我旁边的关卡策划问了三次"现在看的是谁":镜头一从桥东拍两人对话,镜头二翻到桥西,观众脑子里的人物位置全跟着翻了个面。动画师委屈——每个镜头单看都挺好看。问题不在镜头,在没人管镜头与镜头之间的语法:景别跳了三档,轴线破了两回。这一章先把这门语法补上,再把它落到 Sequencer 的时间线、机位参数和"归还控制权"的工程管线里。
本章地图
mindmap
root((Sequencer 与镜头语言))
影视补课
景别阶梯
大远景到特写
每个景别一份叙事合同
180度轴线
正反打
破轴=清空观众的位置感
镜头运动六式
推拉摇移跟升降
Sequencer 时间线
轨道与关键帧
Master 与 Shot 子序列
Spawnable vs Possessable
摄像机性格
焦距与 FOV 公式
景深管注意力
手持 vs 固定
衔接 Gameplay
镜头混合状态机
归还控制权清单
可跳过=快进结算
QTE 克制
参与感三条件
智商税三症状
分镜实操
开场90秒十个镜头
三周排期与验收线15.1 补课·景别阶梯:每个景别都在签一份叙事合同
补课:本节补影视取景基础,程序出身必读,美术与影视出身可跳过。
景别(Shot Size)是导演和观众签的合同——"取景框大小"只是表象。这份合同上写着:这一秒,观众应该知道什么、感受什么,由景别看管。框得越大,合同上写的是"看环境、看关系";框得越小,合同上写的是"看脸、看情绪"。
标准阶梯七级,从大到小:
| 景别 | 画面内容 | 叙事职责 | 舒适时长 |
|---|---|---|---|
| 大远景(EWS) | 天地与人如蚁 | 交代世界规模、孤独感、史诗感 | 6–12s |
| 远景(LS) | 完整人形立于环境中 | 人物与环境的关系、行动方向 | 5–8s |
| 全景(FS) | 头顶到脚底 | 身份、服装、全身动作 | 4–6s |
| 中景(MS) | 腰以上 | 对话与动作的主力,信息效率最高 | 3–6s |
| 近景(MCU) | 胸以上 | 表情入场,情绪开始传染 | 2–5s |
| 特写(CU) | 整张脸,或一件道具 | 情绪峰值、关键信息 | 2–4s |
| 大特写(ECU) | 眼睛、手指、物件局部 | 潜意识细节,一场戏最多用一次 | 1–3s |
表格里"舒适时长"一列值得单独说。观众读一个镜头需要时间:特写里只有一张脸,两秒读完;大远景里有山、有镇、有一个人形小黑点,观众要先找到"该看哪",六秒起步。把大远景剪到三秒,观众还没定位到主角,镜头已经切走——节奏快只是表象。根因是信息没送达。
第二条经验:相邻镜头的景别跳档不超过两档。中景切特写,观众感到的是"情绪收紧";大远景直切大特写,观众感到的是惊吓——除非这一下惊吓正是剧本要的,否则就是剪辑事故。好莱坞对白戏几十年稳定在 MS、MCU、CU 三档之间循环。没创意?不——这三档的信息效率与情绪密度,刚好匹配对话节奏。
第三条:景别阶梯也是预算阶梯。大远景要布置整个场景的光与细节,特写只要一张脸和一块背景板。「回响峡谷」这种小团队项目,一场戏里大远景用一到两个封顶,把制作量集中在中近景,是理性分配。
15.2 补课·180 度轴线、正反打与镜头运动:破轴之后,观众瞬间迷路
补课:本节补场面调度基础。轴线规则违反一次,观众就要花两三秒重建脑内地图——这两三秒里,对白全漏听。
两个角色对话,他们之间有一条隐形的连线,叫动作轴线(Axis of Action);一个角色朝某方向跑,运动方向的延长线也是轴线。规则一句话:摄影机只允许在轴线的一侧活动,那一侧是一个 180 度的半圆。只要守住这条线,银幕上 A 永远面朝右、B 永远面朝左,观众的位置感稳如磐石。
对话戏的标准拍法叫正反打(Shot/Reverse Shot):拍 A 的过肩镜头或单人镜头,再拍 B 的对应镜头,交替推进。正反打的全部根基就是轴线——两台机位都在半圆内,两个角色的银幕朝向永远相对,观众下意识知道"这两人面对面"。
破轴的代价用一个真实事故讲透。「回响峡谷」开场草案里有一幕:主角与守桥老人对话。镜头 1 从桥东侧拍主角——主角在画面左,面朝右。镜头 2,动画师想给老人一个正脸,把机位挪到了桥西侧——老人也在画面左,也面朝右。两个镜头连起来:两个人面朝同一个方向,不像对话,像并肩赶路。试映时一个测试玩家直接问:"老头刚才不是在对面吗,怎么转过来了?"
注意这个反应:他的位置感缓存被清空了——所以才会觉得画面不对劲。问题从来不在审美层面。观众看戏时在脑内维护一张小地图:谁在哪、面朝谁。破轴一瞬间,这张地图作废,观众被迫从故事里退出来重解一道空间题,重建要两三秒。这两三秒里角色的台词、表情、伏笔全部漏接——破轴清空的其实是叙事的送达率。画面只是表面陪葬品。
确实需要越轴时,有三种合法走法,核心都是"当着观众的面走":
- 骑轴镜头:机位压在轴线上拍一个正面或背面的中性镜头做过渡,观众的地图先归零,再在新侧重建。
- 运动越轴:镜头在运动中绕过轴线,观众亲眼看到相机移动,地图连续更新,不算破。
- 切中性镜头重置:插一个不带方向信息的镜头——物件特写、大远景——方向感归零,之后机位落在哪侧都成立。
工程落点:Sequencer 里每个镜号的机位是关卡里实体的 Cine Camera Actor,布机位时开顶视图,把两个角色的连线画出来,所有机位摆在同侧——Layout 阶段三十秒能查完的事,拖到成片阶段被发现,就是重拍整场戏。
镜头运动:六种基本运动,六种语气
景别看管"知道什么",轴线看管"在哪",镜头运动看管"怎么靠近"。基本词汇六个:
| 运动 | 英文 | 语气 | 典型用途 |
|---|---|---|---|
| 推 | Dolly In | 注意力收拢、情绪加压 | 进入内心、揭示真相前的一秒 |
| 拉 | Dolly Out | 抽离、孤独、落幕 | 一场戏收尾,人变小、世界变大 |
| 摇 | Pan/Tilt | 环视、搜寻、展示规模 | 原地交代空间,视线引导 |
| 移 | Truck | 旁观、并列关系 | 跟随对话的两人,保持距离感 |
| 跟 | Follow/Track | 共在、陪伴 | 跟在角色背后,一起走一段路 |
| 升降 | Crane | 上帝视角、格局变化 | 开场建立世界,结尾升离人间 |
两条使用纪律。运动要有动机:镜头为什么动,得有一个戏里的理由——角色动了镜头才跟,信息出现了镜头才推。无动机的运动是镜头在"手抖",观众说不出哪里不对,但会觉得廉价。一场戏的运动镜头不超过三分之一:运动是调味料,固定镜头才是主食;全程运动的过场看四十秒就晕,全程固定的过场看四十秒就睡。节奏感来自两者的交替。
在 Sequencer 里,运动就是 Transform 轨上的关键帧,曲线用三次插值让起步和停步带缓动——线性运动的镜头,起点和终点各有一次"撞墙",是所有新手过场的共同胎记。
15.3 Sequencer 的时间线思维:轨道、关键帧与子序列
游戏逻辑是事件驱动——玩家按了键,系统响应。Sequencer 反着来,是时间驱动:一条 MovieScene 时间线横在那里,上面挂轨道(Track),轨道里是关键帧,播放头扫到哪,哪里的值就生效。思维模型可以直接套视频剪辑软件:每个被操控的 Actor 占一条轨,相机切换是轨,音效是轨,连"第 4 秒触发一次蓝图事件"也是轨。
核心概念先立住:
- Level Sequence 资产 + LevelSequenceActor + LevelSequencePlayer:资产是时间线数据;Actor 是放进关卡的播放器实体;Player 是运行时对象,
Play()、Stop()、播放完成委托都挂在它身上。 - 轨道:Transform 轨管位置旋转;相机轨管焦距、光圈、焦点距离;动画轨喂 Skeletal Mesh;音频轨对位声音;事件轨(Event Track) 在指定帧触发回调,是把演出接回游戏逻辑的桥;Camera Cuts 轨是时间线上的导播台——哪一秒到哪一秒用哪台相机,一条轨排完。
- 关键帧:和动画曲线一套插值逻辑,线性、三次曲线任选。镜头运动别用线性,端点会"撞墙"。
- Possessable 与 Spawnable:Possessable 绑定关卡里已存在的 Actor,适合主角和场景相机;Spawnable 由序列生成、随序列销毁,适合一次性替身和演出专用粒子。这个区分在大世界里是生死问题——关卡流送(见第 16 章)把格子卸载后,Possessable 指向的 Actor 没了,绑定变红,演出当场崩。跨格子的演出,用 Spawnable 或 Binding Override。
多人协作的结构是 Master Sequence + Shot:Master 资产里一条 Shot 轨,每个镜号是一个独立的 Shot 子序列资产。动画师 A 改镜 03 的时候,动画师 B 在改镜 07,版本控制里各 checkout 各的资产,互不踩踏。整场戏塞进一个巨型 Sequence,是 5 人团队最常见的自残方式——合并冲突能排到下周。
classDiagram
class LevelSequence {
+MovieScene
+PlaybackRange
}
class LevelSequenceActor {
+SequencePlayer
+Play()
}
class LevelSequencePlayer {
+OnFinished 委托
+Play()
+Stop()
}
class MovieScene {
+Bindings
+Tracks
}
class CameraCutsTrack
class EventTrack
class Spawnable
class Possessable
class CineCameraActor {
+CineCameraComponent
}
class CineCameraComponent {
+CurrentFocalLength
+CurrentAperture
+FocusSettings
}
LevelSequenceActor --> LevelSequence
LevelSequenceActor --> LevelSequencePlayer
LevelSequence --> MovieScene
MovieScene o-- CameraCutsTrack
MovieScene o-- EventTrack
MovieScene o-- Spawnable
MovieScene o-- Possessable
Possessable ..> CineCameraActor : 绑定关卡已有相机
CineCameraActor *-- CineCameraComponent一段过场从剧本到成片的工作流长这样:
flowchart LR A["剧本定稿
对白与节拍"] --> B["故事板
每镜一格静态图"] B --> C["Layout 灰盒
Sequencer 粗排机位与时长"] C --> D["动画与镜头精修
关键帧/混合/拉焦"] D --> E["灯光氛围
接第10章方案"] E --> F["声音预混
接第14章声景"] F --> G{"内部放映"} G -- "有人看不懂" --> C G -- "通过" --> H["锁定 + 性能验收
过场帧率红线"]
两个执行纪律。其一,帧率锁死:过场时间线用 24fps 还是 30fps,立项时定一个,全项目统一,并和动画资产的帧率对齐——混用会在剪辑点出现半帧滑步。其二,命名宪法:所有过场序列按 LS_关卡名_序号 命名,Shot 资产按 SH_关卡名_镜号 命名;三个月后没人记得 NewLevelSequence_4 是哪场戏。
播放与结束回调的最小骨架(伪代码):
# 伪代码:播放一段过场,并在结束时把流程交还给游戏逻辑
def play_cinematic(sequence_path, on_done):
actor = world.spawn(LevelSequenceActor)
actor.set_sequence(load_asset(sequence_path)) # 如 /Game/Cinematics/LS_Town_010
player = actor.sequence_player
player.on_finished += lambda: settle_and_return(on_done)
hud.fade_out(0.3)
input.set_mode(cinematic_only) # 只保留"长按跳过"
player.play()
def settle_and_return(on_done):
apply_end_state() # 传送角色/置剧情旗标/销毁演出替身
input.set_mode(gameplay)
hud.fade_in(0.3)
on_done() # 通知任务系统:过场结束,接管后续三个要点:结束回调里只做状态交接,不写演出逻辑;apply_end_state 必须和"跳过"共用同一个入口(15.5 详谈);on_finished 是委托绑定,蓝图里对应 On Finished 事件节点,C++ 侧挂在 ULevelSequencePlayer 上,具体签名以 5.8 官方文档 Level Sequence Player 词条为准。
事件轨值得单独举一个例子。15.7 分镜表里的镜 09——废屋窗内手电光一闪、配一声金属碰撞——在工程上就是时间线上的两个事件关键帧:第 71 秒触发窗口点光源的强度曲线,同一帧触发一声 MetaSound(做法见第 14 章)。事件轨让"视听同步"脱离手工对表:改镜头时长时事件帧跟着时间线走,不用回头改代码里的魔法数字。规矩只有一条:事件回调里只做"触发",不做"计算",触发任务系统、触发特效、触发声音,真正的逻辑永远留在游戏系统里。演出是导演,不是演员。
15.4 摄像机的性格:焦距管窥视距离,景深管注意力,稳定度管共在感
同一台 Cine Camera Actor,参数一换,情绪全变。三个旋钮各自负责一层语义,分开讲。
焦距与视场角:一条公式管住"看多远"
焦距 f(毫米)与水平视场角 FOV 的换算,由传感器宽度 d 决定:
UE 的 CineCameraComponent 里,d 就是 Filmback 段的传感器宽度,f 是 Lens Settings 里的焦距——改 Filmback 会同时改变等效 FOV,别只盯着焦距调。以 d = 36mm(全画幅胶片背)代入,常用档位:
| 焦距 | 水平 FOV | 情绪语义 | 代价 |
|---|---|---|---|
| 18mm | 90.0° | 空间夸张、速度感、眩晕不安 | 边缘畸变,人脸靠近即变形 |
| 24mm | 73.7° | 开阔、环境参与叙事 | 纵深被拉扯,近景易丑 |
| 35mm | 54.4° | 接近人眼注意力视野,"诚实" | 用多了平庸 |
| 50mm | 39.6° | 对白与人物主力焦段 | 空间感开始丢失 |
| 85mm | 23.9° | 窥视、孤独、背景贴到人背后 | 易晕,运动镜头慎用 |
| 135mm | 15.2° | 监视感、宿命感 | 几乎拍不了运动 |
这条公式能解释一个经典设计决策:恐怖游戏为什么爱用窄视角。FOV 小,等于把玩家的周边视觉裁掉——屏幕上只剩正前方一孔,侧翼和身后的不确定性全部交给想象。恐惧的原料从来都在画面之外。画面里的东西只是引子。再叠一层长焦压缩:走廊尽头那扇门显得又近又糊,"那儿好像有东西"的不确定感被拉满。反着用也成立——要开阔、要希望、要史诗,就给大 FOV 加大远景。
但 FOV 是把双刃剑,两个工程后果记牢。窄 FOV 下相机转同样的角速度,屏幕内容扫过的速度更快,晕 3D 的玩家当场阵亡;gameplay 相机与过场相机 FOV 差距超过 30° 时,两者混合的那一秒会出现明显的"变焦呼吸",像被人怼脸——要么把它当风格用足,要么把两端 FOV 差压在 15° 以内。15.5 的衔接设计要用到这个数。
景深:把注意力从一个平面搬到另一个平面
光圈(f-stop)越小,景深越浅,焦点平面越薄。浅景深(f/1.4–2.8)把主体从世界里"抠"出来:回忆、梦境、情绪特写的标配,代价是观众失去环境信息,连看二十秒会憋闷。深景深(f/8–16)让前景中景远景全部清晰,冷峻、客观,把"找重点"的工作交还观众——代价是构图必须经得起这种审视。
景深的动态用法是拉焦(Rack Focus):焦点从前景的杯子拉到后景的人脸,观众的注意力被物理搬运。UE 里对应 CineCameraComponent 的 Focus Settings,Manual 模式给焦点距离打关键帧,Tracking 模式锁住某个 Actor;事件轨配合一下,就能在指定节拍完成搬运。
手持与固定:摇晃是呼吸,纹丝不动是冷漠
最后一对对照,也是本章标题里"性格"二字的落点。
《最后生还者》式的贴肩手持:机位贴在主角肩后三五十厘米,手持微晃——旋转幅度在零点几度量级,带着人的呼吸节奏。它传递的情绪是"我在他身边,我们一起紧张"。关键在"呼吸"二字:随机噪点只会制造眩晕——手持晃动的本质,是让另一个生命体的存在感渗入画面。幅度大了变晕船,幅度小到没有,就变成三脚架——没有中间态值得要。
固定机位的压抑感来自相反的方向:画面纹丝不动,角色在框里挣扎、逃跑、崩溃,世界不为所动。观众被剥夺了"共在感",变成一个冷漠的旁观者——监控摄像头式的凝视。库布里克的走廊、《P.T.》的循环回廊,压迫感一大半来自"镜头不肯替你眨眼"。固定机位用一两场是语言,用十场是监控录像合集。
UE 落地:手持别手 K 关键帧,用 Camera Shake(CameraShakeBase)或 5.x 的 Camera Animation Sequence 叠加在相机动画上,幅度、频率、波形可调,演出间可复用;具体资产类型与节点名以 5.8 官方文档 Camera Shakes 词条为准。固定机位则反过来,把 shake 权重压到零——完全锁死才是修辞,半死不活的微漂是参数事故。
15.5 gameplay 与过场的衔接:镜头混合状态机与"归还控制权"
过场和 gameplay 之间是两套相机体系、两套输入体系、两套 UI 体系的交接。它远不止"播一下动画"那么简单。交接有三件事:画面混合、输入切换、HUD 显隐。少一件就是直播事故——画面切了 HUD 还挂着血条,或者输入没锁、玩家把角色走出了取景框。
先上状态机,再过时序:
stateDiagram-v2 direction LR [*] --> Gameplay Gameplay --> Triggered : 触发体积 / 剧情旗标 Triggered --> BlendingIn : 镜头混合 0.5–1.5s BlendingIn --> Performing : ViewTarget = 过场相机 Performing --> Skippable : 演出 1–2s 后允许跳过 Skippable --> Performing : 松开按键,提示淡去 Skippable --> Settling : 长按跳过满 1s Performing --> Settling : 自然播完 Settling --> BlendingOut : 结算世界状态(单一入口) BlendingOut --> Gameplay : 归还控制权,解锁输入
混合的曲线也有讲究。线性插值在端点会"撞墙"——起步那一下和落点那一下都有速度突变。平滑的选择是 smoothstep:
它在 t=0 和 t=T 处导数为零,起步和落点都无顿挫。UE 的 VTBlend_Cubic 走的就是这类三次曲线。混合期间引擎把两台相机的位置、旋转、FOV 一起插值——这就是 15.4 说的:两端 FOV 差超过 30°,混合中会出现一次肉眼可见的"变焦呼吸"。
完整时序,从玩家踩进触发体积到拿回手柄:
sequenceDiagram
participant P as 玩家
participant T as 触发器(剧情旗标)
participant C as PlayerController
participant S as LevelSequenceActor
participant M as PlayerCameraManager
participant H as HUD
P->>T: 走入触发体积
T->>C: 请求进入过场(演出 ID + 结束位)
C->>C: 记录当前 ViewTarget 与输入模式
C->>H: 淡出 HUD(0.3s)
C->>S: SetSequence + Play()
C->>M: SetViewTargetWithBlend(过场相机, 0.8s, Cubic)
Note over P,S: 演出中:输入仅保留"长按跳过"
alt 玩家长按跳过 1s
P->>C: 跳过请求
C->>S: 播放头拉到末帧,触发结束事件
else 自然播完
S-->>C: OnFinished 委托回调
end
C->>C: settle:传送/旗标/销毁替身(单一入口)
C->>M: SetViewTargetWithBlend(玩家 Pawn, 0.6s, Cubic)
M-->>C: 混合落定
C->>H: 淡入 HUD
C->>P: 解锁输入,归还控制权进入与离开的 C++ 骨架:
// 进入过场:混合到演出相机,锁输入与转视角,藏 HUD
void AEchoPlayerController::EnterCinematic(ACineCameraActor* Cam, float BlendTime)
{
SavedViewTarget = GetViewTarget(); // 记住回家路
SetViewTargetWithBlend(Cam, BlendTime, EViewTargetBlendFunction::VTBlend_Cubic);
SetCinematicMode(true, /*bHidePlayer*/false, /*bAffectsHUD*/true,
/*bAffectsMovement*/true, /*bAffectsTurning*/true);
}
// 演出结束(含跳过):混合回 Pawn,落定后才解锁输入
void AEchoPlayerController::ExitCinematic(float BlendTime)
{
SetViewTargetWithBlend(SavedViewTarget, BlendTime, EViewTargetBlendFunction::VTBlend_Cubic);
GetWorldTimerManager().SetTimerForNextTick([this]()
{
SetCinematicMode(false, false, false, false, false); // 归还一切
});
}三个细节。SetCinematicMode 的五个布尔分别管电影模式开关、隐藏玩家、HUD、移动、转视角,演出里通常锁移动和转视角但保留跳过监听;归还混合(0.4–0.8s)要比进入混合略短——玩家此刻急着操作;输入解锁必须等 ViewTarget 落定,提前解锁的话,玩家一推摇杆,Pawn 的相机逻辑和混合插值打架,画面抽风。SetViewTargetWithBlend 的重载签名以 5.8 官方文档 PlayerController 词条为准。
跳过是这个系统里最容易做砸的一环。两条铁律:
- 长按 1 秒触发,不用单击。单击在紧张剧情里必然误触,长按把"我要跳过"变成主动确认;UI 提示常驻右下角、低亮度,避免抢戏。
- 跳过 ≠ Stop,跳过 = 快进到结束并结算。直接
Stop()的演出,世界状态停在半山腰:角色还站在桥中间,剧情旗标没置,任务系统卡死。正确做法是把播放头拉到末帧、触发所有结束事件;更稳的工程做法是结束逻辑只写一个SettleCinematic()函数,自然播完和跳过殊途同归,都调它——单一入口,永远一致。配套地,Sequence 的 Restore State 选项会把 Possessable 拉回演出前状态,可跳过的演出慎用:主角被瞬移回起始位置,玩家会以为撞了 bug。
跳过监听与结算的伪代码:
# 伪代码:长按 1 秒跳过;跳过与自然播完共用同一个结算入口
def cinematic_tick(dt):
global skip_hold
if not cinematic.playing:
return
if confirm_button.held() and cinematic.elapsed > 1.5: # 开场 1.5s 内不许跳
skip_hold += dt
ui.show_hint(f"长按跳过 {min(skip_hold / 1.0, 1.0):.0%}")
if skip_hold >= 1.0:
cinematic.goto_final_frame() # 播放头拉到末帧
settle_cinematic() # 与自然播完同一个入口
return
else:
skip_hold = max(skip_hold - 2 * dt, 0) # 松手快速回退
ui.fade_hint()
def settle_cinematic():
teleport_player(cinematic.end_transform) # 角色落位
quest.set_flag(cinematic.done_flag) # 剧情旗标
cinematic.destroy_spawnables() # 清替身
controller.exit_cinematic(blend_time=0.6) # 混合回家、解锁输入15.6 QTE 的克制:参与感和侮辱智商之间,只有三个条件的距离
这里的 QTE 指过场中插入的限时输入——按键、摇杆、保持不动——和战斗里的连招输入是两码事。它是个被用烂的工具:用对了,玩家从观众变回参与者;用错了,就是把"请为这段演出鼓掌"做成弹窗。
参与感三条件,同时满足才允许加:
- 语义一致:输入动作与角色行为同构。按 X 是"抓住悬崖边缘",摇杆前推是"顶住那扇门"。屏幕上弹个随机符号让按,手指在干活,脑子在骂街。
- 失败有叙事后果:失败走向分支——同一段动画重播两遍是侮辱智商。没抓住 = 绕远路、丢装备、同伴拉你一把但欠下人情。
- 低密度:一场演出 1–2 次封顶,第一次出现之前有过铺垫("别放下手柄")。密度一高,参与变打卡。
智商税三症状,中一条就砍:
- 高潮弹窗:剧情情绪顶点,屏幕糊一个巨大按键图标——注意力从戏里被拽到手指上,情绪当场泄气。
- 与角色无关:角色自己在屏幕上打完一套帅招,玩家只负责按键确认他帅。这就是领掌,跟交互没有半点关系。
- 反应考试:0.3 秒窗口、失败即死重来,考的不是参与感是反射弧,剧情节奏被反复重播切得稀碎。
flowchart TD
A["想在演出里加 QTE"] --> B{"输入动作与角色
行为语义一致?"}
B -- "否" --> X["砍掉:随机按键 = 领掌"]
B -- "是" --> C{"失败有叙事分支,
而非重播?"}
C -- "否" --> D{"这段戏没有交互
也成立吗?"}
D -- "是" --> E["改成纯演出,
别为难玩家"]
D -- "否" --> X2["改设计:让失败
变成另一种剧情"]
C -- "是" --> F{"本场戏第几次 QTE?"}
F -- "第 1–2 次" --> G["保留:提前铺垫
保持手柄在手上"]
F -- "第 3 次及以上" --> H["削减:参与感
已退化成打卡"]比按键 QTE 更高级的替代方案有三。按住不放:按住 = 坚持,松开 = 放弃,时间长度本身就是表演,比瞬时按键多一层煎熬。保持不动:逆向 QTE,不操作就是操作,潜行与惊吓点的绝配,测的是定力不是反射——《直到黎明》的 "Don’t Move" 桥段把这一条用成了招牌:手柄稍有晃动就算失败,玩家连呼吸都跟着屏住。半脚本 gameplay:限视角、限移动,玩家真的在玩,只是导演管着机位——《最后生还者》的多数名场面走的是这条路,QTE 只在极少数处露面。优先级:半脚本 > 保持类 > 瞬时按键。
正面参照还有一个:《战神》(2018)开场遭遇战里的拳击 QTE,按键提示与"挥拳/格挡"的动作同构,失败不掉血重播、只是演出走向不同——三条件全中。反面教材不用点名:打开任何一个"剧情高潮弹随机按键、按错重来十遍"的游戏,三症状通常全中。把这两条清单贴在演出评审会的墙上,一半 QTE 提案活不过评审。
15.7 「回响峡谷」开场 90 秒:逐镜分镜实操
背景:主角十年后回到被废弃的峡谷小镇,寻找一件旧物。目标约束四条:总长 90 秒;玩家愿意放下手柄看完;最后一镜落回 gameplay 机位,察觉不到剪辑点;全程可长按跳过,跳过与世界自然播完状态一致。风格对标《最后生还者》开场的"安静建立",不要爆炸开场。
| 镜号 | 景别 | 时长 | 运镜 | 叙事职责 |
|---|---|---|---|---|
| 01 | 大远景 | 10s | 升降臂缓降 + 前推 | 建立世界:晨雾峡谷、断桥与小镇全貌,人的缺席 |
| 02 | 远景 | 8s | 固定 | 主角背影从画框下缘入画、停步——"他回来了" |
| 03 | 全景 | 7s | 手持跟随 | 下坡打滑、扶了一下岩壁——身体状态:疲惫生疏 |
| 04 | 特写 | 5s | 固定微推 | 靴子踩进泥水,涟漪荡开——触觉锚点,雨后的世界 |
| 05 | 中景 | 10s | 手持贴肩,缓环绕约 40° | 抬头望向镇子,露半张脸——情绪第一次入场 |
| 06 | 大特写 | 4s | 固定 | 掌心旧口琴,拇指摩挲——动机道具,全片伏笔 |
| 07 | 近景 | 8s | 缓慢推近 | 收起口琴,眼神从怀念到决心——情绪转折 |
| 08 | 远景 | 12s | 升降升起越顶 | 走向镇口,惊起一群乌鸦——不祥预告 |
| 09 | 中景 | 6s | 固定 | 废屋窗内手电光一闪即灭,主角停步——悬念钩子 |
| 10 | 全景→中景 | 20s | 缓退上摇,末 1.2s 混合回 gameplay 机位 | 交接:玩家接管时正站在镇口,任务目标浮现 |
时长合计 10+8+7+5+10+4+8+12+6+20 = 90 秒,达标。这张表背后压着前五节的每一条规则,逐一核对:
- 景别:大→小→大→收,"先世界、后人、再世界"的呼吸节奏;相邻跳档全部在两档以内;镜 06 是全场唯一的大特写,额度用在动机道具上。
- 轴线:主角运动方向全片统一朝画面右(进镇方向);镜 05 环绕 40° 不越过身体朝向轴线;镜 08 升起时方向感不变。
- 相机性格:镜 05、06、07 用 50–85mm 中长焦加浅景深(f/2.8),把人物从雾里"抠"出来;镜 01、08、10 回到 24–35mm 交代空间;手持只给跟随镜头,固定机位留给 04、06、09——手电光那一镜纹丝不动,压迫感才出得来。
- 衔接:镜 10 末尾 1.2 秒做 ViewTarget 混合,过场端 FOV 50°、gameplay 端 55°,差 5°,混合无变焦感;HUD 在 01 起 0.3 秒淡出,镜 10 落定后 0.3 秒淡入。
- 跳过:演出 1.5 秒后允许长按跳过;跳过结算 = 主角站位镇口 + 口琴入包旗标 + 乌鸦事件置为已触发,与自然播完走同一个
SettleCinematic()。 - 声音(接第 14 章):01–04 只有环境声(风、水、脚步);05 进低频氛围垫底;08 的乌鸦是全场第一个高频事件;09 手电光配一声极轻的金属碰撞——悬念钩子要视听同步。
制作量的账也先算在明处:十个镜头里,镜 01、08 两个升降镜头最贵——大远景意味着整个镇子的光影和细节都要经得起看(第 10 章的布光方案在这里一次性兑现);镜 05、06、07 三个情绪镜头贵在动画,面部与手指的表演精度直接决定成不成;镜 03、04、09、10 是便宜镜头,一个机位一份资产。制作量的分布和情绪浓度的分布刚好重合——这就是预算该去的地方,没有侥幸。反过来说,如果哪个镜头的制作量很大、叙事职责却一栏空白,它就是第一个该被砍的镜头。
还要给"安静开场"交个底。把开场做成爆炸、追逐、直升机坠毁,当然抓人,但竖切阶段做不起——爆炸要特效(第 13 章)、要碎片物理、要额外的场景毁坏状态,90 秒烧掉三周的预算翻一倍。安静开场的真正优势是性价比:雾、光、一个背影,三个便宜元素叠出氛围;而且它把全片的情绪基线压在低位,后面的紧张段落才有爬升空间。开场即巅峰的游戏,后半程都在还债。
排期上,90 秒过场按三周走。压到两周也能做,但返修缓冲会先被吃掉:
gantt title 「回响峡谷」开场 90 秒过场排期(三周) dateFormat YYYY-MM-DD section 前期 剧本与节拍定稿 :a1, 2026-03-02, 2d 故事板(每镜一格) :a2, after a1, 3d section 制作 Layout 灰盒分镜 :b1, after a2, 4d 镜头与角色动画精修 :b2, after b1, 5d 灯光与氛围(接第10章) :b3, after b1, 3d 声音预混(接第14章) :b4, after b2, 3d section 收尾 内部放映与返修缓冲 :c1, after b4, 4d
验收线也提前写死:过场全程帧率不低于目标帧率(按平台档 4K/60 或 1080p/60),任何一镜的 GPU 时间不超过 gameplay 预算的 1.3 倍——过场没有玩家输入兜底,掉帧比 gameplay 里刺眼得多;从触发到出现跳过提示不超过 2 秒;按下跳过完到恢复操作不超过 2.5 秒。这三条写进验收单,不然"卡一下"这种模糊反馈会反复回来找你。
小结
景别是合同:选景别就是选"这一秒观众该知道什么",相邻镜头跳档不超过两档,大特写一场戏一次。轴线是观众脑内地图的坐标系——破轴摧毁的是位置感——画面本身没有任何变化,重建的两三秒里叙事全部漏接,越轴必须当着观众的面走。Sequencer 的工程量在结构不在镜头:Master+Shot 分资产、结束逻辑单一入口、跳过等于快进结算,这三条决定后期返工量。相机性格三旋钮——焦距管窥视距离,景深管注意力,稳定度管共在感;手持是呼吸,固定是冷漠,半死不活的微漂是事故。QTE 只在"语义一致、失败有分支、密度封顶"同时成立时存在,其余形态都是让玩家替演出鼓掌。
上手任务
- 景别阶梯练习:用 Sequencer 拍一段 20 秒无对白片段(角色进门—坐下—望向窗外),只用四个景别、各出现一次。验收:不给出分镜表,请一位同事看一遍后能复述三个动作的顺序和情绪走向;任意相邻镜头景别跳档不超过两档。
- 轴线排查:给「回响峡谷」一场两人对白布三台机位做正反打,顶视图画出动作轴线并截图存档。验收:剪出的 30 秒里任何角色银幕朝向不翻转;再故意做一版破轴版,找三人盲看,至少两人明确说出"位置乱了"。
- 衔接管线落地:实现 15.5 的进入/退出混合与长按跳过。验收:进入混合 0.8s±0.1;归还混合不超过 0.8s;按下跳过完到恢复操作不超过 2.5s;跳过后角色位置与剧情旗标同自然播完完全一致(写进自动化测试或逐帧比对)。
- FOV 对照实验:同一条走廊、同一角色同速走 5 秒,分别用 24mm 与 85mm 各拍一版。验收:导出两段视频,附 200 字说明哪一版更不安、为什么——必须引用 FOV 公式算出两版的视场角数值(d 取 36mm)。
下一章
镜头能讲故事了,但「回响峡谷」只有一个镇子。当世界大到装不进内存,再美的镜头也播不出来——第 16 章讲 World Partition 与流送:无缝大世界的客户端地基,也是「远港 Online」的第一块砖。
延伸阅读
- 官方文档:Unreal Engine → Cinematics and Movie Making → Sequencer 词条(含 Master Sequence 与 Shot 结构、子序列与绑定)。
- 官方文档:Unreal Engine → Cinematics → Cine Camera Actors(Filmback、Lens Settings、Focus Settings 各参数)。
- 官方文档:Unreal Engine → Cameras → Camera Shakes 与 Camera Animation Sequences 词条。
- 《Film Directing: Shot by Shot》(Steven D. Katz):景别、轴线与分镜的图解标准教材,动手画故事板之前先翻一遍。
- GDC 与 Unreal Fest 上顽皮狗及 Epic 关于电影化演出管线、Sequencer 工作流的历年分享(按最近一届检索)。
- 源码:Engine/Source/Runtime/MovieScene(时间线与求值);Engine/Source/Runtime/LevelSequence(播放器与绑定)。