跳转到内容

Blender 3D:菜鸟到高手/基础动画/弹跳

来自维基教科书,为开放世界提供开放书籍

如何制作一个逼真的弹跳球!

[编辑 | 编辑源代码]

本教程假定您具备基本的 Blender 知识,以及一些有关使用 Blender 网格和关键帧基础知识的 Blender 面板。了解 IPO 曲线在后面会很有用,因为我们会进一步学习更高级的技术。

移动一个球能有多难?

[编辑 | 编辑源代码]

在屏幕上放置一个球体并将其动画设置为上下移动非常容易,但说实话,它看起来不像弹跳球。它不会以任何方式令人信服。

为了可信,球体必须使用一些良好的动画最基本原理。特别是,球体必须在落下、撞击地面、反弹和再次升起准备再次落下时 **压缩** 和 **拉伸** 以及改变 **速度**。只要稍微努力,我们就能让那个无聊的球体看起来栩栩如生!

为什么要使用网格?

[编辑 | 编辑源代码]

可以使用不使用网格对象的简单弹跳球动画,但使用网格,我们不仅可以弹跳球体。例如,一旦我们有了我们想要的弹跳球,我们就可以为球体添加旋转,使其在空中旋转和弹跳,然后,随着弹跳减少,球体可以滚动到静止。如果不使用网格,这将是一个更复杂的练习,因为旋转的压缩和拉伸的球体看起来像是它在空间中摇晃(就像让一个扁平轮胎的扁平部分围绕轮胎旋转,而不是始终保持在底部,即使车轮在转动)

那就开始吧

[编辑 | 编辑源代码]

首先,在 **顶视图**(NUM7)中添加一个 UV 球体(空格键添加>网格>UV 球体)。在顶视图添加物体很重要,以保持它们的 **Z 轴** 向上对齐。根据需要在球体上设置平滑和细分曲面。按下 Tab 键返回 **物体模式**,然后立即添加一个网格(空格键添加>网格)。调整大小(S 键)以使其紧密包围球体。使网格的边缘与球体的圆周对齐,因为这将使动画更容易。

(默认情况下,网格物体名称为“网格”。最好为所有物体提供唯一且合理的名称,尤其是在您计划创建复杂场景时。因此,您可以将球体命名为“Red_Ball”,将网格命名为“Red_Ball_Latt”或类似名称,以便以后轻松引用和识别。) (菜鸟小贴士:我养成了用全部大写字母命名一切的习惯。随着场景变得越来越复杂,我可以轻松地跟踪我已经命名了什么以及需要命名什么。)


UV 球体在选定网格内的顶视图

让网格变形球体

[编辑 | 编辑源代码]

在 Blender 2.4 之前,物体是通过网格变形选项与网格关联的。在 2.4+ 版本中,您可以选择物体(球体)并为其应用网格修改器(Ob: 网格)。但是,如果您使用这种新方法,球体将不会移动到网格移动的位置,并且当网格压缩时球体也不会压缩,而我们希望它做到这两点。

幸运的是,您仍然可以使用旧的 **关联选项**,然后使用修改器面板使网格变形“真实”。因此,选择球体,然后按 SHIFT 键选择网格,然后按 **CTRL-P** 键进行关联,并选择“**网格变形**”选项。如果您现在只选择球体,按下 **F9** 键,查看修改器面板,您将看到“**网格父级变形**”的列表,以及“**设为真实**”按钮。您可以忽略此按钮或按一下它。现在它实际上并不重要。如果我们想要对球体做一些奇怪的事情,比如踢它或以其他复杂的方式变形它,那么我们必须使用“真实”网格修改器选项。

因此,这可能不是使用网格的最纯粹方法,但它是实现我们想要的结果的便捷方法。基本上,它有效并且相当直观。


使用关联选项的网格修改器屏幕。


如果您按下“设为真实”,您将启用完整的网格修改器。

(在后面的版本中,似乎这些都不需要。只要关联了它,就会出现完整的网格屏幕。)

