动力学

Modo动态特性提供了一种自动对场景中的元素进行动画处理和定位的方法。动态特性允许为物品分配实际的物理属性,例如重量,弹跳和摩擦。然后,通过称为仿真的过程,在场景范围内评估分配的属性,包括作用在元素上的进一步影响以及它们与其他动态元素(碰撞)的相互作用。然后将生成的运动计算结果缓存并与场景一起保存,以用于时间线回放和渲染。以这种方式动态模拟运动会产生高度逼真的结果,否则,如果不是不可能的话,将很难产生。

Modo动力学系统使用与粒子相同的全局评估引擎,因此很多相同的工作流程可以应用于两种设置。由于它们内部的深度整合Modo,它们也可以一起工作,动态项目会影响粒子,粒子也会影响动态项目。该概述页面专门关注动力学,有关使用粒子的更多信息,请参见粒子与模拟

动态工作流程概述

Dynamics首先需要一个选定的元素来应用设置。尽管可以将动力学应用于任何定位器类型的项目(包括相机和灯光),但可以将其应用于模拟引擎,但这些非网格项目没有用于计算碰撞的体积。因此,任何模拟都应从网格项开始。另一个重要的考虑因素是中心位置相对于几何图形的位置。中心位置定义了对象的旋转原点以及重心。

选择目标网格后,使用Dynamics控件工具箱位于Setup接口。您还可以在Dynamics菜单栏的菜单。与所有动画元素一样,分配和使用动态元素时,您应该在“项目”选择模式下工作。

dynamic buttons

将对象指定为动态对象的基本工作流程是选择目标元素并为其分配动态项目的类型。单击工具箱中的相应按钮,例如Active Rigid Body (上面说明的工具箱)。这会将项目分配为动态项目,并添加新的项目Property子标签称为DynamicsProperties面板。选择此子选项卡可让您访问所有各种动态设置。它还向场景添加了一个新项目, 动力学求解器定义全局动力学设置(例如重力)的项,并存储所计算模拟的缓存评估。

动态项目类型

Toolbox

Dynamics工具箱提供了用于将项目分配为动态的多种选项。将任何项目标记为动态时,控件将添加到该项目的Properties下的面板Dynamics子标签。每个不同选项的属性实际上是相同的控件,但是针对所选动态项目的类型具有不同的基本设置。所有各种控件均在其文档的相应页面中进行了介绍。

主动刚体

主动刚体是一种不变形的动态物体,不会以任何方式变形,不会对所有形式的碰撞,约束,力和衰减产生反应,并通过直接交互影响其他动态项。此设置非常适合模拟各种坚硬的物体,例如块,岩石,保龄球,碎玻璃,滑雪杖;任何坚固且具有重量的物体都适合用于主动刚体设置。在模拟过程中,主动刚体完全在评估引擎的控制之下,并且不响应关键帧动画。使用以下方法可以对活动刚体进行附加控制动力约束条件

为了获得最佳结果,每个单独的对象都必须是其自己的项目层。一层中的多个对象被视为单个对象,但是根据形状的不同,它们可能会产生不令人满意的结果。对于网格物体,相对于几何体的中心位置定义了旋转原点,并且还充当了重量计算的重心,因此最好确保它位于对象的体积之内。任何定位器类型的项目都可以标记为Dynamic,但是任何非网格物体(例如没有体积可碰撞的相机和灯光)都需要连接到约束,以防止它们飞走。

复合刚体

复合刚体使您可以将一组单独但相互接触的项目连接在一起,将它们视为单个活动刚体。为此,请选择所有各个项目,然后点击Compound Rigid Body按钮。指定后,您可以分配一个Constraint Modifier可以在碰撞过程中将物品固定在一起。如果是养蜂人 Glue在模拟过程中,外力会超出该值,这会导致化合物的受影响部分单独折断。

分配时Compound Rigid Body选项,则将动力学软件包仅添加到单个网格中( Items清单)。其他关联的网格物体都从父项派生其动力学设置,其中Mass值在所有关联层之间平均分配。设置负的“复合胶水”值会使模拟将每个项目视为一个单独的动态实体,而不必使每个动态。“活动刚体”的相同要求适用于复合体的各个项目。

运动刚体

