在现实世界中,蒙太奇(Montage)是一种电影和视频剪辑技巧,用来通过剪辑一系列的镜头或片段,展示时间的推移、情节的发展、情感的变化等,从而传递某种信息或情感。蒙太奇的目的通常是通过快节奏的镜头切换和对比,给观众带来强烈的视觉冲击或情感共鸣。而在虚幻引擎的动画模块中,也有一种神奇的蒙太奇。
一.(虚幻中的)蒙太奇是什么
1.可以使用 动画蒙太奇(Animation Montage) 来将多个 动画序列(Animation Sequences) 合并为单个资产并通过蓝图播放。
2.除了可以让你将多个动画序列合并为动画外,还可以切分为多个 蒙太奇分段(Montage Sections),以便在运行时,按一定逻辑以任何顺序动态播放。你可以在蒙太奇分段面板中控制分段之间的过渡,也可以使用 蓝图(Blueprints) 在分段之间设置更复杂的过渡行为。
3.在动画蒙太奇中,动画序列以 插槽组(Slot Groups) 和 插槽(Slots) 分类。一个插槽中可以有多个动画序列来生成动画,还可以使用不同的插槽来创建额外的轨道
(默认情况下,处于同一插槽同一插槽组的动画序列会在触发时覆盖其余任何序列的播放。)
二.蒙太奇运用
1.蒙太奇应用(1)——按键播放动画蒙太奇
1.实现目标
我们先来实现j简单的一个按下键盘按键,播放一段动画的功能(如下图)
2.实现过程
这里的实现过程算是蒙太奇应用的前置条件。
(1)创建动画蒙太奇
根据已有动画序列创建动画蒙太奇,或为一个骨骼资产创建空白蒙太奇并拖入一段其动画序列。
(2)为蒙太奇资产配置组和插槽
在蒙太奇面板中设置组和插槽(插槽可以理解为装蒙太奇的篮子)
一个蒙太奇资产可以设置若干个插槽,同一个插槽也可以装入若干个蒙太奇资产(如下图,这里我在DefaultGroup下创建了一个名为Attack的插槽)
(注:默认情况下,处于同一插槽同一插槽组的动画序列会在触发时覆盖其余任何序列的播放。)
在动画图表中创建插槽节点,引用装载蒙太奇对应的插槽)(如下图)
(3)在动画蓝图中配置蒙太奇资产
使用播放蒙太奇节点(需要获得骨骼网格体的引用),并选择引用的目标蒙太奇资产,这里我选择鼠标左键点击播放。
3.动画蓝图总览
这里我是创建了两个插槽,Attack插槽中只装了一段冲拳的动画,KickAttack插槽中我装了另外三段踢腿的动画。两个插槽本质并没有区别,只要把插槽带上了就OK。
2.蒙太奇应用(2)——骨骼混合动画
可以看到,我们现在按下对应键盘即可播放对应的动画蒙太奇,但是当人物移动的时候就会穿帮(如下图)
而在通常情况下,我们希望当人物跑起来的时候下肢是保持正常移动的。
1.实现目标
那么接下来我们去实现一下播放蒙太奇时当人物站立时上下肢动作完整,但是当人物运动的时候,只有上肢会播放动画的效果。(如下图)
2.实现过程
(1)使用“按骨骼分层“节点实现上下半身动画分离
我们需要在动画图表中使用一个混合节点—— 按骨骼分层节点——LayeredBlendPerBone(见下图)
LayeredBlendPerBone
节点可以将多个动画层混合在一起,并且可以在不同的骨骼层次上应用不同的动画。每个动画层的混合可以基于骨骼的层级结构来进行控制。例如,你可以在角色的上半身应用一个走路动画,而在下半身应用一个跑步动画,甚至可以在单独的骨骼(如手臂、头部等)上应用特殊的动画效果。
我们首先去角色的骨骼中找到合适的混合骨骼,这里我选择spine作为上下半身的分界(见下图)
我们需要用到这根骨骼的名称。
注:如果你选择的骨骼的命名较为复杂,可以右键快速复制骨骼名称(见下图)
回到动画图表中,找到骨骼混合节点的细节面板下,层设置的分支过滤器下创建一个数组元素
骨骼名称一栏输入我们的骨骼名称,混合深度填0即可。
*关于骨骼的混合深度
现在我想完善前面做的踢腿的动画,我想让角色仅仅在站定的状态下才能播放踢腿动画
(2)使用“使用bool值混合姿势”来实现条件播放
由于这里我们需要获得角色的移动速度
所以我们需要先创建一个float变量Speed,并在事件图表中获取并设置
接着在动画图表中使用 比较节点(>=) 和混合节点;
还不算复杂,下面是我当前的动画图表中的结构内容
3.蒙太奇应用(3)——结合骨骼体插槽
1.实现目标:
接下来让我们了解一下骨骼体插槽,顺便再去增添一个有趣的功能——让我们的角色在踢腿的某一瞬间,在脚部(脚指头上~)生成一个向前发射的火球!(如下图)
骨骼体插槽
有时,将对象绑定到骨骼网格体的某个骨骼上时,你可能需要偏移此绑定对象。这时,你不必使用数学运算来估算偏移值,而是可以创建一个 插槽(Sockets) 。插槽是骨架层级中的一种特殊的绑定点,可以相对于作为其父节点的骨骼进行变换。设置之后,你可以将对象、武器和其他Actor附加到插槽。
(虚幻中的插槽也是五花八门,动画图表中有插槽,骨骼上也可以创建插槽,我习惯加上前缀)
举个例子假如我们需要给角色的特定部位增加一些装饰(饰品),比如帽子或耳环之类的,我们可以通过在骨骼资产中创建的骨骼体插槽,来让蓝图内部的组件自动匹配的目标骨骼的位置。十分方便高效。(毕竟靠手K调对齐往往效率较低)
2.实现过程:
(1)在目标骨骼上创建插槽
找到骨骼上的右脚趾骨骼,右键添加插槽(见下图,我这里命名为KickPos)
(2)为角色添加标志物并设置插槽。
由于我们在蓝图中还是需要actor才能获得位置,所以在角色身上还是需要一个标记物的。
当插槽设置完毕,会发现该静态网格体自动锁定在了我们的目标骨骼位置处。
调整一下标记物的缩放,将其隐藏起来
(3)在角色蓝图中创建Spawn事件
既然我们需要在标记物的位置上生成预制件,需要用到常用的SpawnFromClass节点。
创建自定义事件并获取角色身上标记物的引用。(见下图)
(4)蓝图通信
在角色蓝图中编写了事件后,我们思考一个问题:
如何知道动画播放到哪个地方才能释放出攻击呢?聪明的你一定已经有答案了,我们通过蒙太奇来播放这个踢腿的动画,那么我们可以使用 通知 来在动画蓝图中触发角色蓝图中的事件。
*在蒙太奇的通知轨道上新建通知
这里我命名为KickAttack(前面紫色的通知是以前做的用来播放音效的通知)
*在动画蓝图的事件图表中触发角色蓝图中的自定义踢腿事件
这里我们需要用到Cast转换节点,当通知发出时,播放动画的角色的角色蓝图中就会触发我们的踢腿事件。
(5)编写飞踢攻击蓝图
创建新蓝图作为我们飞踢时出现的远程攻击。
注意需要添加发射物移动组件(见下图)
我这里还添加了两个初学者包中带的旧版粒子特效(见下图)
我们需要让这个飞行物在被创建之后沿玩家踢出时的方向运动,所以在事件图表中编写蓝图
我们创建一个float变量speed便于控制飞行物的飞行速度。
事件图表中的逻辑流程:
首先获取玩家的向前向量——>与speed做乘积得到飞行速度——>为可移动组件设置Velocity——>延迟6秒销毁自身实例
现在,将角色蓝图中Spawn的类型设置为我们的BP_KickAttack(见下图),运行游戏应该就可以实现上面的效果啦!
三.虚幻中的动画蒙太奇与Unity中的Timeline的联系和区别
在学习蒙太奇的过程中,在形式上我总是很容易联想到unity中的Timeline,所以在这里先总结一下二者的相似之处和明显区别。
1.二者定义
虚幻中的动画蒙太奇
动画蒙太奇(Animation Montage) 是虚幻引擎中的一个高级动画工具,专门用于管理和播放角色动画的不同片段,可以通过组合和控制多个动画序列来创建复杂的动画流程,能够在动画播放过程中插入事件(如声音或脚本)或通过蒙太奇的通知系统来与游戏逻辑进行交互。
Unity中的Timeline
时间轴(Timeline) 是 Unity 中的一个多功能工具,主要用于在时间轴上控制多个游戏对象的动画、音频、粒子效果、摄像机移动等元素的播放顺序。是一个适用于场景动画、过场动画、角色动画等多种情况的工具。时间轴不仅支持动画,也能集成事件、音效和脚本,实现跨元素的控制。
(包括但不限于)
2.二者相似点
(包括但不限于:)
1.基于时间轴
2.多段动画片段组合
虚幻的动画蒙太奇:支持将多个动画片段组合成一个蒙太奇,可以设置不同的动画部分、速度、混合等。
Unity 的Timeline:支持在同一时间轴上安排多个动画、音效、特效等内容,可以在多个轨道上同时控制不同元素的播放。(激活轨道,相机轨道,动画轨道等)
3.触发器与事件
虚幻的动画蒙太奇:通过设置或新建 通知(事件)来在蒙太奇中的时间轴上特定位置触发事件(需在动画蓝图中配置通知事件)。
Unity 的Timeline:可以通过创建信号通知器在时间轴上排列各种事件(包括动画、音频、粒子效果等)。可以通过信号通知器精确控音效、事件触发等。
3.二者不同点
(包括但不限于)
1.作用对象不同
虚幻的动画蒙太奇:动画蒙太奇是基于一个骨骼资产存在的,所以一段蒙太奇中只能包含一个骨骼网格体资产的动画序列。可以理解是仅针对于单个角色。
Unity 的Timeline:Unity中的TimeLine可以用来制作同时包含若干个游戏物体的过场动画,可以为多个游戏物体分别创建各自的动画轨道。
2.混合功能聚焦点不同
虚幻的动画蒙太奇:主要聚焦在骨骼动画、过渡和混合。提供了丰富的动画控制功能,可以对两段动画序列间进行混合过渡。
Unity 的Timeline:允许将动画与音效、镜头、事件和脚本绑定到同一时间线上进行控制,是一个更加多元化的工具,可以同时控制不同类型的内容。轨道上的片段可以进行混合以实现过渡,方便实现像“摄像机平滑切换”或“音乐的淡入淡出”效果。