在本教程中,我们将了解如何在 Blender 中使用 Movie Texture。除此之外,我们还将了解如何直接在 3D Viewport 中预览影片的不同帧,以及如何在 Timeline 中设置影片的起始帧。
本教程的视频版本目前尚未提供该语言版本。您可以在下方观看带字幕的英文版视频;视频下方提供了翻译成中文的文字稿。
视频文字稿
大家好!在本教程中,我们将了解如何在 Blender 中使用 Movie Texture。除此之外,我们还将了解如何直接在 3D Viewport 中预览影片的不同帧,以及如何在 Timeline 中设置影片的起始帧。
开始之前,我想提醒大家,与我的其他视频一样,本教程的文字版以及其他资源也可以在我的网站上找到,并且还提供其他语言版本,链接位于视频说明中。
在本教程使用的项目中,我在左侧放置了一个 3D Viewport 和一个 Timeline,中间则是用于 Texture mapping 的 UV Editor 和 Material editor。最后,右侧是常用的 Outliner 和 Properties Editor。电脑屏幕的 3D 模型拥有自己专用的 Material,并且已经设置了适合该 Texture 的 UV mapping。

具体来说,这个 Material 是通过将我们想要显示的图像或影片与一个由彩色圆点组成的 mask 相乘而创建的。这种相乘操作有助于模拟老式 CRT 显示器的视觉效果。我曾在之前发布于频道和网站上的一个教程中介绍过这种技术。
我们可以使用标准的 Image Texture node 导入影片,也可以直接将影片文件拖入 Material editor,这样 Blender 就会自动创建一个处于 Movie 模式的 Image Texture node。

在 Texture 设置中,我们主要需要关注 Extension 菜单、Frames、Start Frame 和 Offset 这三个数值参数,以及 Auto Refresh 选项。
如果我们希望在 Timeline 中从一帧移动到另一帧时,直接在 3D Viewport 的 Rendered 预览中看到影片播放,那么 Auto Refresh 选项非常有用。不过,例如当我们在 Timeline 中移动到第 200 帧时,即使启用了 Auto Refresh,在 3D Viewport 的 Rendered 预览中也不会看到 Texture 发生任何变化。

这是因为除了 Auto Refresh 之外,我们还需要在 Texture node 中为 Frames 字段设置正确的值。这个字段用于指定影片中有多少帧可以播放。要查看影片片段包含多少帧,我们可以在 UV Editor 中打开该片段,然后按 N 打开 Sidebar。在 Image 选项卡中,我们可以找到所需的数值,在我的例子中是 2843。设置好这个参数之后,我们就能在 3D Viewport 中看到正确的预览。

请注意,现在 3D Viewport 中的预览已经能够正确更新,但 UV Editor 中的预览却没有更新!这是因为在 UV Editor 中,我们同样需要在其 Sidebar 的 Image 选项卡中,通过 Frames 字段设置要显示的影片帧数。幸运的是,在 Image 选项卡中,Frames 字段旁边有一个 Match Movie Length 按钮,可以让我们快速设置这个值。

能够同时在 3D Viewport 和 UV Editor 中看到当前帧,也有助于我们正确设置 UV mapping,就像处理任何图像 Texture 一样。此时,Extension 菜单就变得尤其重要。默认情况下,它被设置为 Repeat。在这种模式下,如果 UV island 大于影片画面,那么画面图像就会在几何体上重复显示多次。

在我的例子中,UV island 实际上会小于影片画面,因此使用默认设置就可以了。不过,如果有需要,也可以将 Extension 模式更改为 Clip,这样就可以防止 Texture 在其他区域重复显示。接下来,我会向前移动几帧,并调整 UV island,使其更适合影片后面的内容。

现在我们来看一下 Start Frame 和 Offset 参数。先从 Offset 开始。可以看到,在我的例子中,Lucasfilm Games 标志出现在 Timeline 的第 77 帧。要让它直接出现在 Timeline 的第一帧,我们需要在 Offset 字段中输入 76。这样就会告诉包含影片的 Texture node 直接跳到影片的第 77 帧。
不过请注意,在这种情况下,Rendered 预览和 UV Editor 中的数值同样是相互独立的。因此,要在 UV Editor 中获得一致的结果,我们还需要将那里的 Offset 值也改为 76。

现在将 Image Texture node 和 UV Editor 中的 Offset 都重新设置为 0,接下来我们来介绍 Start Frame 参数,它的默认值是 1。
在这种情况下,我们是在告诉 Blender,要从整个动画 Timeline 中的某个特定帧开始播放影片。默认值是 1,因为 Movie Textures 通常会从 Blender 动画的第一帧开始播放。不过,假设你希望影片从 Timeline 的第 100 帧开始播放,例如在前 100 帧期间,你想让摄像机逐渐靠近屏幕,然后才开始播放影片。我们刚才说过,Lucasfilm Games 标志出现在 Texture 的第 77 帧,对吧?那么,如果我们在 node 的 Start Frame 字段中输入 100,这个标志现在就会出现在 Timeline 的第 176 帧,因为我们将影片的开始时间延后了 100 帧。同样,要在 UV Editor 中获得一致的结果,我们还需要在 Image 选项卡中修改 Start Frame 的值。请注意,在这个选项卡中,Blender 会显示你当前位于影片的第 77 帧,因为它已经考虑了 100 帧的偏移,即使我们此时位于 Timeline 的第 176 帧。

因此,Start Frame 和 Offset 的区别是这样的。使用 Start Frame,我们可以让 Image Texture node 中的影片相对于 Blender Timeline 的第一帧,从不同的时间点开始播放,而且还可以使用负值。而使用 Offset,我们可以跳过 Image Texture node 中影片的一部分帧,从影片中的另一个位置开始播放。
最后,我再给大家展示一个实际例子。首先,我会将 node 的 Start Frame 和 Offset 分别重置为 1 和 0。为了方便,我将重点关注 Rendered 预览,但请记住,如果想在 UV Editor 中看到相同的结果,也需要在那里修改相应的数值。

我们知道,Lucasfilm 标志出现在 Texture 的第 77 帧,而真正的 The Secret of Monkey Island 片头的第一个画面则出现在第 281 帧。我们想创建一个动画,让摄像机在前 100 帧期间逐渐靠近屏幕。在此期间,房间里的灯光强度会逐渐降低到 0,同时屏幕必须保持黑色。然后,片头画面应该立即出现,并跳过 Lucasfilm Games 标志的部分。我会通过插入所需的 Keyframes 来创建摄像机移动和灯光变化。
由于我们希望从影片的第 280 帧开始播放,因此需要在 Offset 字段中输入 280。另外,由于播放需要从 Blender Timeline 的第 100 帧开始,因此还需要在 Start Frame 字段中输入 100。

不过,如果我们预览动画,就会发现第 100 帧之前的影片画面仍然可见,而我们希望此时屏幕保持黑色。要解决这个问题,可以使用一个 Mix node 将影片输出与黑色进行混合,并为这个 Mix node 的 Factor 设置动画。具体来说,我们让 Factor 在第 99 帧之前一直保持为 0,并在第 99 帧插入一个 keyframe,然后在第 100 帧将其设置为 1,并在第 100 帧再插入一个 keyframe。这样就能在这两帧之间实现瞬间切换。如果黑色是 Mix node 的第一个输入,那么 Factor 一开始应设置为 0,之后再设置为 1,因为 Factor 为 0 时只使用第一个输入,而 Factor 为 1 时只使用第二个输入。



本教程就到这里!如果你觉得这个教程有帮助,可以通过点赞并订阅频道来支持我!我们很快再见!