Kinematic Rigid Body该选项应用于动画碰撞对象;特别是用于碰撞的动画网格物体。其他定位器类型的项目(例如相机或灯光)不能用于碰撞形状。运动刚体与静态刚体具有相同的属性,这意味着它们不受力,衰减或其他对象碰撞的影响,但是它们会播放分配给该项目的任何关键帧变换动画(而不是变形)。这对于需要以受控方式与其他动态项目进行交互的对象很有用,例如彩票球动画中的连续旋转笼子。

静态刚体

静态刚体严格来说是不可移动的碰撞形状。它不响应关键帧动画,约束,力或衰减。如果该项目是动画的,则在模拟过程中将忽略动画,对象会停在第一帧,并在第一帧成为动态模拟的参与者。

程序粉碎

程序粉碎选项用于动态拆分网格,而无需手动预粉碎对象。您从一个网格开始并以多个网格结束,但是这些多个片段仅由程序中的一个程序粉碎项表示Items列出,保持事情整洁。您可以使用程序粉碎项的设置来控制对象的分解方式,包括子网格的处理方式。要应用,只需选择要粉碎的目标项目,然后单击Procedural Shatter按钮。此时的原始项目将成为代理,可以被隐藏或禁用。现在,当运行模拟时,该项目将根据场景中发生的任何碰撞自动分解。

动态曲线

动态曲线使您可以对曲线特定的元素进行动画处理,使它们对重力,碰撞,销钉,锚点和衰减产生反应。可以将曲线的动力学分配给样条曲线和用于头发引导的两点多段线链。曲线可以打开或关闭。曲线的动力学基于定义曲线本身的顶点的碰撞,就像它们的体积为零一样。要创建具有体积和宽度的曲线,请使用Render Curves网格项属性的选项,以及Use Render Radius下的选项动态物品的属性(默认情况下启用)。然后您可以指定一个Curve Radius值,以定义模拟曲线的实际大小。

动态曲线与其他动态项的不同之处在于,多个单独的曲线元素都可以包含在单个“网格项”层中,但是每个单独地反应。有关如何更改此行为的信息,请参见动态物品。此外,项目层相对于层内曲线的中心位置无关紧要,对曲线的变形没有影响。另外, Collision设置对曲线元素没有影响,因为会自动创建碰撞形状。通过在曲线的每个顶点之间创建虚拟碰撞形状(胶囊)来模拟具有体积的曲线。

注意:  在仿真过程中,与曲线位于同一层的任何多边形网格元素都将被忽略。

柔软的身体

软体是使柔性物品(例如窗帘,旗帜,桌布或橡胶轮胎)动起来的好方法。为了获得最佳结果,软体需要某种碰撞元素或为了防止他们飞走。碰撞对象可以是举着横幅的横条,也可以是桌布下的桌子。这些碰撞项应指定为任何一种刚体动力学类型。锚定将软体元素附加到刚体网格上的特定点,将它们固定到位。您还可以使用力量与软体互动。例如,您可以分配风或湍流来为柔体结果添加一些其他的真实感。

软体元素可以是开放的或封闭的网格项,并且不需要特定的中心位置。通过在网格的顶点之间添加微小的虚拟弹簧,可以计算出最终的软体形状。每种弹簧都有不同的设置。对于StiffnessStruct (结构)和Sheer

由于仅计算软体的顶点以进行碰撞,因此可能会出现碰撞网格的尖锐或尖锐区域。要纠正此问题,请增加Margin价值下Collision用于目标对象。有关更多信息,请参见动态物品

锚点

Make Anchors options用于将软体项连接到刚体项。为了获得最佳结果,刚体应为被动刚体,以防止其飞走。的Anchor选项可能对将旗标连接到旗杆很有用。为了使锚工作,请遵循以下特定工作流程:

