人形遮罩 (Avatar Mask)
原始页面:https://notes.sleightly.dev/animator-masks/
Unity 行为
Avatar Mask 会基于在遮罩中启用和禁用的选项,阻止或允许 Humanoid Muscle 数值、材质球替换和 Transform 的动画处理。如果一个动画层具有一个启用了特定值的 Avatar Mask,那么该层的动画可以对该值进行动画处理。如果一个动画层具有一个禁用了特定值的 Avatar Mask,那么该层的动画则不能对该值进行动画处理。具体而言:
- 如果一个动画层具有启用了 Humanoid Muscle 数值(例如左手)的 Avatar Mask,那么该层中的动画可以修改该 Humanoid Muscle 数值。
- 如果一个动画层具有禁用了 Humanoid Muscle 数值(例如左手)的 Avatar Mask,那么该层中的动画不能修改该 Humanoid Muscle 数值。
- 如果一个动画层具有启用了或未指定的 Transform 的 Avatar Mask,那么该 Transform 可以通过该层的动画修改其位置、旋转和缩放,以及对第一个材质球进行替换。
- 果一个动画层具有禁用了 Transform 的 Avatar Mask,那么该 Transform 的位置、旋转或缩放,以及第一个材质球的替换,都不能通过该层的动画进行修改。
- 如果一个动画层有任何 Avatar Mask,它不能对任何材质球的替换(除了第一个材质球)或控制 Animator 上的根 Transform。
其他内容(如 blendshapes 和任何其他组件)不会受到 Avatar Mask 的影响。
设置 Avatar Mask 的原因在于,如果你在一个层中控制一个 Humanoid Muscle 数值,然后在另一个层中控制同一个 Humanoid Muscle 数值,(无论是在 Animator 中更低的动画层还是在不同的 Playable Layers 中),前者的动画会被后者覆盖(除非另一个层是 Additive 层,在这种情况下,它会叠加在前者之上)。
对于 Transform,这种情况仅在第二个动画使用 WD off 并且位于一个稍后应用的 Playable Layer 时发生。
例如,如果没有 Avatar Mask,如果你在 Gesture Layer 中用动画控制手部动作,而在 FX Layer 中使用了不同的动画控制面部表情(同时也控制了 Humanoid Muscle),那么手部的值将被 FX Layer 覆盖。
注意:这意味着,如果你有一个 Humanoid 动画,没有进行适当的 Avatar Mask 以启用所需的 Humanoid Muscle 数值并禁用其他数值的情况下,所有其他 Humanoid Muscle 数值将会被覆盖。
这也意味着,如果你在 Gesture Layer 中有 Transform 动画,而在 FX Layer 中有一个未被遮罩应下的 WD Off 的控制 Transform 的动画,所有 Gesture Layer 中的 Transform 动画都会被覆盖。
默认的 VRChat FX Layer 使用了未被遮罩影响的 WD off 的混合树。如果你使用 VRChat 默认的 FX Layer,这可能导致在 VRChat 中 Transform 动画无法播放。如果你想在 Gesture Layer 中使用控制 Transform 的动画,你必须使用你自己的 FX Layer。
VRChat Playable Layers 行为
所有 Playable Layers 会依次播放。首先是 Base 层,然后是 Additive 层,接着是 Gesture 层,然后是 Action 层,最后是 FX 层。
在前四个层(Base、Additive、Gesture 和 Action)中,你应该只使用影响 Transform(无论是 Humanoid Muscle 还是 Transform 动画)和开关 GameObject 的动画。
这不是因为 Avatar Mask,而是因为这四个层只在你的本地 Avatar 克隆体上播放,而不会在你的镜像和阴影克隆体上播放。VRChat 复制本地 Avatar 上每个物体的 Transform 和开关状态,并将它们应用到 Avatar 的镜像和阴影克隆体上。然而,VRChat 不会复制除了 Transform 和每个 GameObject 的开关状态之外的任何内容,这意味着如果你的动画控制了其他内容,如 blendshapes、材质球替换或着色器设置,VRChat 不会将这些属性复制到镜像和阴影克隆体上。克隆体会播放自己的 FX Layer,这就是为什么除了 Transform 和物体的开关状态之外的一切都应该在 FX Layer 中控制的原因。
例如:如果你在 Base Layer 中进行材质球替换,它不会在镜像和阴影克隆体上生效。
本文仅详细讨论了 Avatar Mask 和行为。如果你想了解更多关于 VRChat 层的内容或 VRChat 推荐的层使用方法,你可以在以下页面找到更多信息:
Playable Layers | VRChat Creation
基本动画层
Base
Base 该层应仅动画处理 Transform(无论是直接还是通过 Humanoid Muscle)和/或物体的开关状态。
VRChat 推荐将此层用于运动等只控制 Humanoid Muscle 的动画。
Additive
Additive 该层应仅使用控制 Transform 的动画和/或控制物体开关状态的动画。它是以叠加混合的方式进行的,这意味着任何动画不会替换基础层的动画,而是将值叠加。
VRChat 推荐将此层用于运动的调整,如呼吸效果,并且只应该使用控制 Humanoid Muscle 的动画。
Gesture
该层应当只使用控制 Transform 和/或物体的开关状态的动画。Gesture 有一些特殊的性质,即 VRChat 会将 Gesture 的第一个动画层的 Avatar Mask 应用到其下所有的动画层上,如果在第一层的 Avatar Mask 或某一层的 Avatar Mask 中禁用了动画控制(无论是 Humanoid 还是 Transform),它就无法被动画控制。
因此,如果你想使用任何控制 Humanoid Muscle 的动画,你必须制作一个专门允许这些 Humanoid Muscle 的 Avatar Mask 并将其放在第一层中。
如果你想你想使用任何 WD Off 的控制 Transform 的动画,你必须制作一个专门允许这些 Transform 并禁用其他部分的 Avatar Mask,并将其放在第一层中。
VRChat 推荐将此层用于控制 Transform 和仅影响特定身体部位的 Humanoid 动画。
Action
该层应仅使用控制 Transform 和/或物体的开关状态的动画。Action 在默认情况下的权重为零。在你在 Action 层中进行任何操作之前,你需要使用 Playable Layer Control State Behavior 将该层的权重混合到一个有效数值,然后再过渡到你要执行的实际操作。当你完成后,确保将其权重调整回零,否则其他层的动画将会全部被覆盖。
VRChat 推荐将此层用于覆盖前面层中的任何 Humanoid 动画,例如动作表情或 AFK 动画。
FX
由于该层会在所有克隆体上运行,因此这是你可以运行任何动画的地方。请注意,你仍然可以在这一层控制 Transform,只要设定了适当的 Avatar Mask。
如果第一个动画层没有设定 Avatar Mask,它将创建一个默认的 Avatar Mask,禁用所有 Humanoid Muscle 数值和启用所有 Transform,并将其应用到所有层上,使其在这个 Avatar Mask 或层的 Avatar Mask 中禁用的内容会被禁用。
如果第一个动画层中使用了任何 Avatar Mask,第一层的 Avatar Mask 也会应用到所有层。
因此,如果你想在 FX 控制 Humanoid Muscle,你必须制作一个专门允许你想控制的 Humaniod Muscle 的 Avatar Mask 并将其放在最顶层。如果你不关闭不需要的 Humaniod Muscle,Gesture 中的动画内容就会全部被覆盖。
如果你使用 WD off,同样的逻辑也适用于 Transform。
VRChat 的默认 FX 层有一个混合树,Write Default 为 Off,这可能会使得一些 Transform 动画出问题。如果你想在任何其他 Playable Layers 中使用 Transform 动画,请不要使用默认的 FX 层。
VRChat 推荐将此层用于所有非 Transform 动画的内容,例如启用/禁用物体、组件、材质球替换、着色器动画、粒子系统动画等。
特殊层
T-pose:
T-Pose 用于确定 Avatar 的各种测量值,特别是视点(或视角球)的放置。它是独立的,因此 Avatar Mask 并不重要。
IK Pose:
IK Pose 用于确定主要关节的弯曲。在 IK 姿势中,你的关节应该略微弯曲,以符合其弯曲方向。它是独立的,因此 Avatar Mask 并不重要。
Sitting Pose:
这个控制器用于控制坐下时的姿势。当你坐下时,Avatar 的视点会用于校准。你可以创建一个“坐下”动画以及一个“坐着”的动画来让 Avatar 看起来像是坐下了。这一层类似 Action,会覆盖所有的 Humanoid 动画,以使角色坐下。
No Comments