# 骨骼物理模拟

Wallpaper Engine 可以让你为操控变形的骨骼配置物理模拟。在选中骨骼时,单击 编辑约束(Bone Constraints 骨骼约束)可以配置骨骼属性。在本指南中,我们将解释每个选项的作用,并向你展示一个示例。

向下滚动到本页最底部,可以查看所有骨骼约束选项的详细说明。

注意

请记住,物理模拟的行为可能会因用户设置 FPS 限制的不同而不同。Wallpaper Engine编辑器始终以高帧速率渲染。你可以将壁纸应用到桌面,然后在Wallpaper Engine设置中将FPS设置为 10-15 的较低帧率,查看壁纸在更局限的 FPS 规则下的性能。

# 骨骼物理模拟示例

我们将使用从角色表指南中武士的例子来展示两种不同类型的骨骼物理模拟实现。如果你想查看本指南的详细示例,可以点击这里下载示例项目

# 绳子物理

在第一个示例中,我们使用在其他操控变形指南中使用的武士角色,为他身上连接剑的绳子添加物理模拟:

为此,我们打开操控变形动画的骨骼界面,选择连接在武士的手和绳索底部主要骨骼的骨骼:

Puppet Warp - Rope Bone

然后,我们单击右侧的 编辑约束 按钮以打开 骨骼约束 菜单。在本例中,我们选择 刚体物理模拟 选项,并按如下方式进行配置:

  • 物理旋转: 启用 - 我们希望骨骼能够旋转,如上面的预览视频中所示.
  • 旋转摩擦: 12
  • 旋转惯性: 20
  • 物理平移: 禁用 - 我们不希望骨骼移动。
  • 启用重力: 启用 - 我们希望重力能够下拉绳索。
  • 骨骼末端质量: 20
  • 重力方向: 90 - 90意味着重力方向朝下。
  • 骨骼末端前倾角: 90 - 前倾角度决定了重力和运动对骨骼的影响。配置完此项后,请检查圆圈末端的棕色参考线,验证它的方向。
  • 限定旋转: 启用 - 将其设置为 -180 和 +180 以防止旋转过度。

你还会注意到,在骨骼预览中可以看到一个末端带有圆圈的棕色线,它是对前倾角度的可视化,你要确保它指向正确的方向(在本例中为重力方向)。

Puppet Warp - Rope Bone with Gravity enabled

这就是绳索物理模拟所需做的全部内容。你实际上不需要对骨骼本身进行动画处理,而是应该对父骨骼(在本例中为手)进行动画处理,绳索的骨骼将动态地跟随并模拟物理特性。你可能还需要对你的示例对上面的值进一步调整,因为我们不可能为你提供一个适用于所有情况的值,但你可以用上面的值作为基础,然后根据你的具体需要调整它们。

# 披风 / 布料物理

接下来,我们将通过物理模拟对一系列骨骼进行动画处理。我们将以武士的披风为例,因为它横跨多个骨骼,这些骨骼都专门用于披风布料的运动:

具体来说,我们要处理的是沿披风方向的四个骨骼,如以下截图所示,它们已经事先配置好:

Puppet Warp - Cape Bones

披风上的前三个骨骼使用 弹簧物理模拟,而左侧的最后一个骨骼使用 刚性物理模拟。这不一定是最好的解决方案,但我们认为在当前情况下,从结果来看起来相当不错,你也可以尝试将刚性和弹簧模拟混合使用,看看运动如何变化。

提示

记住,链接多个弹簧模拟的骨骼会转移它们的弹性运动,更容易导致不稳定的运动。

# 配置骨骼

大部分情况下,所有骨骼都维持默认设置。我们启用 限定旋转,将 -20 作为最小值,+20 作为最大值,以确保披风移动幅度不会过大。披风的第二个骨骼(右边)默认情况下启用了 重力,用来模拟向下的气流。其他元素的重力则被禁用,因为假如所有动作都来自武士自身的话,看起来会更自然。你可以进一步尝试,将 重力方向 设置为 180(表示向左),可以用来模拟强烈的侧方向的风。

# 配置前倾角度

在上面的例子中,你可以看到披风上的所有骨骼都有一个指向前方的角度,用末端有圆圈的棕色线表示,他就是前倾角的方向。重要的是,前倾角一般都指向下一个骨骼,你可以看到棕色圆圈总是在下一个骨骼的周围。

