在这个简短的教程中,我们将学习如何使用 Blender 的动画 Cycle 修饰器来创建循环动画,也就是说,让某些关键帧在整个片段持续时间内周期性地重复。
本教程的视频版本目前尚未提供该语言版本。
视频文字稿
大家好。
在这个简短的教程中,我们将学习如何使用 Blender 的动画 Cycle 修饰器来创建循环动画,也就是说,让某些关键帧在整个片段持续时间内周期性地重复。
关键帧之间的动画曲线称为 F-Curve。Blender 为我们提供了一组修饰器,恰当地命名为 “F-Curve Modifiers”,可以用来方便地对这些曲线进行变换。
其中一个修饰器就是 Cycle,它可以以循环的方式重复两个或多个控制点,也就是关键帧。
这是一个基础教程,使用的是 Blender 3.3。不过,F-Curve 的 Cycle 修饰器已经在多个版本中提供,并且很可能在未来的版本中继续存在。
作为一个实际示例,我们将创建一个 3D 电子电路模型中两个 LED 交替点亮的动画,也就是视频中展示的效果。

首先,我在两个 LED 二极管附近放置两个不同的 Point Light 光源。这些 LED 都有半透明的彩色外壳,因此只需要在其中一个 LED 的中心添加一个白色的 Point Light,然后复制它,并将副本移动到另一个 LED 内部即可。
Blender 会在 3D Cursor 所在的位置添加新对象。
为了将 3D Cursor 放到第一个 LED 的中心,我先选中整个电路,切换到 Edit Mode,取消所有选择,然后按住 ALT 并在我想要选择的顶点环上的一条边上单击鼠标左键,以选中 LED 上方的一个顶点环。

最后,我按下 SHIFT+S,并在屏幕上出现的菜单中选择 “Cursor to Selected”,然后返回 Object Mode。

Point Light 光源可以很容易地通过 3D Viewport 中的 Add 菜单添加,快捷键是 SHIFT+A。

第二个光源可以像之前提到的那样,通过复制第一个获得。因此我按下 SHIFT+D,然后将复制出来的光源移动到第二个 LED 内部。
第二个 Point Light 不一定要精确放在第二个 LED 顶点环的中心。不过,我正好借这个机会说明如何将一个对象移动到 3D Cursor 所在的位置。
我切换到 Edit Mode,选择第二个 LED 的顶点环,同样是按住 ALT 并在感兴趣的顶点环边上单击,然后使用 SHIFT+S 和 “Cursor to Selected” 将 3D Cursor 放到那里。
接着,我回到 Object Mode,选中第二个光源,按下 SHIFT+S,这次选择 “Selection to Cursor”。
为了更好地观察效果,我在 Properties 编辑器的 World 选项卡中,将 Background 的 RGB 颜色设置为黑色,使虚拟环境背景变为黑色。

为了预览最终效果,我将鼠标指针放在 3D Viewport 内,按下 Z 键,然后在出现的选择器中选择 Rendered。
此时两个 Point Light 光源的强度太低了。不过,要正确设置灯光,我们需要同时调整 Point Light 的 Power 和 Radius 参数。
例如,如果将 Power 设置为 0.1 Watt,而 Radius 保持默认值 25 cm,结果会得到非常暗,而且最重要的是偏白的照明效果。

这是因为 Radius 参数表示光源的尺寸,也就是说,相当于我们在场景中放置了一个半径为 25 cm 的灯泡。通过拉远视角可以看到这一点:当我们选中 Point Light 时出现的那个圆圈,就代表了光源的实际尺寸。

将 Radius 设置为一个更合适的数值,比如 0.1 cm,就可以得到我们想要的效果。

在继续之前,我们也要为第二个光源把 Radius 设置为 0.1 cm,以避免出现不愉快的意外。不过在这种情况下,将 Power 设为 0,因为一开始第二个 LED 是关闭的。
最后,终于可以开始讲动画了。
我要创建的动画总长度是 250 帧,帧率为每秒 25 帧。
LED 的开关循环必须持续 2 秒,因此很显然,每个 LED 将点亮 1 秒,也就是 25 帧。
首先,我把时间轴定位到动画的第 1 帧,并为第一个 LED 的 Power 字段插入一个动画关键帧。具体做法是将鼠标指针放在 Point Light 的 Power 字段上,然后右键单击,在屏幕上出现的菜单中选择 “Insert keyframe”。
或者,当鼠标指针位于 Power 字段上时,我也可以直接按 I 键,这是 Insert Keyframe 的快捷键。