您可以通过选择网格并调整大小、移动或旋转它来轻松地检查网格是否按我们想要的方式工作。**球体应该做网格做的一切。**我并不想让这成为关于网格的完整课程,因此,如果您不理解以上任何内容,或者您确定您的网格没有按预期工作,那么请在继续之前学习一些关于 网格 的知识。

开始动画制作!

[编辑 | 编辑源代码]

对于我们的基本动画,我们将使用仅 23 帧,从球体处于较高位置开始,然后落下、压缩、反弹,并最终回到起始位置。当在 3D 窗口中回放时,它将循环,我们会看到球体在一个地方永远弹跳。

这部分在“SCR:1 - 动画”视口配置中更易于完成。通过右键单击调整视口大小箭头并选择“拆分区域”,然后创建一个顶视图、侧面视图等,在视口中打开多个正交视图也很有用。

转到 **正面视图**(Num1)按下 F10 并将您的起始(Sta)帧设置为帧 1,将您的结束帧设置为帧 23。然后确保您处于 **帧 1**(Shift+左箭头)以开始动画制作。请注意,我们正在 **对网格进行动画制作**,而不是对球体进行动画制作。我们对网格所做的所有操作都会直接影响球体。

注意:对网格的所有修改都必须在“物体”模式下进行。否则,它们会影响所有帧。

选择网格(**不是**球体),然后在相应的帧上执行以下操作

  • **帧 1:**按下 I 键并为 LocRotScale 设置一个 **关键帧** - 球体的起始位置(较高)。
  • **帧 11:**将网格移动到地面级别,并再次为 LocRotScale 设置 **关键帧** (现在保持落下的距离很小)
  • **帧 13:**将网格保持在与帧 11 相同的位置,并再次为 LocRotScale 设置 **关键帧**。
  • **帧 23:**将网格移动回起始位置(如果需要,可以使用 Num(N)面板)并再次为 LocRotScale 设置 **关键帧**。

(菜鸟注意- 这可能看起来很明显,但在插入关键帧之前移动网格。)

这四个帧提供了基本的上下动画,底部有一个暂停。我们可以添加帧 12 上的压缩以完成。

  • **帧 12:**将光标放置在网格的底部,然后将旋转/缩放枢轴设置为“3D 光标” 沿 Z 轴缩小网格 **S 键-Z 键**,查看球体压缩。再次按下 **I 键** 设置 LocRotScale 的关键帧。

设置完所有五个关键帧后,你可以循环播放动画,你应该可以在我们刚刚设置的关键帧上看到以下结果。
我们五个关键帧中,3D 窗口的正面视图截图。

现在,如果你在3D 窗口中按下Alt-A,你应该看到球在反弹。即使压缩只发生在一帧上,我们的大脑仍然能正确地解读它,并且比没有压缩的动画有了很大的进步。 (按下RMBESC停止动画播放)

如果你有一个设置好的相机和灯光,你可以渲染动画并使用Blender的“PLAY”按钮循环播放渲染的动画。 在页面底部查看根据以上步骤制作的 OpenGL 渲染结果。 为球体和地面添加材质,可以获得更有趣的结果。

查看 IPO 曲线

[编辑 | 编辑源代码]

如果你想让球反弹三次,你可以重复以上操作三次——如果你有耐心的话——但Blender有更好的、更简单的方法。

选择 Lattice,然后打开一个 IPO (InterPOlation) 窗口,放大关键帧组。如果从右侧的通道列表中选择 LocZ 和 SizeZ,你应该会看到类似于下图的画面(我在截图中添加了标签)。

注意这里 IPO 类型为“对象”。纯粹主义者可能会对此感到不安或困惑,但请记住,我们并没有真正地以纯粹的 Lattice 修改器形式使用 Lattice。 不用担心,它能正常工作。


Lattice 的 IPO 曲线,显示 LocZ 和 SizeZ 通道。

它显示了 Lattice 在 Z 轴上的相对位置和 Z 轴上的大小。你可以看到,大小在第 11 帧之前保持不变,然后减小,然后恢复并保持不变直到第 23 帧。类似地,LocZ 曲线显示了球体从高处开始,下降,然后在再次上升之前停止。LocZ 曲线的圆形底部是因为 IPO 曲线映射了 Lattice 的中心点,当我们压缩它时,中心点会略微降低。

