Skip to main content

Avatar(虚拟形象)

VRChat 允许你创建和上传自定义虚拟形象!本分类将介绍如何使用 VRChat 的 Avatars 3.0 SDK。

创建虚拟形象​

要开始使用,请查看创建你的第一个虚拟形象。

侧边栏中有一个完整的"虚拟形象"分类供你探索。以下是一些比较重要和关键的页面:

  • 骨骼绑定要求 解释了如何为 VRChat 设置你的自定义 3D 模型层级结构。
  • 虚拟形象性能评级系统 解释了为什么有些虚拟形象能达到"优秀"性能,而另一些则是"非常差"。
  • 虚拟形象优化技巧 - 既然你已经知道了_原因_,来看看这个页面学习如何找回所有帧数吧。
  • 继续阅读本页,了解更多关于 Avatars 3.0 SDK 的重要概念。

什么是 Avatars 3.0?​

Avatars 3.0 是我们为 VRChat 中虚拟形象提供的所有功能的统称。AV3 的功能专注于提升虚拟形象的表现力、性能和能力。

Avatars 3.0 与操作菜单紧密集成,用于控制和与你穿戴的虚拟形象进行交互。在构建 AV3 虚拟形象之前,最好先进入 VRChat 体验一下操作菜单!

前提条件​

理解相关概念​

为了理解和使用 Avatars 3.0,你需要了解一些基本概念。这些概念将帮助你理解虚拟形象的构建方式、如何最佳地组装它们,以及各种系统的预期用途。

Unity 系统​

本文档的编写假设你已经对 Unity Animator 有一定了解。特别是,你需要确保具备以下基本操作知识:

  • Animator 和动画
  • Animator 层、层权重和混合
  • 状态和过渡
  • Animator 参数
  • 状态行为
  • 虚拟形象遮罩(Avatar Mask)

了解以下内容也会有所帮助:

  • 状态退出时间
  • 动画循环时间
  • (高级)层间时间同步
  • (高级)混合树

基础操作​

使用 Avatars 3.0,你可以非常快速地创建一个具有模拟眼部运动和 viseme(口型同步)的基础虚拟形象。

  1. 导入你的虚拟形象,绑定为 Humanoid 类型。设置材质等。
  2. 添加 Avatar Descriptor 组件。
  3. 如果需要模拟眼部运动,定义眼部骨骼。
  4. 如果需要 viseme,定义 viseme 类型。在骨骼绑定配置界面指定下颌骨骼,或通过 blendshape 定义 viseme。与 Avatar 2.0 相同。
  5. 设置视角位置。
  6. 构建并上传!

如果你正在制作非人型虚拟形象,请阅读下方的"通用虚拟形象"部分。

完成了!这将创建一个具有默认手势和动作的基础虚拟形象。系统内置了一些可以使用的功能,因此即使有人直接使用以特定方式命名的 blendshape/骨骼的虚拟形象,你也能获得一些基本的 Avatar 3.0 功能。

不过,即使有了这些基础升级系统,还有一些新功能值得了解。

本地虚拟形象测试​

此功能允许你在不将虚拟形象上传到 VRChat 的情况下进行迭代和测试。

在 VRChat SDK 控制面板的"Builder"选项卡中,你现在可以在"Offline Testing"部分选择"Build & Test"。点击后,你的虚拟形象将被构建,然后复制到以下文件夹:

  • Windows:%LocalAppdata%Low\VRChat\VRChat\Avatars
  • Linux:$HOME/.local/share/VRChat/VRChat/Avatars/

当你启动 VRChat 时,可以在虚拟形象菜单的"SDK Test Avatars"部分找到这个本地虚拟形象。当你对虚拟形象进行更改并重新构建后,只需在菜单中选择该虚拟形象并再次点击"Apply",即可切换到新的测试虚拟形象。

或者,如果你使用 --watch-avatars 启动参数启动 VRChat,VRChat 将监视新构建的本地虚拟形象并自动切换到它们。

