AnimDynamics动画蓝图节点是一种轻量级的物理模拟解决方案。它能让角色的部分骨骼网格体实现基于物理的附属动画。相比功能更丰富的RigidBody节点,Anim Dynamics节点是一种更加轻量级的物理模拟解决方案。

借助AnimDynamics节点,你可以将物理模拟效果用于角色的项链、手镯、背包、导线、毛发、布料或任何与角色一起运动的物品。
要将Anim Dynamics物理模拟运动施加在角色的骨骼网格体上,你必须首先在Anim Dynamics节点的细节面板中的 边界骨骼(Bound Bone) 属性中定义将构成动态结构的骨骼。之后,你可以设置将施加在角色动画上的行为和约束。
在这个例子中,Anim Dynamics节点用于动态控制角色的天线运动,使其动态响应角色头部动画。
![]() |
![]() |
---|---|
Anim Dynamics已禁用 | Anim Dynamics已启用 |
概述
AnimDynamics节点是一种在AnimGraph中运行的低开销解算器。为了实现低开销,AnimDynamics节点采用了一些值得留意的近似解算方法:
-
使用盒体而非定义的动态骨骼来计算各节的惯性。
-
不计算碰撞。相反,使用约束来限制移动。
AnimDynamics节点支持线性约束、角约束和平面约束,以便模拟基于物理的的运动。线性(Linear) 和 角(Angular) 约束可以受弹簧的驱动,提供更有弹性的感觉,而 平面(Planar) 约束可用于创建对象不会穿过的平面。你可以切换各个约束,并在Anim Dynamics节点的细节面板调整它们的相关属性。

单体模拟
借助Anim Dynamics节点,你可以将物理模拟运动施加在角色身上的带骨骼对象上。下图是一个会随着角色运动而摆动的鼓。
![]() |
![]() |
---|---|
Anim Dynamics已禁用 | Anim Dynamics已启用 |
将鼓的骨骼设置为 边界骨骼(Bound Bone) 后,你可以使用 盒体约束(Box Constraints) 属性定义其边界。局部关节偏移(Local Joint Offset) 是一个偏移量,用于附加约束,并定义枢轴点。如果设为0,你可能看不到任何移动,因为它不知道从哪里旋转。调整此值,直到实现你所需的移动。
此处设置了 边界盒体(Bounding Box) 和 局部关节偏移(Local Joint Offset) 属性,以便包含整个鼓对象。

此外还设置了 旋转约束(Rotation Constraints) ,以便鼓可以从静止位置以有限幅度弹动(用绿色角覆层表示),实现更逼真的运动。

有关使用Anim Dynamics节点创建动态动画的更多信息,请参阅创建动态动画指南。
外部力量
你还可以在模拟主体上施加 外部力(External Forces)。默认情况下,你可以使用AnimGraph中的引脚来施加 外部力(External Force) 向量。

有关通过Anim Dynamics节点使用 外部力 创建动态动画的更多信息,请参阅创建动态动画指南。
链条
Anim Dynamics节点的一种用途是模拟链条的运动。

相比于单体动态骨骼,链条模拟的开销高得多,因为链接约束现在需要解算,并且需要更多迭代才能正确收敛。迭代计数也可以按节点配置。
通过启用 链(Chain) 属性,并选择 边界骨骼(Bound Bone) 和 链端(Chain End) ,Anim Dynamics将使用两者之间的骨骼生成链。除了 边界骨骼(Bound Bone) 之外,链中的每块骨骼都将在其上方生成一个约束盒体,以模拟与链中其他骨骼的运动和碰撞。这些约束盒体需要手动调整才能实现不错的效果。

重叠约束可能导致效果不理想,如骨骼乱舞和运动行为不受控。如果你遇到这类情况,请确保链约束未重叠。
碰撞模拟
你可以使用 平面(Planer) 和 球体(Spherical) 限制来利用模拟结构启用简单的碰撞模拟。
平面限制
借助平面限制,你可以设置将限制结构移动的平面,确定对象无法跨越的边界,如骨骼网格体的其他部分或地面。

在Anm Dynamic细节面板中,你可以通过 使用平面限制(Use Planer Limits) 属性启用平面限制,然后使用 添加(+)(Add (+)) 索引创建平限制。借助每个索引,你可以将 驱动骨骼(Driving Bone) 设置为平面限制位置的参考点。然后,你可以使用 平面变换(Plane Transform) 属性设置平面限制的 位置(Location) 、 旋转(Rotation) 和 缩放(Scale) 属性,确定Anim Dynamics结构无法跨越的平面边界。
例如,将平面限制添加到角色的 根骨骼 ,可以创建对象无法跨越的地面边界,以防结构看起来穿过了游戏世界的地面。