特别值得注意的是,默认情况下,Blender 使用贝塞尔曲线作为 IPO,这使得曲线呈现出圆形的顶部。这意味着球体开始缓慢向下移动,然后加速直到到达底部。同样,当它接近顶部时,它会再次减速。这很好,因为这正是现实生活中球体上升和下降时发生的情况 (它可以做得更好——但这是一个良好的开端)

在 IPO 窗口中,选择两条曲线,然后按下KKEY,你将会看到每个关键帧由一条垂直线指示。(注意: 如果你记不住这个快捷键,也可以按下查看->显示关键帧——过去这对我很有帮助)。


设置为显示关键帧的 IPO 窗口

Bouncing ball animated GIF
弹跳球的动画 GIF

按下AKEY选择所有关键帧,然后复制 (Shift-D) 它们。曲线看起来会变形,但当你将帧向右拖动时,它们会自动排列。将它们放置在“第一”帧在第 24 帧处,而新结束帧现在在第 46 帧处。重置场景 (F10) 窗口中的结束帧,然后再次观看动画。效果还不错。你可以重复这个过程来实现更多的反弹。(要让它在一个长动画中永远反弹,请忽略上述步骤,只需在曲线菜单中将“扩展模式”设置为“循环”。你可能需要稍微调整一下第一帧和最后一帧的曲线,但你只需要做一次,Blender 会将更改应用到所有其他循环)。

新手提示: 不用 IPO 窗口,转到图形编辑器。我无法找到任何在每个关键帧上显示黄色线的方法,如上图所示,但使用 A  在每个关键帧上放置贝塞尔控制点。我需要进行实验才能弄清楚如何使用它们。 SHIFT  D  与上面相同。

对于一个开端来说还不错,但要让这个球体达到申请动画工作的标准,还有很多事情要做。

注意: 在更新版本的 Blender 中,你可以进入图形编辑器,使用 AKEY 选择所有图形,然后选择通道-外推模式-设置为循环。这将外推现有图形以覆盖所有帧。

保存动画

[编辑 | 编辑源代码]

你如何在 Blender 中指定保存动画帧的位置?答案就在渲染设置 (F10) 中的“输出”迷你窗口中。 在窗口顶部附近有两个可编辑的文本字段,第一个在我的 Linux 系统上最初设置为“/tmp/”,第二个设置为“//backbuf”。第一个是输出路径名或目录前缀,用于在按下“ANIM”按钮时将生成的帧保存为 JPEG 文件。如果它不包含“#”字符,则它用作目录前缀;因此,默认情况下将动画帧保存为/tmp/0001.jpg, /tmp/0002.jpg等等。另外,如果你在文件名规范中输入了包含“#”字符的字符,那么这些井号将被替换为帧号。因此,如果我将字段设置为“/home/ldo/Documents/BlenderTuts/ball####.jpeg”,则帧将被保存到该/home/ldo/Documents/BlenderTuts目录,并命名为ball0001.jpeg, ball0002.jpeg等等。

接下来做什么?

[编辑 | 编辑源代码]

在现实生活中和典型的卡通片中,球体不会一直在一个地方无限反弹。它们会移动并逐渐失去反弹力,然后滚动到停止。而且它们比我们正在制作的弹跳球更有特点。

接下来需要考虑的事项

  • 完善压缩——保持体积
  • 添加拉伸
  • 观察加速和减速
  • 让球体在反弹时旋转
  • 随着时间的推移降低反弹高度
  • 让球体在反弹时四处移动

查看此动画链接 (580kb, AVI-DivX) 以了解如何通过多花一点力气就能获得有趣的结果。 but its k? k

弹跳球动画原理: http://www.idleworm.com/how/anm/01b/bball.shtml

Blender 2.49B 弹跳球动画: http://www.youtube.com/watch?v=BEY_6dFdUJY

Blender 2.49B 矢量模糊动画,为动画添加真实感: http://www.youtube.com/watch?v=qY4WcNgEXv8

华夏公益教科书