本地构建的虚拟形象_仅_对你可见!对其他所有人来说,你看起来仍然穿着切换到本地测试虚拟形象之前的最后一个虚拟形象。这可以极大地加快虚拟形象的迭代速度。希望你喜欢这个功能!

要删除已复制的本地测试虚拟形象,请前往 VRChat SDK 控制面板的"Content Manager"选项卡。你将在底部的"Test Avatars"部分看到你的虚拟形象。点击"Delete",当你重新打开虚拟形象菜单时,它将从"SDK Test Avatars"部分消失。

模拟眼部运动​

模拟眼部运动是指你的虚拟形象的眼睛会四处移动,观察周围的事物。这并不是_眼动追踪_,但这是一个让你的虚拟形象看起来更"生动"的好方法。

你可以在编辑器中预览你的设置,并通过多种状态的组合来调整虚拟形象眼睛的外观,这些状态用于确定眼部骨骼的设置方式。

眨眼可以通过 blendshape 或骨骼来处理。Blendshape 是常用的方法,但我们也加入了骨骼支持,以实现更多样的设置。

眨眼 blendshape 由以下三个 blendshape 定义:

  • Blink - 双眼同时眨眼
  • Looking Up - 向上看时使用的 blendshape——用于调整眼睛/虹膜/眼皮/眉毛的位置
  • Looking Down - 向下看时使用的 blendshape,用法与 Looking Up 类似

如果你不想使用这些 blendshape,可以将它们设置为 -none-。

此外,你会注意到两个滑块——一个从平静(Calm)到兴奋(Excited),另一个从害羞(Shy)到自信(Confident)。平静/兴奋影响你眨眼的频率。害羞/自信影响你看向其他玩家的频率,以及你的目光停留在其他玩家脸上的时间长度。

在讨论状态行为时,你将对这方面有更多了解,但你可以在动画器中设置状态,以便在进入该状态时禁用眼部动画。你可以这样设置,这样就不必担心你的 blendshape 被过度驱动——即使你的"开心"情绪闭上了眼睛,眨眼动画仍然会正常触发。

Blendshape / 骨骼驱动的 Viseme(口型同步)​

如果你只想使用标准的颌骨或基于 blendshape 的 viseme,完全可以。这两种方式都存在且工作正常。

此外,你现在还可以配置颌骨 viseme 的角度,以实现更多的自定义效果!

不过,在 Avatars 3.0 中,你还可以访问一个 Animator 参数,该参数指示当前应播放哪个 viseme!这意味着只要你能为其制作动画,你就可以将其用作 viseme。 不再需要为 2D 嘴巴、机器人等使用特殊技巧——你可以直接为 viseme 制作任何你想要的动画。

Viseme 动画器参数在所有 viseme 模式下都会更新。

代理动画(Proxy Animations)​

你可能会注意到 SDK 中包含了许多名为 proxy_animationName 的动画。这些动画是各种 VRChat 默认动画的"占位符"。如果你使用以 proxy_ 开头的动画,VRChat 将尝试将其替换为内置动画。这可以在任何可播放层中进行。

虽然如果你的动画后缀与我们的内置动画不匹配,我们不会替换带有 proxy_ 前缀的动画,但最佳实践是避免将任何动画命名为以 proxy_ 开头。

使用自动脚步(Use Auto Footstep)​

这是 AV3 Avatar Descriptor 中的一个选项,默认开启。

"Use Auto Footstep" 仅适用于 3 点或 4 点追踪。关闭它意味着你禁用了房间尺度移动的程序化下半身动画。当你在 3 点或 4 点追踪模式下在房间空间中移动时,会播放这个程序化动画。

保持 Auto Footstep 开启(默认状态)仍然允许你通过 Tracking Control 状态行为启用/禁用追踪。

