Playable Layers (可播放层)
当您为 VRChat 模型创建动画时,您不可避免的会用到 VRChat 的 “Playable Layers” 。它们允许您将一些模型上的动画拆分为单一的特定部分,例如奔跑、跳跃、竖起大拇指、微笑、摇尾巴或是它们的组合。
您需要了解动画控制器
本文假设您对 Unity 动画控制器有一定了解。
在Avatars 3.0模型描述符中,有五个标签按钮:
- Base(基础)
- Additive (叠加)
- Gesture (手势)
- Action (动作)
- FX (特效)
通用骨架的模型只有三个按钮:
- Base
- Action
- FX
这些都是 Playable Layers。每个 Playable layer 都会使用一个 Unity 动画控制器,并且它们会层叠在一起。换句话说,您有五个根动画控制器可供使用,每个控制器都可以有多个Animator Layers(动画层)。
这些层按顺序应用 —— 先应用 Base ,然后是 Additive ,然后是 Gesture 、 Action 和 FX 。例如,如果 Additive 中的某个动画影响到了某一个骨骼(权重为 1.0 ),然后 Action 中的某个动画也影响到了同一个骨骼(权重为 1.0 ),那么 Action 的动画将在 Additive 的动画的基础上生效。
我们在 SDK 中提供了 Playable layers 的示例。根据您的学习与迭代方式,您可以尝试使用和编辑这些默认的 layers 来帮助您更好的理解它们的工作原理!
当您运行 VRChat 并且正在使用或预览一个 Avatars 3.0 模型时,所有的这些 Playable layers 都会移动并整合到另一个单独的动画控制器中。这个动画控制器是您模型的根动画控制器,而且您可以随意控制这个动画器的任意部分。也就是说您没有必要在您的模型上添加任何额外的动画控制器。
另外,您不应该在多个 Playable layers 中使用相同的控制器。这在某些特定的应用场景中可能有效,但这是效率非常低的做法,并且会在扩展模型功能时引发严重问题。
请只使用动画控制器
我们只支持在 Playable layers 插槽中使用动画控制器。不要使用除动画控制器以外的任何其他类型的控制器——否则您将遇到错误或无法上传内容。
这些 Playable layers 的功能是什么?以下是简短的说明:
Base: 包括会长期生效于模型的动画,这些动画会对移动做出反应(如运动),或对模型的运动状态(奔跑、下落、蹲下等)做出反应。仅使用变换动画。 Additive: 包括您想附加到 Base 动画器中的动画,比如呼吸动画。仅使用变换动画。 Gesture: 包括由您的手部或表情菜单触发的,甚至常驻的状态动画,如摇尾巴、扇动翅膀或移动耳朵。仅使用变换动画。 Action: 完全覆盖,类似于 AV2 表情。仅使用变换动画。 FX: 与手势相同,但用于除变换位置、旋转或缩放动画之外的所有内容。
下文会详细的讲解它们:
Base
Base 动画器包含运动动画,包括行走、奔跑、横向移动的混合树。它还包括跳跃、下落、快速下落、蹲下和爬行等动画状态。
请记住,如果您将某些内容放在这里,您将需要重新定义您的运动动画状态。这非常复杂!您可以查看示例基础 Playable layers ,来了解它可以变得多么复杂。
Base 中的动画应仅影响变换,并且其中的所有层都应使用 Avatar Mask 来确保只影响适当的变换。
Additive
Additive 动画器用于在 Base 动画器上叠加变换移动,这些变换移动是作用在 Base 动画器中动画的人形骨骼上的——例如呼吸动画,可以“添加”到 Base 动画器上。
如果您想要为非人形骨骼(如尾巴、耳朵等)添加常驻动画,请使用 Gesture 动画器! Additive 动画器专门用于人形骨骼。
Additive 动画器很特殊,因为它总是设置为“叠加”混合模式。简而言之,如果在运动过程中有一个变换移动,Additive 里的动画将在其上“叠加”动画。如果在 Additive 动画器中对骨骼进行了可能离谱的操作,那么骨骼可能会表现得非常奇怪,因此请尽量保持该层的动画相对简单。
Additive 动画器中首层的 Avatar Mask 会被忽略
Additive 动画器中的第一个层的 Avatar Mask 将被忽略。这是为了内部遮罩目的。您仍然可以对其他层进行遮罩,但是您应用于第一个层的任何遮罩都将被忽略。
Additive 中的动画应仅影响变换。
Gesture
Gesture 动画器用于在剩余身体部分有基础动画时,对个别身体部位进行动画处理。这种工作方式有点像 AV2 手势,但适用于身体的任何部位。
利用 Avatar Masking,确保动画仅影响您想要动画化的模型部位!因此,如果您希望手势参数仅为左/右手制作手势形状,您将需要在每个层上屏蔽这些手部。
此外,如果您想要为非人形骨骼(如尾巴、翅膀、耳朵等)创建常驻动画,应将其放在 Gesture 动画器中。
Gesture 中的动画应仅影响变换。
Action
动作层用于覆盖所有其他层的骨骼变换动画,当您需要完全控制模型时。基本上,就像 AV2 的“表情”。
该层默认情况下混合为零。在动作层中做任何操作(也就是过渡到任何要执行的动作动画)之前,您需要使用 Playable layers 控制状态行为提升该层的权重值,并且确保在想执行的动画结束后将其权重值降低为 0 。
动作层中的动画应仅影响变换。
FX
特效是一个特殊的层。在其他每个层中,您不应使用材质动画、着色器属性动画或形态键动画,因为它们不会复制到您的镜像克隆中。只有变换会被复制。
然而,在特效层中,所有内容都会被复制!换句话说,除了人形变换/肌肉动画之外的所有内容都应放在特效层中。 这包括(但不限于)启用/禁用游戏对象、组件、更换材质、着色器动画、粒子系统动画等。
第一个特效层中的遮罩默认为空,这将在模型初始化时创建一个默认遮罩,禁用对所有人形骨骼的,但启用对其他所有游戏对象的动画化。这意味着层次结构中的任何动画都应该正常工作,尽管在此处仍然不建议对变换进行动画处理。
如果您在手势中有非骨骼变换动画(例如,您的手势遮罩中在底部中有被勾选的变换),那么在 FX 动画器的遮罩中必须将这些变换禁用。这将使您的手势动画能够透过FX层显示。
示例
假设您的模型具有以下设置:
- 模型上有一个尾巴(一系列不属于人形层次结构的骨骼)。
- 手势动画器中,动画化尾巴的一层动画层具有特殊的遮罩,遮罩中只启用了尾巴的骨骼。
- 其他手势动画层具有“全部部位遮罩”,其中也包括了在控制器的其余部分中动画化的其他身体部位。
在这种情况下,您还需要在第一个 FX 层中创建一个自定义遮罩。这将在 FX 里禁用所有人体骨骼与尾巴中的所有骨骼。
您还需要确保此遮罩对于您将要在 FX 动画器中处理的任何变换都打开了复选框。例如,用于动画化形态键或材质的身体蒙皮网格。
请注意,如果您的层次结构中有一个游戏对象,它既有一个在手势中动画化的变换(例如,您在手势中动画化的尾巴)又有一个在特效中动画化的效果组件,这将无法满足遮罩的要求。如果您的层次结构中有一个简单的静态网格嵌入式游戏对象,您在手势中进行动画处理,但在特效中进行材质更改,就会出现这种情况。另一个例子是直接将粒子效果组件放在上述示例尾巴骨骼上。简单的解决方法是创建一个子游戏对象,并将静态网格或效果放在其中。您不会对子对象的变换进行动画处理,只对父对象进行动画处理。如果按照这些步骤操作,您就不需要在FX层中放置变换动画。
Additional Poses(额外姿势)
Avatars 3.0模型还提供了一些额外的姿势。这些按钮位于 Playable layers 下方。
T-Pose
您现在可以提供自己的 T-Pose 动画器!
T-Pose 动画器用于测量您的模型的各种指标,尤其用来确定 viewpoint(视角球)的放置位置。viewpoint 完全取决于您的视角球在您提供的 T-Pose 动画中的位置。
其次,T-Pose 动画器对于手腕的对齐/扭转非常重要。手腕相对于向下的手掌的对齐方式将影响手柄在空间中扭转手腕和手臂的方式。
最后,您的 T-Pose 动画器决定了您的臂展——您在 T-Pose 下的两只手臂的完整长度。这还确定了您模型的瞳孔间距(IPD),即您模型眼睛之间的距离。手臂过长会使您的 IPD 变宽,让您的视野更大,视野里的物体更小。手臂过短会使您的 IPD 变窄,让您的视野更小,视野里的物体更大。
此外, T-Pose 中的(显著的)关节弯曲并不是一件好事。例如,如果您的 T-Pose 中的肘关节是弯曲的,这可能会影响与您的比例相关的模型的许多不同方面。
IK Pose (IK 姿势)
IK Pose 用于确定主要关节的弯曲。在 IK 姿势中,您的关节应该以其预期弯曲的方向,来稍微弯曲。
例如,VRChat 将检查您的 IK 姿势中的肘关节,并确定其是否有在任一方向上有一个弯曲角度。您的肘关节可以在这个给定角度上进行弯曲。
脚在 IK 姿势中的旋转将决定膝盖的弯曲方式。这是通过首先假设膝盖相对于模型将向前弯曲,然后将该方向保存在 IK 姿势中的脚的旋转中来设置的。例如,如果脚在 IK 姿势中指向外侧,这意味着脚的内侧边缘更朝前,因此膝盖会向脚的内侧边缘弯曲。相反,如果脚在 IK 姿势中更向内侧,脚的外侧边缘更朝前(相对于模型的正前方),因此膝盖会倾向于向脚的外侧边缘弯曲。
简而言之:如果您希望膝盖向内侧弯曲更多,请在 IK 姿势中将脚向外旋转。如果您希望膝盖向外侧弯曲更多,请在IK姿势中将脚向内旋转。
Sitting Pose (坐姿)
此控制器既用于固定动画,也用于您模型的特点姿势。当您坐下时,将使用您模型的 iewpoint 进行校准。播放动画,使您可以创建“坐下”动画以及“坐着”的空闲动画。
如果您想要自己制作,需要注意:您需要大量的调整才能做到这一点!您可能需要使用一些过渡状态来改进您的模型在坐下时的外观。