Skip to main content

可播放层(Playable Layers)

当你为 VRChat 虚拟形象创建动画时,你将使用 VRChat 的"可播放层"。它们允许你将想要在虚拟形象上实现的一些功能清晰地分离到各自的动画中——例如奔跑、跳跃、竖大拇指、微笑、摇尾巴,以及这些动作的组合。

需要 Unity 知识

本文档的编写假设你对 Unity Animator 有一定了解。

在 Avatars 3.0 的 Avatar Descriptor 中,所有人型虚拟形象都有五个按钮:

  • Base
  • Additive
  • Gesture
  • Action
  • FX

通用虚拟形象只有三个按钮:

  • Base
  • Action
  • FX

这些就是可播放层。每一层都接收一个 Unity Animator,并按顺序叠加在一起。换句话说,你有五个根动画器可以使用,每个根动画器又可以包含多个动画器层。

这些层按顺序应用——即先应用 Base,然后是 Additive,接着是 Gesture、Action、FX。例如,如果 Additive 层中的某个动画控制了一根骨骼(权重为 1.0),然后 Action 层中的某个动画也控制了同一根骨骼(权重为 1.0),那么 Action 层的动画将优先。

我们在 SDK 中提供了示例可播放层。根据你的学习和迭代方式,使用和编辑这些默认层可能更容易上手!

它们可以在 Packages/com.vrchat.avatars/Samples/AV3 Demo Assets/Animation/Controllers 中找到。它们的名称与层名称不完全匹配:

  • Base:vrc_AvatarV3LocomotionLayer
  • Additive:vrc_AvatarV3IdleLayer
  • FX:vrc_AvatarV3FaceLayer
  • Action:vrc_AvatarV3ActionLayer
  • Gesture:vrc_AvatarV3HandsLayer

当你运行 VRChat 并穿戴(或查看)一个 Avatar 3.0 虚拟形象时,所有这些可播放层会被组合成一个统一的动画器。这个动画器是你的虚拟形象的根主动画器,你可以控制它的任何部分。这意味着没有必要在你的虚拟形象上添加任何额外的动画器。

另外,你绝不应该在多个可播放层中使用同一个控制器。这可能在某些设置下有效,但这是非常糟糕的做法,并且随着你扩展虚拟形象的功能,会导致重大问题。

仅使用动画控制器

我们只支持在可播放层槽位中使用动画控制器(Animation Controller)。不要使用任何其他类型的控制器——否则你会遇到错误或无法上传内容。

这些可播放层有什么作用?以下是简要说明:

Base: 应始终播放的内容,对移动(如移动动作)或虚拟形象的移动状态(奔跑、坠落、蹲下等)做出反应。仅限变换(Transform)动画。 Additive: Base 已经在使用的内容,但你想要在其基础上"叠加"的内容——例如呼吸动画。仅限变换动画。 Gesture: 由手势或表情菜单触发的内容。你也可以将其用于"空闲动画",如摇尾巴、拍打翅膀或移动耳朵。仅限变换动画。 Action: 完全覆盖,类似于 AV2 的表情动作。仅限变换动画。 FX: 与 Gesture 相同,但针对所有非 Transform 位置、旋转或缩放动画的内容。

以上是概要,让我们深入了解细节。

Base​

Base 层包含移动动画,包括行走、奔跑、横移的混合树。它还包括跳跃、坠落、快速坠落、蹲下和爬行等动画状态。

请注意,如果你在此处放置了内容,你将需要重新定义你的移动动画状态。这相当复杂!查看示例 Base 可播放层,了解它可能有多复杂。

Base 中的动画应_只_影响变换,所有层都应使用 Avatar Mask 来确保只影响适当的变换。

Additive​

Additive 层用于在 Base 中动画化的人型骨骼之上叠加变换运动——例如呼吸动画,它可以在 Base 层之上"叠加"。

如果你想为非人型骨骼添加空闲动画——如尾巴、耳朵等——请改用 Gesture! Additive 专门用于人型骨骼。

Additive 层很特殊,因为它_始终_设置为"Additive"混合模式。简而言之,如果你的某个变换在移动过程中运动,Additive 动画会将其动画"叠加"上去。如果你在 Additive 层中对骨骼进行非常规操作,效果可能会非常奇怪,所以尽量保持简单。

Additive 第一层的 Avatar Mask 被忽略

第一层(基础层、第 0 层等)的 Avatar Mask 将被忽略。这是出于内部遮罩的目的。你仍然可以遮罩其他层,但应用于第一层的任何遮罩都将被忽略。

Additive 中的动画应_只_影响变换。

Gesture​

Gesture 层适用于需要在作用在个别身体部位上,同时仍然播放身体其他部分的基础动画的动画。类似于 AV2 的手势,但可以应用于身体的任何部位。

使用 Avatar Mask 确保动画只影响你想要动画化的虚拟形象部位!因此,如果你希望手势参数仅为左手/右手制作手势形状,你需要在这些层上遮罩掉那些手部。

此外,如果你想要为非人型骨骼(如尾巴、翅膀、耳朵等)制作"空闲"动画——Gesture 层就是你应该放置的地方。

Gesture 中的动画应_只_影响变换。

Action​

Action 层用于当需要对角色进行完全控制时,覆盖所有其他层的骨骼动画。基本上可以理解为 AV2 的"表情动作"。