然而,有一个重要的例外,那就是披风的最后一个骨骼。你可以看到棕色圆圈的末端指向披风的末端。它必须通过更改 末端前倾角 的值来手动配置,直到前倾角指向正确的方向。要详细解释前倾角的工作原理会有点困难,但请务必检查最后一个棕色圆圈是否指向角色或物体的外侧。它的值实质上是 Wallpaper Engine 推断的基于默认方向的 偏移量

# 为披风制作动画

与绳索示例不同的是,我们还需要为所有物理模拟的披风骨骼添加了轻微的运动动画,并且不完全依赖披风的纯物理效果。披风动画和物理模拟的运动将被合并,这使我们能够创建更逼真的披风,而无需创建非常精确的动画,因为我们只需依靠动态模拟即可为披风添加逼真的细节。

# 骨骼约束

在操控变形动画的骨架中选择骨骼,单击 编辑约束 可以查看骨骼的高级选项。

首先,你主要有两个选项:

  • 弹簧物理模拟: 启用骨骼的弹力模拟。骨骼将像弹簧一样运动,并不断返回其默认位置。
  • 刚体物理模拟: 启用骨骼的拖拽模拟。骨骼将像拖拽着躯体一样运动,并维持其最后的位置。

你可以将它们配合起来使用,例如,第一个骨骼使用弹簧模拟,而其余骨骼使用刚性模拟。我们建议你先做一些简单的尝试,直到你了解它们是如何影响模拟结果的,因为你可能很难事先判断用哪种方式才能获得需要的结果。

# 骨骼约束选项

  • 物理旋转: 启用骨骼旋转的动态模拟。多数情况下都有用。
  • 旋转刚度(仅限弹簧): 骨骼恢复到默认旋转角度的强度,可以把它想象成弹簧的刚度。增加使弹簧更坚固,弹力更小,减少使弹簧更松动,反应性更低。
  • 旋转摩擦力: 在每一帧中减少一定的旋转量。你可以增加此值以减少抖动。
  • 旋转惯性: 减少运动对骨骼的影响。增加此值将使骨骼对快速动画的反应降低。
  • 物理平移: 启用骨骼位置的动态模拟。如果动画的目标是使对象失真,或者对象需要被分离到不同的空间,这一项会很有用。
  • 平移刚度(仅限弹簧): 骨骼恢复到默认位置的强度,可以把它想象成弹簧的刚度。增加使弹簧更坚固,弹力更小,减少使弹簧更松动,反应性降低。
  • 平移摩擦: 在每一帧中减少平移运动。你可以增加此值以减少抖动。
  • 平移惯性: 减少运动对骨骼的影响。增加此值将使骨骼对快速动画的反应降低。
  • 最大距离(仅限平移): 限制骨骼移动的最大距离。
  • 启用重力: 启用此项将使骨骼对重力做出反应。它将尝试向重力方向移动,就好像飘在空气中一样。
  • 骨骼末端质量: 质量越大,骨骼就越倾向于对重力做出反应,而不是对动画做出反应。
  • 重力方向: 重力的方向。
  • 骨骼末端大小: 重置模拟的骨骼与重心之间的距离。较大会使骨骼对某些动画的反应性降低,而较小会使反应性更强。如果将其保持为 0,并且骨骼有子骨骼的情况下,会动态调整它的大小以匹配与子骨骼的距离。如果设置为 0 以外的任何值就会重置它的大小。你可以通过橙色的圆圈与骨骼的距离以在编辑器里查看它的大小。
  • 骨骼末端前倾角: 重置末端的角度。默认情况下,末端是指向子骨骼的方向(如果有的话),否则它将沿 X 轴指向骨骼默认的方向。不管是哪一种,你都可以使用此选项更改其方向。此选项是将当前方向的偏移量应用到骨骼末端。
  • 限定旋转: 限制骨骼在任一方向上的最大旋转角度。这对于将骨骼引导到所需的方向并防止其旋转 180 度很有用。
  • 最小角度: 允许旋转的最小角度。默认是 -180 度。
  • 最大角度: 允许旋转的最大角度。默认是 180 度。
  • 限定扭矩: 启用此选项可以限制施加在骨骼上的最大旋转力。你可以使用此选项来防止骨骼由于动画太快而不规则地旋转。
  • 最大扭矩: 最大允许的旋转力,任何大于此值的力都将被限制在最大值。