在本教程中,我们将学习如何设置一些 Rigid Bodies 和一个 Hinge Constraint,从而制作 Newton's pendulum 的动画。


本教程不提供中文配音。您可以在下方观看英语配音的视频,并选择中文、英文或其他语言的字幕。视频下方提供了翻译成中文的文字稿。


视频文字稿

在本教程中,我们将学习如何设置一些 Rigid Bodies 和一个 Hinge Constraint,从而制作 Newton's pendulum 的动画。本教程使用 Blender 3.6 版本创建。

首先,我使用了一个预先制作好的 3D 模型,其中包含基础结构以及大量带有各自支架的球体。

在这个 3D 模型中,球体和支架的 Origin 都已经正确设置在未来的旋转轴线上,但它们目前都被 parent 到结构对象上。

这是没有必要的,实际上还可能对物理模拟造成问题。

因此,第一步我会选中所有这些对象,然后使用快捷键 ALT P 解除 parent。接着,在屏幕上出现的 Separate 菜单中选择 “Clear Parent and Keep Transformation”。

实际上,我需要执行一些会对所有球体重复进行的操作,所以我可以删除除一个球体之外的所有对象。这样,我就可以在剩余的球体上完成这些操作,并获得已经预配置好的复制版本。

现在我们有两个对象:底座,以及第一个带支架的球体。

我们可以忽略底座,因为它不会参与物理模拟。

球体的 Origin 位于顶部,也就是旋转轴所在的位置。

这非常有用,因为正是在这个点上,也就是球体垂直轴线的位置,我们需要添加一个用于 Hinge Constraint 的辅助对象。

当我们向场景中添加新对象时,它会以 3D Cursor 所在的位置作为 Origin。因此,我使用快捷键 SHIFT S 将 3D Cursor 放到球体的 Origin 上,然后选择 “Cursor to Selected”。

现在我们需要一个辅助对象来应用 Hinge Constraint。任何对象都可以,因此我添加一个简单的 cube,并调整它的大小以便更容易观察。

缩放之后,我使用 CTRL A 应用 scale transformations。虽然在这个场景中这一步可能不是必须的,但养成这个习惯非常好。

选中 cube 后,在 Properties Window 中打开 Physics 标签,并添加一个 Rigid Body 组件,将其类型设置为 Passive。

这样,这个对象会参与 Rigid Body 模拟,但不会受到力的影响。正如之前所说,它将作为球体旋转的约束对象。

接下来,我们给球体添加 Rigid Body,但将类型改为 Active,因为球体需要根据重力和其他力进行运动。对象默认的 mass 值太低,所以我将其设置为 100 克。

另一个非常重要的修改是球体的 Collision Shape。默认情况下,该参数设置为 Convex Hull,但自动生成的 hull 在与其他对象交互时可能会产生一些问题。

因此,我将其改为 Mesh。这个选项会增加计算量,但能够提供更准确的结果。

Margin 参数的 tooltip 建议保留一个大于 0 的值。不过经过测试,我发现这里最好设置为 0,以避免物理模拟在开始时由于对象距离很近而错误检测到碰撞,即使它们实际上是静止的。

此外,我们还需要将 Bounciness 设置为一个非常高的值,例如 0.9。这样球体会产生很强的反弹效果,接近完全弹性碰撞。

在 Dynamics 部分,你还会看到一些与 Damping 相关的参数,它们用于控制速度或角动量随时间的衰减。稍后在对所有球体进行测试时,我们会再次调整这些参数。

在继续之前,先将场景保存为一个新的文件。

在整个教程过程中,我建议你在按下 Play 或开始 Bake 之前都先保存项目,因为在这个模拟中,如果没有先保存就按 Play,Blender 曾多次崩溃。

此时开始播放动画,球体会直接掉下去。

这实际上是正确的行为,因为我们还没有创建 Hinge Constraint 来将球体约束到之前添加的 cube 上。

不过在那之前,我们还需要进行一个修改:需要把球体的 center of mass 移动到球体几何体内部。方法是在 Edit Mode 中使用 SHIFT S 将 3D Cursor 放到球体中心,然后在 Object Mode 中右键选择 “Origin to 3D Cursor”。

现在球体和 cube 已经在垂直方向上完全对齐。

在最终渲染之前,我们可以隐藏 cube,不过现在让它保持可见会更方便。选中它,然后开始创建 Hinge Constraint。

和 Rigid Body 组件一样,Rigid Body Constraint 也需要在 Properties editor 的 Physics 标签中添加。

第一件事是将 Constraint 类型从 Fixed 改为 Hinge。