如果 Auto Footstep 关闭,启用/禁用腿部和臀部的追踪将不起作用,你将完全依赖动画来驱动下半身。

强制移动动画(Force Locomotion Animations)​

这是 AV3 Avatar Descriptor 中的一个选项,默认开启。

"Force Locomotion Animations" 默认开启。它仅适用于 6 点追踪(全身追踪)。当"Locomotion Animations"开启时,在 FBT 中移动(即推动摇杆)将播放由 Base 可播放层决定的行走/奔跑动画。

当"Locomotion Animations"关闭时,在 FBT 中移动将_不会_播放行走/奔跑动画。如果你希望用全身追踪动作来"模拟"行走动作,这个功能会很有用。**如果你关闭了"Locomotion Animations",请不要使用默认的 Base 和 Additive 层。**你需要自己制作这些动画层!

状态的 Write Defaults 设置​

Write Defaults 是 Animator Controller 中每个状态可用的选项。

Write Defaults "Off" 的状态将仅设置已动画化的属性值,这些值在没有再次动画化的情况下不会改变。这可以让你更容易地追踪通过特定层动画化了哪些属性。

Write Defaults "On" 的状态将为未动画化的属性设置默认值。这意味着,如果你正在将属性值从"0"动画化为"1",在退出该状态时,该值将恢复为默认值"0",除非后续状态继续将该值动画化为"1"。

无论你选择哪个选项,我们建议在整个虚拟形象中保持 Write Defaults 设置的一致性——换句话说,所有状态都设置为 Write Defaults "Off",或全部设置为 "On"。在同一个虚拟形象中同时存在"Off"和"On"状态会导致意外的属性值被设置。这通常被称为"混合 Write Defaults"。如果 SDK 检测到你这样做了,它会发出警告。

VRChat 在其内置和示例动画器中使用的是 Write Defaults "Off"。

如果你决定将 Write Defaults 设置为"Off":

  • 新创建的状态的 Write Defaults 默认设置为 On,因此你需要为每个新创建的状态更改此值。
  • 你可能需要添加动画来使用特定值初始化或重置属性。
  • 建议对于层中的所有状态,你都显式地动画化该层影响的所有属性。
  • 每个状态应有一个动画剪辑(状态选项中的"motion"),该剪辑至少动画化一个属性。它不必是一个有效的属性引用。使用"None"动作或完全空剪辑的状态将表现得如同 Write Defaults 设置为"On"。
叠加层(Additive Layer)和直接混合树(Direct Blend Tree)

VRChat 的虚拟形象创作者社区建议在以下情况将 Write Defaults 设置为"On":

  • 使用叠加混合的层
  • 使用直接混合的混合树

即使你在虚拟形象的其余部分使用"Off",也应该这样做。在这些情况下,SDK 将避免生成关于混合 Write Defaults 设置的警告。

通用虚拟形象(Generic Avatars)​

Avatar 3.0 也支持非人型通用虚拟形象。如果你想获得与 AV3 人型虚拟形象类似的功能,需要遵循以下指南:

  • 将你的通用模型导入为 FBX 并分配'Generic'骨骼类型,这样会创建一个"avatar"对象
  • 确保在虚拟形象根部的 Animator 组件的 avatar 字段中引用了这个 avatar 对象(与 Avatar Descriptor 所在的游戏对象相同)。
  • 将动画控制器留空(运行时会被剥离),并使用 Playable Layers 来定义你的自定义动画控制器。通用虚拟形象有 3 个可播放层:Base、Action 和 FX,因为其他层是 Humanoid 专属的。

如果你不遵循这些步骤,你的通用虚拟形象将无法使用许多 Avatars 3.0 功能,如 Expression Parameters 和 State Behaviours。如果你觉得这没问题,你可以直接将动画控制器添加到根动画器中,并将 avatar 字段留空。如果你只是在 Unity 中构建一个静态对象的层级结构并想要一个简单的动画,这种方法可能很有用。