碰撞是场景中 Nucleus 对象(nCloth、nParticle 或被动对象)之间发生的交互。nCloth 和 nParticle 对象也可以与其自身碰撞,称为自碰撞。当 Nucleus 对象发生碰撞或自碰撞时,会进行能量的交换或变换,这会影响对象的行为方式。例如,如果移动的被动对象球影响 nCloth 枕头,则球的力和影响将导致枕头变形。
某些 Nucleus 对象特性会影响 nDynamic 碰撞的强度和质量。例如,“碰撞强度”(Collide Strength)可用于调整碰撞 Nucleus 对象生成的力的大小,以及将 nCloth 和被动碰撞对象的选定顶点排除在碰撞之外。在 nClothShape 节点上,“厚度”(Thickness)确定 nCloth 与其碰撞体积之间的距离。在 nParticleShape 节点上,“自碰撞宽度比例”(Self Collide Width Scale)确定从相同 nParticle 对象发射的粒子之间的碰撞距离。在 Nucleus 节点上,“最大碰撞迭代次数”(Max Collision Iterations)确定 Maya Nucleus 解算器每模拟步长尝试解决 Nucleus 对象碰撞的最大次数。“向外推”(Push Out)、“陷阱检查”(Trapped Check)和“交叉推力”(Crossover Push)nClothShape 属性也尝试通过解决穿透提高 nCloth 碰撞。
可以从场景中的任何多边形网格创建被动对象,并将其指定给同一 Maya Nucleus 解算器作为要与其交互的 nCloth 和 nParticle。被动对象可以与其他 Nucleus 对象交互,但内部 Maya Nucleus 解算器特性和外力对其没有影响。创建被动对象时,被动对象控制柄显示在场景视图中的网格上,并且 nRigidShape 选项卡显示在“属性编辑器”(Attribute Editor)中。可以使用被动对象控制柄来快速选择被动对象的 nRigidShape 节点,该节点将成为“属性编辑器”(Attribute Editor)中的当前选项卡选择。
被动对象可帮助创建即将接触非布料对象的布料对象的逼真行为。例如,如果角色穿着一件 nCloth 衬衫,可以将角色的身体设定为被动对象。在动画期间,当角色在肘部弯曲其手臂时,nCloth 的行为方式将像已与角色的手臂接触一样。对于 nParticle,被动对象提供了一个曲面,该曲面偏转已发射粒子,如散射火花或泼墨液体。可以使用大量的 nParticle 填充建模的具有凹区域的被动对象。
若要在被动对象和其他 Nucleus 对象之间发生碰撞,必须在其各自节点的“碰撞”(Collide)特性中启用“碰撞”(Collide)属性。此外,可以设定要碰撞的 nCloth 和被动对象组件(顶点、边或面),方法是使用其各自节点的“碰撞”(Collisions)区域中的“碰撞标志”(Collision Flag)下拉菜单。
如需对被动对象碰撞进行其他控制,可以使用“禁用碰撞”(Disable Collision)或“排除碰撞对”约束将组件包括在碰撞之内或将其排除在外。请参见“nConstraint > 禁用碰撞(nConstraint > Disable Collision)”和“nConstraint > 排除碰撞对(nConstraint > Exclude Collide Pairs)”。也可以使用“向外推”(Push Out)、“陷阱检查”(Trapped Check)和“交叉推力”(Crossover Push)nClothShape 或 nRigidShape 属性解决被动对象穿透。
有关碰撞创建的详细信息,请参见创建和编辑 nCloth 碰撞和设定 nParticle 碰撞特性。
如果对象被指定给同一 Maya Nucleus 解算器,则可以在 nCloth 和 nParticle 对象之间创建碰撞和交互。指定给同一解算器的 Nucleus 对象也以相似方式受解算器特性的影响。例如,解算器生成的风力将导致以与风力相同的方向对 nCloth 和 nParticle 对象设定动画。但是,根据对象的各个属性(例如“质量”(Mass)和“升力”(Lift)),这些对象将作出不同的反应,从而影响 nCloth 和 nParticle 对象彼此碰撞的方式。
若要在 nParticle 和 nCloth 对象之间发生碰撞,必须启用其各自节点的“碰撞”(Collide)属性。此外,对于 nCloth,可以通过设定“碰撞”(Collisions)区域中的“碰撞标志”(Collision Flag)下拉列表,设定与 nParticle 碰撞的 nCloth 对象组件(顶点、边或面)。
默认情况下,属于同一 Nucleus 解算器的所有 nParticle、nCloth 和被动碰撞对象彼此碰撞。如果不希望场景中的所有 Nucleus 对象发生碰撞,可以在创建对象之前或之后,将其指定给不同的 Nucleus 解算器。也可以使用“禁用碰撞”(Disable Collision)或“排除碰撞对”使 Nucleus 对象不发生碰撞。请参见禁用碰撞和排除碰撞对约束。
对于 nCloth,自碰撞发生在 nCloth 对象的组件(例如其顶点或面)之间。自碰撞对于动画 nCloth 在接触其自身时模拟布料交互非常重要。例如,如果沿幕杆推开 nCloth 幕布片,它将开始倾斜并相对自身打褶,导致布料变形。也可以想像一下标志在风停止后折叠自身的方式,或舞蹈者身上的伞裙在舞蹈者更改方向时的碰撞方式。
对于 nParticle,会在属于同一 nParticle 对象的各个粒子之间发生自碰撞。与 nParticle 和其他 Nucleus 对象之间的碰撞一样,自碰撞涉及能量的交换或传递。nParticle 自碰撞可用于模拟刚性对象之间的交互。例如,可以使用 nParticle 实例化几何体并让几何体彼此碰撞。
若要发生自碰撞,必须在 nClothShape 或 nParticle“属性编辑器”(Attribute Editor)选项卡的“碰撞”(Collisions)区域中启用“自碰撞”(Self Collide)属性。此外,可以使用 nClothShape 选项卡“碰撞”(Collisions)区域中的“自碰撞标志”(Self Collision Flag)下拉列表,设定参与其自碰撞的 nCloth 组件(“顶点”(Vertex)、“顶点边”(VertexEdge)、“顶点面”(VertexFace)和“完整曲面”(Full Surface))。也可以使用“最大自碰撞迭代次数”(Max Self Collide Iterations)和“自碰撞宽度比例”(Self Collide Width Scale)提高和降低 nParticle 和 nCloth 对象的自碰撞质量。
Maya Nucleus 解算器经过多次迭代以计算出 Nucleus 对象碰撞的正确行为。迭代的次数越大,对象碰撞越精确,模拟速度越慢。可以通过在 Nucleus 节点上设定“最大碰撞迭代次数”(Max Collision Iterations)属性或在 nClothShape 和 nParticleShape 节点上设定“最大自碰撞迭代次数”(Max Self Collide),钳制 Maya Nucleus 解算器可对 Nucleus 对象碰撞和自碰撞执行的迭代次数。
也可以通过增加 Maya Nucleus 解算器使用的子步数提高 Nucleus 对象碰撞的精确度。子步确定 Maya Nucleus 解算模拟的次数,并逐帧计算对象的碰撞。调整“子步”(Substeps)可以控制模拟时间被分解为计算分段的方式。每帧的每个子步可能会出现多次解算器迭代。子步对于快速碰撞的快速移动对象非常有用(如果每帧仅计算一次,这可能会丢失)。可以使用 Nucleus“属性编辑器”(Attribute Editor)选项卡的“解算器属性”(Solver Attributes)区域中的“子步”(Substeps)属性,设定 Maya Nucleus 解算器使用的子步数。
可以使用“碰撞强度”(Collide Strength)属性指定 Nucleus 对象彼此碰撞时生成的力的大小。“碰撞强度”(Collide Strength)可用于控制 nCloth、nParticle 和被动对象彼此之间是完全碰撞还是部分碰撞。如果为默认值 1,对象完全碰撞;如果为 0 和 1 之间的值,则衰减完全碰撞。“碰撞强度”(Collide Strength)值 0 与禁用对象碰撞具有相同的效果。
使用“绘制 nCloth 属性工具”(Paint nCloth Attributes Tool),可以在 nCloth 和被动碰撞对象上逐顶点绘制“碰撞强度”(Collide Strength)值。通过绘制“碰撞强度”(Collide Strength)值,可以禁用或衰减选定顶点的碰撞力,而无需创建“禁用碰撞”(Disable Collision)约束。
请参见碰撞强度。
nParticle 包括“碰撞强度比例”(Collide Strength Scale)渐变,用于针对每个粒子映射“碰撞强度”(Collide Strength)。使用内部每粒子渐变,可以将“碰撞强度”(Collide Strength)映射到一些特性,如“半径”(Radius)、“质量”(Mass)或“年龄”(Age)。这使您可以在 nParticle 碰撞强度基于单个 nParticle 的大小、质量或年龄时创建效果。请参见碰撞强度比例和 nParticle 内部渐变和每粒子属性。
可以使用碰撞层来组织共享相同 Maya Nucleus 解算器的多个对象之间的碰撞。使用 nClothShape 和 nParticleShape“属性编辑器”(Attribute Editor)选项卡中的“碰撞层”(Collision Layer)属性,可以指定 nCloth 或 nParticle 对象所在的碰撞层。相同碰撞层上的 nCloth 和 nParticle 对象以正常方式发生碰撞。但是,当 Nucleus 对象位于不同的层时,较低值层上的对象将比较高值层上的对象具有更高的优先级。
例如,碰撞层 0.0 上的 nCloth 对象将推动碰撞层 1.0 上的 nCloth 对象,继而推动碰撞层 2.0 上的 nCloth 对象。该碰撞优先级发生在由 Nucleus“属性编辑器”(Attribute Editor)选项卡的“碰撞层范围”(Collision Layer Range)属性设定的范围中。
可以设定“碰撞层范围”(Collision Layer Range),以指定两个 Nucleus 对象的顺序必须如何接近才能发生碰撞。如果两个对象的“碰撞层”(Collision Layer)值之间的差异小于“碰撞层范围”(Collision Layer Range),对象将可以发生碰撞。例如,如果对象 A 具有的“碰撞层”值为 2,对象 B 具有的“碰撞层”值为 5,则“碰撞层”值之间的差异为 3。因此,仅当“碰撞层范围”(Collision Layer Range)值小于 3 时它们才可以发生碰撞。
有关使用碰撞层的详细信息,请参见设定碰撞层。