Power 字段会改变颜色,并且在 Timeline 中会出现一个菱形,表示我们确实已经插入了一个动画关键帧。

第一个 LED 必须在第 26 帧关闭,也就是动画开始 1 秒之后。因此我移动到动画的第 26 帧,将 Power 设置为 0,然后为这个数值插入一个关键帧……

……这样就完成了吗?
其实还没有。在这种动画中,Power 的数值会在 25 帧的时间里从 0.1 Watt 逐渐过渡到 0 Watt;但我们希望 LED 是瞬间关闭的,也就是从 0.1 直接跳到 0 Watt。
为了解决这个问题,我把时间轴定位到第 25 帧,此时 Power 的值是 4 milliWatts,这是 Blender 插值得到的数值。我在 Power 字段中输入 0.1 Watt,并插入一个关键帧。

还没结束。出于同样的原因,我把时间轴移动到动画的第 50 帧,并为 Power 插入一个值为 0 Watt 的关键帧。这样一来,当动画变成循环时,在第 51 帧数值就会瞬间切换。

这样,第一个 LED 在前 25 帧会以恒定亮度点亮,而在第 26 帧到第 50 帧之间保持关闭状态。
接下来,我需要对第二个 Point Light 执行相同的操作,但 Power 数值要反过来。
选中第二个 Point Light 之后,我把时间轴定位到动画的第 1 帧,并为 Power 字段插入一个值为 0 Watt 的关键帧。
然后我移动到第 25 帧,再次为 Power 插入一个值为 0 Watt 的关键帧,因为我希望它是瞬间点亮,而不是渐变。
在动画的第 26 帧,我在 Power 字段中输入 0.1 Watt,并插入一个动画关键帧。
接着我移动到动画的第 50 帧,并为 Power 插入一个值为 0.1 Watt 的关键帧,从而完成整个动画循环。
此时在 3D Viewport 中以 Rendered 模式查看当前结果,可以看到第一个循环是正确执行的;很明显,从第 51 帧开始,第二个 LED 会一直保持点亮,而第一个 LED 则保持关闭。
现在,终于可以让这个动画变成循环的了,这也是本教程的核心内容。
我们打开 Graph Editor,并选中第一个 Point Light,以查看它的动画曲线。

我们会注意到这里只有一条曲线,显然就是 Power。
如果这条曲线的尺寸看起来过大,我们可以使用 CTRL 加鼠标中键来压缩 Graph Editor 的缩放比例,根据需要水平或垂直移动鼠标,从而在对应轴向上压缩或展开视图,以便更清楚地查看曲线。
我们插入的数值都清晰可见,并且对于每一个关键帧,Power 字段的数值也可以在 Graph Editor 的 F-Curve 选项卡中看到。这个选项卡可以通过按 N 键来显示或隐藏。

要让这个动画变成循环,我们先使用 Blender 的任意一种选择工具选中所有已有的控制点,比如按 A 键、B 键,或者任何你习惯的方法。然后,在 Sidebar 中打开 Modifiers 选项卡,快捷键同样是 N,如前所述,并添加一个 Cycles 修饰器。完成。

接下来,对第二个 Point Light 重复同样的操作。我们在 Graph Editor 中选中它的 Power 通道,选中曲线上的所有控制点,然后添加一个 Cycle 修饰器。

在我们的例子中,Cycle 修饰器的默认设置对两个光源来说都完全适用。不过,我想指出,我们也可以将循环重复限制在动画的某个特定帧范围内。只需要勾选 “Restrict Frame Range” 复选框,并在 Start 和 End 字段中设置对应的帧数即可。

打开一个 3D Viewport 编辑器,并在 Rendered 模式下播放动画,我们就可以检查最终得到的结果。我想特别说明的是,当选中两个 Point Light 中的任意一个时,在 Timeline 中我们只会看到我们手动设置的那些关键帧,其余的关键帧并不是实际存在的,而是由 Cycle 修饰器生成的。
实际上,本教程有很大一部分时间都花在了场景的设置上,因为修饰器本身的使用是相当简单的。不过,我也借此机会讨论了其他一些主题,比如 Point Light 的 Radius 参数,以及如何正确设置关键帧,以实现 LED 的瞬间点亮和关闭。
好了,希望这个教程能对你有所帮助。
我们下次再见。