球体限制
借助球体限制,你可以设置球体来包围模拟结构上的点,充当简单的碰撞预防,实现更动态的互动。

在Anim Dynamics细节面板中,启用 使用球体限制(Use Spherical Limits) 属性后,你可以添加索引,创建新的球体限制。对于每个索引,你可以设置 驱动骨骼(Driving Bone) 充当球体位置的参考点,并通过 球体局部偏移(Sphere Local Offset) 属性偏移它在 X 、 Y 和 Z 轴上的位置。你还可以设置球体 限制半径(Limit Radius) ,确定球体大小,设置限制类型,并确定球体如何与骨骼网格体交互。

将球体上的 限制类型(Limit Type) 设置为 外部(Outer) ,你可以使用球体限制,通过不允许物体穿过球体,防止结构碰撞。你还可以使用球体限制,通过将 限制类型(Limit Type) 设置为 内部(Inner) 来控制结构。
属性参考

此处你可以参考Anim Dynamics属性及其作用的列表。
属性 | 说明 |
---|---|
实时预览(Preview Live) | 启用后,将在视口中的网格体上绘制实时物理对象的预览。 |
显示线性限制(Show Linear Limits) | 启用后,将在视口中的网格体上绘制 线性限制(Linear Limits) (棱柱形)预览。 |
显示角限制(Show Angular Limits) | 启用后,将在视口中的网格体上绘制 角限制(Angular Limit) 范围的预览。 |
显示平面限制(Show Planer Limit) | 启用后,将在视口中的网格体上绘制 平面限制(Planer Limit) 信息(实际平面、平面法线)的预览。 |
显示球体限制(Show Spherical Limit) | 启用后,将在视口中的网格体上绘制 球体限制(Spherical Limits) 的预览。 |
显示碰撞球体(Show Collision Spheres) | 如果启用了 平面限制(Planer Limits) 并且 碰撞模式(Collision Mode) 设置为 自定义球体(Custom Sphere) 、 内部球体(Inner Sphere) 或 外部球体(Outer Sphere) ,将在视口中的网格体上绘制代表碰撞球体的预览球体。 |
重设模拟(Reset Simulation) | 重置此节点的模拟。 |
模拟空间 | |
相对空间骨骼(Relative Space Bone) | 当 模拟空间(Simulation Space) 设置为 相对骨骼(Bone Relative) 时,模拟会将角色骨架中选定的骨骼用作原点参考。 |
链(Chain) | 启用后,节点将使用解算器模拟连接链。 |
边界骨骼(Bound Bone) | 从角色骨架选择要附加物理主体的骨骼。如果启用 链(Chain) 属性,所选骨骼将成为定义链的顶部骨骼(首骨骼)。 |
链端(Chain End) | 启用 链(Chain) 属性后,从角色骨架选择的骨骼将成为定义链的底部或端。禁用 链(Chain) 属性时,忽略此属性。 |
盒体范围(Box Extents) | 设置盒体在 X 、 Y 和 Z 上的范围,用于物理模拟。模拟空间(Simulation Space) 上下文中的坐标,与 局部关节偏移(Local Joint Offset) 位置相关。 |
局部关节偏移(Local Joint Offset) | 设置 盒体范围(Box Extent) 从最近关节到 边界骨骼(Bounding Bone) 的位置偏移。 |
角弹性约束 | 设置在启用 角弹性(Angular Spring) 属性时使用的弹性常量。值越高,弹性越强。 要查看效果,必须已定义 角目标轴(Angular Target Axis) 和 角目标(Angular Target) 属性。 |
使用重力覆盖(Use Gravity Override) | 启用后,将使用 重力覆盖(Gravity Override) 属性值代替 重力缩放(Gravity Scale) 进行模拟。 |
重力覆盖(Gravity Override) | 当启用 使用重力覆盖(Use Gravity Override) 时,设置向量值覆盖 重力缩放(Gravity Scale) 。 |
模拟空间中的重力覆盖(Gravity Override in Sim Space) | 启用后,在模拟空间中定义 重力覆盖(Gravity Override) 。禁用后,在世界空间中定义重力覆盖(Gravity Override)。 |
重力缩放(Gravity Scale) | 设置模拟中重力使用的比例。值为1是完全重力重量,而值大于1会增加重力产生的力。 |
线性弹性(Linear Spring) | 启用后,主体会尝试将 线性弹性约束(Linear Spring Constraint) 属性值用作比例弹回其初始位置。 |
角弹性(Angular Spring) | 启用后,主体会尝试将 角弹性约束(Angular Spring Constraint) 属性值用作比例,将自身与指定的角目标对齐。 |
线性弹性约束(Linear Spring Constraint) | 设置计算线性弹性时要使用的弹性常量。值越高,弹性越强。 |
更新后数字解算器迭代 | 设置传递的关于 线性(Linear) 和 角(Angular) 限制的更新数量,可在细节(Details)面板的 约束(Constraint) 属性分段找到。更新后(Post Update) 表示设定的在解算器获取主体位置之后发生的更新传递数。 建议设置值应为设置的 更新前解算器迭代数(Number Solver Iterations Pre Update) 属性的四分之一左右。 |
进行求值(Do Eval) | 启用后,节点将执行骨骼变换求值。你可以禁用此属性,以直观地看到默认动画状态,快速将物理模拟与默认动画状态进行比较。 |
更新前数字解算迭代 | 设置传递的关于 线性(Linear) 和 角(Angular) 限制的更新数量,可在细节(Details)面板的 约束(Constraint) 属性分段找到。更新前(Pre Update) 表示设定的在解算器获取主体位置之后发生的更新传递数。 建议设置的值应该是设置的 NumSolverIterationsPostUpdate 属性值的四倍左右。 |
线性阻尼覆盖 | 设置要在启用 覆盖线性阻尼(Override Linear Damping) 属性时使用的值。 默认值为0.7。值低于0.7不会产生影响。 |
角阻尼覆盖 | 设置要在启用 覆盖角阻尼(Override Linear Damping) 属性时使用的值。 默认值为0.7。值低于0.7不会产生影响。 |
角偏差覆盖 | 设置要在启用 覆盖角偏差(Override Linear Bias) 属性时使用的值。 角偏差会减少链力的扭转,并默认为保持链条稳定性的值。模拟时,单体角力可能会在网格体的位置出现延迟。如果遇到此问题,你可以将 角偏差覆盖(Angular Bias Override) 的值向1.0f调整,直到问题解决。 |
进行更新(Do Update) | 启用后,节点将执行物理模拟更新。禁用时将显示基础动画姿势。此属性有助于切换节点的效果。 |
覆盖线性阻尼(Override Linear Damping) | 启用后,线性阻尼覆盖(Linear Damping Override) 值将用于应用线性阻尼。 |
覆盖角偏差 | 启用后,角偏差覆盖(Angular Bias Override) 值将用于为该节点中的主体应用角偏差。 角偏差会减少链力的扭转,并默认为保持链条稳定性的值。使用单体系统时,有时角力看起来像在网格体的运动中延迟,如果是这种情况,请启用 覆盖角偏差(Override Angular Bias) ,并将 角偏差覆盖(Angular Bias Override) 值向1.0f调整,直到问题解决。 |
覆盖角阻尼(Override Angular Damping) | 启用后,角阻尼覆盖(Angular Damping Override) 值将用于应用角阻尼。 |
组件线性加速度缩放(Component Linear Acc Scale) | 使用非世界空间模拟时,此属性会控制将多少组件的世界空间加速度传递给局部空间模拟。可在 X 、 Y 和 Z 轴上使用向量值。 |
组件线性速度缩放(Component Linear Vel Scale) | 当使用非世界空间模拟时,这将根据组件的世界空间速度对局部空间模拟中的主体施加阻力。可在 X 、 Y 和 Z 轴上使用向量值。 |
组件应用线性加速度限制(Component Applied Linear Acc Clamp) | 使用非世界空间模拟时,此为从 组件线性加速度缩放(Component Linear Acc Scale) 和 组件线性速度缩放(Component Linear Vel Scale) 属性派生的对加速度的整体限制。 |
线性XLimit类型(Linear XLimit Type) | 选择 限制(Limit) 可限制线性X轴运动。选择 自由(Free) 可禁用所有限制。 |
线性YLimit类型(Linear YLimit Type) | 选择 限制(Limit) 可限制线性Y轴运动。选择 自由(Free) 可禁用所有限制。 |
线性ZLimit类型(Linear ZLimit Type) | 选择 限制(Limit) 可限制线性Z轴运动。选择 自由(Free) 可禁用所有限制。 |
线性轴最小值(Linear Axes Min) | 设置最小值,以允许沿 X 、 Y 和 Z 轴作线性移动。 要锁定特定轴上的线性运动,请在 线性轴最小值(Linear Axes Min) 和 线性轴最大值(Linear Axis Max) 属性中将所需轴上的值设置为0。 |
线性轴最大值(Linear Axes Max) | 设置最大值以沿 X 、 Y 和 Z 轴作线性移动。 要锁定特定轴上的线性运动,请在 线性轴最小值(Linear Axes Min) 和 线性轴最大值(Linear Axis Max) 属性中将所需轴上的值设置为0。 |
角约束类型(Angular Constraint Types) | 选择约束角运动时要使用的方法。角(Angular) 将根据 角限制最小值(Angular Limits Min) 、 角限制最大值(Angular Limits Max) 、 角目标轴(Angular Target Axis) 和 角目标(Angular Target) 属性中设置的参数限制运动。椎体(Cone) 将限制椎体内的运动,其原点从 边界骨骼(Bound Bone) 的关节向量化,角度在 椎体角度(Cone Angle) 属性中设置。 |
扭转轴(Twist Axis) | 选择在约束角运动时将沿 X 、 Y 和 Z 中的哪个轴进行扭转。 |
椎体角度(Cone Angle) | 设置当 角约束类型(Angular Constraint Types) 设置为 椎体(Cone) 时要使用的椎角。 |
角度限制最小值(Angular Limits Min) | 设置 X Y 和 Z 每个轴上的最小角度限制,以在 角约束类型(Angular Constraint Types) 设置为角度时使用。 |
角度限制最大值(Angular Limits Max) | 设置 X Y 和 Z 每个轴上的最大角度限制,以在 角约束类型(Angular Constraint Types) 设置为角度时使用。 |
角目标轴 | 设置 X 、 Y 和 Z 轴,角度将用于与 角目标(Angular Target) 对齐。通常,这是指向 边界骨骼(Bound Bone) 的轴。 这受角弹性约束(Angular Spring Constraints)的影响。 |
角目标 | 设置对齐 角弹性约束(Angular Spring Constraint) 的轴。考虑对齐时,值为0将禁用轴,值为1将禁用轴。 属性值通常设置为指向骨骼。例如,该属性可能设置为(1.0, 0.0, 0.0),但你可以选择其他值,以将弹簧对齐到不同方向。 |
外部力量(External Forces) | 设置后,可以将外力施加于世界空间中指定的模拟中的所有主体。默认情况下,此属性显示为AnimGraph中节点上的引脚。另请参阅本页中的外部力量分段。 |
碰撞类型 | 设置在启用 平面限制(Planer Limits) 时使用的分辨率方法。选项包括: CoM(质心) :仅限制穿过平面的质心。 自定义球体(Custom Sphere) :使用指定的球体半径与平面碰撞。 内部球体(Inner Sphere) :使用完全匹配主体范围的最大球体与平面碰撞。 外部球体(Outer Sphere) :使用完全包含主体范围的最小球体与平面碰撞。 |
球体碰撞半径(Sphere Collision Radius) | 当 碰撞类型(Collision Type) 设置为 自定义球体(Custom Sphere) 时,设置半径以计算球体。 |
使用球体限制(Use Spherical Limits) | 启用后,将对球体限制进行求值。 |
球体限制 | 启用 使用球体限制(Use Spherical Limits) 后,你可以向数组添加球体限制。添加元素后,它的属性包括: 驱动骨骼(Driving Bone) :附加球体的骨骼。 球体局部偏移(Sphere Local Offset) :球体的局部偏移,如果没有设置驱动骨骼,则在节点空间中,否则在骨骼空间中。 限制半径(Limit Radius) :设置球体的半径。 限制类型(Limit Type) :是否将主体锁定在球体内(内部)或外(外部)。 |
使用平面限制(Use Planer Limits) | 启用后,将对平面限制求值。 |
平面限制 | 启用 使用平面限制(Use Planer Limits) 后,你可以向数组添加平面限制。添加元素后,它的属性包括: 驱动骨骼(Driving Bone) :当使用驱动骨骼时,平面变换将相对于骨骼变换。 平面变换(Planer Transform) :设置平面的变换。如果没有指定 驱动骨骼(Driving Bone) ,则它位于组件空间中,如果存在驱动骨骼,则位于骨骼空间中。设置平面 位置(location) 、 旋转(rotation) 和 缩放(scale) 属性的 X 、 Y 和 Z 值。 |
启用风(Enable Wind) | 启用后,此模拟中将考虑风对主体的影响。 |
风级(Wind Scale) | 设置级以在解算器中应用计算的风速。 |