该层默认混合权重为零。 在 Action 层中执行任何操作之前,你需要使用可播放层控制状态行为来将该层的混合权重调高,然后再过渡到你正在执行的实际动作!完成后,请确保将其混合权重调回为零。

Action 中的动画应_只_影响变换。

FX​

FX 是一个特殊的层。 在其他所有层中,你不应该使用材质动画、着色器属性动画或 blend shape 动画,因为它们不会被复制到你的镜像克隆中。只有变换会被复制。

然而,在 FX 层中,所有内容都会被复制!换句话说,所有非人型变换/肌肉动画的内容都应放入 FX 层。 这包括(但不限于):启用/禁用 GameObject、组件、材质切换、着色器动画、粒子系统动画等。

FX 第一层的遮罩默认为空,这将在(虚拟形象初始化时)创建一个默认遮罩,禁用所有人型肌肉,但启用所有 GameObject 动画。这意味着层级结构中的任何动画都应该有效,不过仍然不建议在此处动画化变换。

如果你在 Gesture 中有非肌肉动画(例如,你的 Gesture 遮罩底部勾选了某些变换),那么这些相同的变换必须在你的 FX 遮罩中禁用。这将允许你的 Gesture 动画"透过"FX 层显示出来。

示例

假设你的虚拟形象有以下设置:

  • 你的虚拟形象上有一条尾巴(一个不属于人型层级结构的骨骼链)。
  • 你的尾巴的 Gesture 动画器层有一个仅启用该骨骼链的特殊遮罩。
  • 你另一个使用"全身遮罩"的 Gesture 动画器层也勾选了这些骨骼(以及控制器其余部分动画化的其他身体部位)。

在这种情况下,你还需要在 FX 第一层中创建一个自定义遮罩。这将遮罩掉所有肌肉(人体图表全部显示为红色)并遮罩掉尾巴中的所有骨骼。 你还需要确保此遮罩为那些包含你将在 FX 中动画化其组件的变换勾选复选框。例如,一个用于动画化 blend shape 或材质的身体蒙皮网格。

请注意,如果你的层级结构中有一个游戏对象同时具有动画化变换(在 Gesture 中)和动画化效果组件(在 FX 中),这将无法满足遮罩的要求。例如,你的层级结构中嵌入了一个简单的静态网格,你在 Gesture 中对其进行了动画化,同时在 FX 中对其应用了材质更改。另一个例子是将粒子效果组件直接放在上面的示例尾巴骨骼上。简单的解决方法是创建一个子游戏对象,将静态网格或效果放在上面。你不动画化子对象的变换,只动画化父对象的变换。如果你遵循这些步骤,就不需要在 FX 层中放置变换动画。

额外姿势​

Avatars 3.0 虚拟形象还有一些额外的姿势可用。这些按钮位于可播放层下方。

T-Pose​

你现在可以提供自己的 T-Pose!

T-Pose 用于确定虚拟形象的各种测量数据,特别是视角位置(或视球)的放置。视角位置完全取决于你提供的 T-Pose 动画中视球的位置。

标准 T-Pose - Mixamo

其次,它对手腕对齐/扭转很重要。手腕相对于手掌朝下位置的排列方式将影响你的控制器在空间中的扭转如何带动手腕和手臂。

最后,你的 T-Pose 决定了你的臂展——即你在 T-Pose 时手臂的完全伸展长度。这也决定了虚拟形象的瞳孔间距(IPD),即虚拟形象双眼之间的距离。手臂过长会使 IPD 变宽,使一切看起来更小。手臂过短会使 IPD 变窄,使一切看起来更大。

此外,(明显的)关节弯曲在 T-Pose 中不是好事情。例如,如果你的肘部在 T-Pose 中弯曲,可能会影响虚拟形象的许多基于身体比例的功能。

IK Pose​

IK Pose 用于确定主要关节的弯曲方向。在 IK Pose 中,你的关节应朝其预期弯曲方向轻微弯曲。

例如,VRChat 会查看 IK Pose 中肘部的弯曲,并确定是否存在某个方向的角度弯曲。该弯曲决定了肘部的弯曲方式。

IK Pose 中脚部的旋转将决定膝盖的弯曲方式。这是通过首先假设膝盖相对于虚拟形象会向前笔直弯曲,然后根据 IK Pose 中脚部的旋转来保存该方向来确定的。例如,如果在 IK Pose 中脚尖向外,则意味着脚的内侧边缘更朝前,因此膝盖将朝向脚的内侧边缘弯曲。相反,如果在 IK Pose 中脚尖更向内,则脚的外侧边缘更朝前(相对于虚拟形象的笔直向前方向),因此在这种情况下,膝盖将倾向于朝向脚的外侧边缘弯曲。

简而言之:如果你希望膝盖更向内弯,请在 IK Pose 中将脚向外旋转。如果你希望膝盖更向外弯,请在 IK Pose 中将脚向内旋转。

坐姿(Sitting Pose)​

用于此槽位的控制器既用于动画也用于摆姿势。当你坐下时,虚拟形象的视角位置用于校准。播放动画,允许你创建"坐下"动画以及"坐着"的空闲动画。

如果你想制作自己的坐姿,事先提醒:这可能需要大量的调整才能做好!你可能需要使用坐下/站起的过渡状态,这会对虚拟形象坐着时的外观有所帮助。