1.   Items mode,选择目标软体项和目标被动刚体项。
2.   选择项目后,更改为Vertices模式(按1 (在键盘上),然后在软体项上选择至少一个顶点,在刚体上选择至少一个顶点(选择顺序并不重要)。
3.   选择顶点后,单击Make Anchors在里面Dynamics工具箱。

这两个项目现在已牢固地连接在一起,并在软体上添加了一个附加的锚定项目。

要断开连接,只需删除生成的锚项目。要进行调整,请按照上述说明移除锚并重新创建。

剧本

Modo提供现成的Python脚本作为将动态行为添加到场景中元素的快捷方式。当前有两个脚本可用: Dynamic Curves as HairShatter & Glue

作为头发的动态曲线

这会将头发类型动态添加到选定的动态曲线。可以通过将其应用到头发指南。例如,您可以添加头发指南,并在选择了指南的情况下,单击Dynamic Curves as Hair增加头发动力学。然后,您可以通过播放模拟来查看行为。

碎胶

结合打碎与胶水(由约束修饰符),这样物品会根据用户定义的粉碎碎片之间的粘合水平粉碎。

要应用此脚本,请突出显示该项目,然后单击Shatter & Glue。您必须先设置Dynamic Glue Strength对于对象,它对应于Glue Value约束修改器的属性。然后选择Shatter Type确定对象如何破碎。有关不同破碎类型及其属性的完整说明,请参见打碎

碰撞检测

动力学中的碰撞是限制曲面之间的相交的计算。例如,正是这种情况允许球反弹并滚下楼梯。没有它,动态物体会简单地彼此通过,而不会考虑或不知道对方的物品。在里面Dynamic该项目的子标签Properties面板是控制对象及其行为的设置。此选项卡中最重要的设置是关于碰撞,因为它定义了动力学计算如何看待对象。

默认, Modo根据项目层中实际几何图形的最佳猜测来分配碰撞类型。对于平面多边形,这是“平面”,对于圆形对象(例如,球),这是“球体”。但是,有时候Modo猜错了。错误的碰撞形状可能会导致相交错误并产生不令人满意的结果,因此,最好检查一下是否分配了最佳的碰撞形状。在大多数情况下,使用最适合几何体的最简单碰撞形状可获得最佳结果。仅当曲面相交本身存在问题时才需要与软体有关的碰撞,您可以通过启用Self Collision选项。

小费:  为了提高刚体的评估性能,可以与高分辨率网格分开创建低分辨率碰撞几何体,以简化仿真过程中的计算。一旦评估并缓存了动态,就可以将低分辨率碰撞对象设置为Render-No高分辨率对象可以作为低分辨率碰撞对象的父对象以进行最终渲染。

约束条件

如果将动力学严格地限制为仅计算对象之间的碰撞,那么即使生成适度复杂的模拟,它也会很快变得艰巨。仅仅依靠碰撞来产生例如车辆的旋转驱动轴的力学,无疑会引入误差并且计算起来非常昂贵。约束是将两个动态实体连接在一起的关节,它比单独的碰撞检测产生更准确的结果,而计算开销却很小。约束有多种类型,可以涵盖您需要的几乎所有类型的关节。您还可以堆叠多个约束以产生更复杂的效果,例如将点约束与滑动约束相结合以产生摆动和滑动运动,就像悬挂在高空滑索上的骑行,参与者滑行的骑行一样悬在两个接线柱之间的一根拉紧的长电缆上。

势力

在现实世界中,物体不断受到多种力的影响,这些力以微妙而不是微妙的方式影响其运动。风,重力,摩擦等。动力学提供了多种附加的特定作用力,以产生更加逼真的物理模拟。重力是主要的总体统治力,对全球所有动态机构起作用。由于这种无处不在,它是动力学求解器项目,全局影响所有项目。其默认值旨在模拟真实世界中与重力相同的全尺寸(1:1比例)的向下拉力。如果模拟未如您预期的那样做出反应,则场景可能无法建模为真实世界的大小,因为在相同的情况下,非常大的项目对非常小的项目的反应会大不相同。您可以缩放其对象,或缩放模拟以更紧密地匹配预期结果。有关缩放模拟的更多信息,请参见动力学求解器

Modo还提供了七个附加力类型,使您可以进一步控制仿真: LinearDragRadialTurbulenceVortexWindCurve Force。这些作为定位器类型添加项目层Items列表,并且默认情况下会像重力值一样全局影响动态项,尽管可以使用Schematic视图。每个部队都有自己的特殊功能,这些功能在动力话题。

衰减

衰减对于提供对力的额外控制非常有用。例如,如果风正在影响微风中轻飘飘的花瓣,然后将柔软的花瓣降落在盒子内。为了使盒子内部的风不受风的影响,可以使用衰减来消除盒子内部的风,从而增加了仿真的真实性。

动态使用相同衰减用于其他变形者Modo。变形衰减是指在衰减本身的影响范围内调节力对动态项的影响。不要与Modo用于几何图形创建和布局的建模衰减。从概念上讲,它们非常相似,但不是将其作为函数应用,而是将动态衰减作为定位器类型项添加到了Items列出您可以选择它们并修改它们的属性,甚至在场景中为其设置动画的位置。在该项目的属性中,您可以定义一个衰减范围,该范围可以调节对其施加的力。

与影响全局项的力不同,衰减必须首先附加到正在减弱的项上才能产生结果。这可以通过几种方法完成。通常,当使用Add Falloff中的按钮Dynamics工具箱。应用于柔软的物品时,可以使用变形视口,然后选择Soft Body Influence从列表中。通过右键单击该项目以打开上下文菜单,您可以选择Add Override选项并选择其中一个衰减,自动将其分配给软体。此外,您可以使用Schematic视口将两者连接起来,将两个项目都拖放到视口中,并将衰减项目的输出连接到强制项目的输入。有关使用Schematic视口,请参阅示意图视口

动态复制器

动态复制器将动力学,粒子和复制器的世界融合在一起,使您可以将“网格项”分配给粒子模拟,以喷射动态碰撞的物体。动态复制器有两种基本类型:运动学的,仅用作动画碰撞对象(作用类似于复制的运动学刚体),但在复制品之间不计算内部碰撞;动态的是正常的活动刚体,由运动自动生成。粒子模拟。

运动学

复制器与粒子模拟的结合可以严格用于碰撞形状,当您需要复制的物品来影响其他非复制器动态刚体元素但不受复制品之间的对象间碰撞影响时,复制器将非常有用。各个复制品从本质上讲就是运动刚体,它们对其他元素的反应方式。它们不会受到力,衰减或其他动力学对象的影响;它们只会对常规活动刚体产生作用,类似于作用力,使它们对碰撞产生反应。

创建运动复制器

1.   创建一个粒子模拟某种形式。您可以使用任何可用的各种发射器。
2.   接下来,在Items清单,在Add Items > Particles > Replicator
3.   添加后,将粒子模拟指定为Point Source在复制器项目的Properties面板,将目标“网格项目”(或一组项目)作为Prototype选项。
4.   Items列表,然后在Dynamics工具箱,单击Kinematic Rigid Body将其标记为一个。

这会将子标签添加到Properties复制器项目的面板标题为Dynamic Replicator,其中可以调整各种动态属性,例如Collision Shape对于原型及其BounceFriction价值观。

动态

复制器还可以与粒子模拟结合使用,以生成完全动态的网格物体,这些物体会碰撞并对力和衰减产生反应。可以将任何类型的粒子发射器指定为复制器。添加动力学特性使副本可以充当单独的活动刚体元素,该元素由粒子模拟的设置动态创建。

要创建动态复制器,您需要一个粒子模拟和一个将目标网格指定为“复制器”的复制器。 Prototype并将粒子模拟指定为Point Source。该工作流程与上面的Kinematic Replicator相同。正确分配后,使复制器成为动态文件:在Items列表,然后在Dynamics工具箱,单击Active Rigid Body将其标记为一个。此操作将“动态复制器”项添加到场景。此新项包含动态副本的动态属性设置,例如Collision ShapeBounceFrictionDensity。在Items列表以在Properties面板。

制作动态复制器时要记住的一个注意事项是,复制的项目应从发射器生成,该发射器的大小应足以容纳复制的网格项目的数量而不会产生明显的相交,同时还要考虑到Emission RateEmission Speed价值观。此外,“动态复制器项目”具有选项Time Until Collision,这会延迟对发出的复制器执行冲突检测的功能,该冲突检测器还可用于消除可能发生的任何冲突错误。

模拟控制

模拟动力学和粒子时,使用三个按钮,每个按钮都有其独特的用途。左侧的两个按钮直接在3D视口中提供连续的实时模拟,使您可以调整设置和移动对象,并在更改设置后查看结果。的Preview at Current Time按钮(空心箭头)专门在当前时间轴位置播放模拟,而忽略关键帧动画。的Preview Animation按钮(实心箭头)循环播放所有带有关键帧动画的时间轴。当您单击任一按钮时,它们将变为Stop然后可以按下这些按钮停止模拟回放。

最后一个按钮是Cache Simulation按钮。点击此按钮以打开Evaluation对话框,在其中输入所需的帧范围并指定Preroll值,即模拟实际上开始计算的第一帧之前的指定帧数。这很有用,例如,当需要在Start Time。实时播放控件和模拟计算之间的主要区别在于Compute Simulation选项可完全计算所有“物理速率”(子帧)步长值,这对于正确评估相交的碰撞尤其重要。实时控件始终使用以下帧步1,可能无法为快速或复杂的动态仿真提供足够的精度。缓存了模拟后,在运行模拟预览时将不再删除该模拟,并且只能通过计算新的模拟将其覆盖。

其他动力学注意事项

项目与组件

动画中Modo仅适用于物品。关键帧总是在Items mode在顶点,边和多边形模式下,在组件级别对对象进行建模。项目列表中的层应被视为容器。在Items mode,您正在编辑整个容器,但是在组件模式下,您正在编辑容器的内容。动力学仅作用于项目级别,即Items list是它自己的动态对象。因此,例如,如果您想拆开一堵墙,则每块砖都必须是其自己的单独项目层。您只需创建第一个砖项目,然后分配Active Dynamic Body标签以使砖块具有动态性。接下来,应用数组发挥作用Items mode堆叠后续的积木,每个积木都继承主对象的动态。创建完墙后,只需要做一个动画的破坏球,即可将砖块倒向地面,标记为Kinematic Rigid Body

中心与群众

刚体物体的重量取决于物品中心的位置。对象的中心点不仅代表对象的旋转中心,还代表对象的旋转中心。使用动力学时,它还表示对象的质心。动力学假设物体的重量围绕中心点平均分布,并且物体根据此假设运动。如果中心点距离项目的实际中心太远,或位于对象体积之外,则肯定会发生奇怪的行为。将鼠标悬停在相关的3D视口上,然后按一下即可看到对象的中心位置。 O键。在里面Visibility子标签中,有一个选项可显示所选项目的中心。

有几种方法可以处理已移动的中心,最简单的方法是在Items mode然后在菜单栏中单击Edit > Center to Bounding Box > Center。这会自动将中心点移动到对象的实际边界框中心(边界框基于模型的总体范围)。但是,更准确的选择是右键单击Items列出并选择Calculate the Center of Mass,然后使用匹配工具将中心移至结果定位器的位置。

您无法手动(通过关键帧)为活动的刚体设置动画,但是,可以对睡眠对象进行动画处理,并在唤醒它们后将其切换为动态,这种模式可以通过特定事件触发动态项目。有关睡眠的更多信息,请参见动态物品。如果动画对象需要从对象真实中心以外的位置旋转,请修改Pivot从那里定位并设置动画以保持适当的质心。

准确性

计算模拟时遇到的最常见问题是对象彼此通过(例如,当您将链链接放在一起以形成链,并且它们彼此完全掉落时)。尽管它可能是由许多问题引起的,但通常是由对象移动的速度引起的。一帧它们彼此分开,下一帧它们彼此通过。这意味着默认的子帧计算没有足够的时间来计算对象的碰撞。即使我们只看到整个帧值的结果,而且在帧之间可能发生很多事情。

您可以使用Physics Rate在中找到的值动力学求解器 (也正确计算所有关键帧项目的子帧)。这样做可以使动力学更加准确,但是其他计算需要更长的时间才能计算出来。用不同的值进行试验,以找到可以以最少的步骤数产生可接受结果的值。请记住,仅针对缓存的模拟计算子帧步长。实时选项始终仅按帧计算,因此对于快速仿真,可能需要每次都缓存仿真以正确预览准确的结果。

示意图视口

动态仿真可以使用示意图视口。实际上,在将动态元素添加到场景时,会在后台创建节点图。在将任何动态元素添加到Schematic视口。随着动态元素的添加,您可以看到它们已经连接。动态利用特殊Relationship用于定义项目之间链接的连接器。这些连接器看起来像钻石,而不是圆形。它们表示元素之间的双向信息流,这与用于将通道信息从一个项目驱动到另一个项目的常规通道连接不同。熟悉以下内容很有用Schematic视口,因为它允许使用高级选项来控制和自定义动力学模拟。例如,您可以将力节点连接到单个“网格项目”,并且它仅影响单个网格而不是将其全局应用。

除了网格物体执行个体也可以标记为各种类型的刚体ActiveKinematicStatic。虽然可以将它们标记为Dynamic,由于其结构静态网格物体不会在其他动态项目之间产生碰撞。

子弹物理

Bullet

动力学基于子弹物理,这是开源的碰撞检测和刚体动力学库,在ZLib许可下可免费商业使用。感谢Erwin Coumans和Bullet开发人员的努力和慷慨。