在 Objects 部分,你会看到两个字段,用于指定场景中的两个对象。Constraint 的工作方式是:将名为 Second 的对象,也就是会运动的对象,连接到名为 First 的对象,也就是保持静止的对象。

在我们的案例中,可以将 Cube 设置为 First,将球体设置为 Second。

但还没结束,因为在 Hinge Constraint 中,旋转是围绕 passive Rigid Body 对象的 local Z-axis 进行的。

本质上,Hinge 类似于 Point Constraint,但它会将摆动限制在这个轴上。而在本项目中,旋转需要围绕场景的 global X-axis 进行,而这个方向当前对应于 cube 的 local X-axis。因此,我们需要让 cube 围绕 Y-axis 旋转 90 度。为了显示 local axes,我将 3D view 的 Transform Orientation 改为了 Local。

现在按下 R Y 90 来执行这个旋转。

保存项目并启动模拟后……什么都不会发生!

因为球体的 center of mass 已经正确设置在内部,而且球体与 constraint 在垂直方向上完全对齐,处于平衡状态。

因此,我们需要给球体一个初始旋转,之后物理系统就会接管剩余的运动。

现在球体的 Origin 已经位于内部,如果能够围绕 cube 所在的位置旋转球体和它的支架,就会更加方便。

因此,我向场景中添加一个 Empty 对象,并立即将其重命名为 ROTATION。然后先选中球体,再选中 ROTATION Empty,按照这个顺序进行多选。最后按 CTRL P 创建 parent-child 关系,使球体成为 ROTATION Empty 的子对象。

这样,我们就可以通过旋转控制用的 Empty 来给第一个球体提供初始角度。现在保存项目并启动模拟。这一次,球体会按照预期开始运动。

创建其他球体实际上非常简单,因为我们可以直接复制第一个球体以及带有 Rigid Body Constraint 的 cube。

先将 ROTATION Empty 恢复到垂直位置,然后同时选中 cube 和球体,使用 SHIFT D Y 并移动鼠标进行第一次复制,把第二个球体放到第一个旁边。

我这里使用 SHIFT D Y,也就是限制复制后的移动沿 Y-axis 进行,从而让 Blender 将复制和移动视为一次操作。

这样我们就可以通过按 SHIFT R 来重复上一次操作,从而创建其余已经完美对齐的复制体。

如果复制体的位置正确,那么现在保存项目并启动模拟后,所有球体都会保持静止。

这说明 Rigid Body 模拟器没有在对象之间检测到错误的碰撞。

唯一的问题是,所有复制体都会被 parent 到 ROTATION Empty,而这个 Empty 只是用于控制第一个球体的初始方向。

不过,这个问题可以很快解决。选中所有复制体,使用 ALT P 将它们从 Empty 上解除 parent,然后选择 Clear Parent and Keep Transformation。

旋转控制第一个球体的 Empty,保存项目并启动模拟,查看最终得到的结果。

如果结果令人满意,下一步就是将带有 Rigid Body Constraints 的 cubes 从场景和最终渲染中隐藏,然后开始渲染。

如果中间的球体运动过于明显,可以尝试在初始配置中让它们彼此更靠近一些。记得移动球体时也要同时移动带有 constraint 的 cubes,否则球体会以自己的初始旋转开始运动。

为了加快模拟速度或者让球体摆动得更明显,我们可以调整几个参数。如果想一次性修改所有选中球体的参数,请按住 ALT 键并用鼠标点击要修改的参数。

对于球体,我建议提高 Bounciness 的值,并在 Rigid Body 标签的 Dynamics 部分大幅降低 linear movements 和 rotations 的两个 Damping 值。

不过,我不建议降低 Friction 值,因为这可能会让原本应该保持静止的球体产生不希望出现的移动。

在 Properties editor 的 Scene 标签中,你会找到 Speed 参数,它可以加速整个物理模拟。

在同一个标签中,你还会看到 Substeps 和 Solver Iterations 参数。

我建议只有在你发现物理模拟出现错误时才增加这些值。

这些参数会让 Blender 执行更多计算,从而获得更准确的模拟结果,但代价是模拟时间会增加。

好了,教程就到这里!希望你喜欢这个教程!我们下次再见!

搜索教程

输入短语,或输入多个用逗号分隔的关键词进行搜索。

本站提供 Francesco Milanese 制作的 3D 模型、教程及计算机图形相关资源。3D 模型的使用许可可通过各模型页面上的链接前往第三方商店购买,并须遵守适用的许可条款。 Francesco Milanese — 意大利增值税号:06321250877。 联系方式:info@francescomilanese.com


高级隐私策略信息和cookie文件的使用