基本概念
Avatar Optimizer 的基本概念
本章节介绍 Avatar Optimizer 的基本概念。
什么是 Avatar Optimizer?
Avatar Optimizer 是一个帮助你优化虚拟形象的工具。 此工具最初是为 VRChat 虚拟形象设计的,但它也可用于 NDMF 支持的其它模型。
非 VRChat 虚拟形象的支持完全基于社区,Avatar Optimizer 开发团队可能不会支持。
Avatar Optimizer 的目标是什么?
此工具旨在帮助你优化模型的性能,且不对外观产生太大影响。
因此,它不会试图更改模型的行为。
模型行为中所有未配置的更改都被视为 bug,即使它在某些用例中可能有用。
如果该 bug 不影响大多数用例,我们可能会暂时暂停修复该 bug。
但其他组件可能不会考虑该 bug 的行为。
例如,AAO Merge Skinned Mesh
的 1.7.x 或更早版本组件会合并具有相同名称的 BlendShapes。
此行为被视为 bug,因为这样就无法单独对它们进行动画处理。
你可以使用此 bug 将蒙皮网格渲染器的 BlendShape 动画与另一个蒙皮网格渲染器同步。
但这是不受支持的行为,其它的一些组件因此可能会破坏该行为。
例如,Automatically Freeze BlendShape
的 AAO Trace and Optimize
组件将冻结 BlendShapes,该 BlendShapes 可能会通过被 AAO Merge Skinned Mesh
组件合并来使用此错误行为进行动画处理。
Avatar Optimizer 的行为在未来版本中如何稳定?
Avatar Optimizer 使用 语义化版本控制 进行版本控制,并且主要将语义化版本控制的规则应用于组件的行为。
这意味着已附加到模型的组件的行为可以保证不会在同一主要版本中更改。
但是,我们可能会为已经实现的组件添加新功能,并且新添加的组件的行为可能会有所不同。
在某些 bug 中,修复它们可能会显著改变组件的行为。
在这种情况下,我们通常会添加新选项以启用新行为。
对于已附加到头像的组件,默认情况下可以禁用此选项以保持以前的行为。
默认情况下,新添加到头像的组件将具有新行为,并修复了错误,方法是启用此选项。
维护这些组件的行为有一些例外。
- 专用于调试组件的功能不保证遵循上述规则。
例如,AAO Trace and Optimize
组件上的Debug Options
在未来任何版本中都可能发生更改。 - 标记为实验性的功能不保证遵循上述规则。
AAO Trace and Optimize
组件的行为会因为新的优化方案而被更改。
但是,AAO Trace and Optimize
组件的默认设置永远不会更改头像的行为和外观,因此更改不会影响模型。
当你遇到除这些例外情况以外的任何不自然或奇怪的行为时,请先查看 常见问题解答。
常见问题解答
以下是有关 Avatar Optimizer 的常见问题列表。 如果您还有其他问题,请随时在 GitHub 讨论 或 Fediverse (Misskey / Mastodon) 上提问。 我通常使用日语,但你也可以用英语问我。
使用 AAO Trace and Optimize
组件时,虚拟形象的行为或外观会发生变化
如果在使用组件时更改了虚拟形象的行为或外观,则除非您依赖于 Avatar Optimizer 其他组件中的错误,否则它始终是一个错误。AAO Trace and Optimize
请在 GitHub Issues、Fediverse (Misskey / Mastodon)、Twitter 等平台上报错误。
网格即使在视野中也是不可见的
此问题通常是由于忘记指定蒙皮网格渲染器的 Root Bone
导致的。
AAO Merge Skinned Mesh
组件不会自动设置 Root Bone
,因此您需要手动设置 Merged Mesh1 的 Root Bone
。
如果您使用的是 Modular Avatar,则可以将 MA Mesh Settings
组件添加到虚拟形象的根目录中,以设置整个虚拟形象的 Root Bone
和 Bounds
。
与 AAO Merge Skinned Mesh
组件合并的网格亮度与其他网格不同
此问题通常是由于忘记指定合并网格的 Anchor Override
导致的。
AAO Merge Skinned Mesh
组件不会自动设置 Anchor Override
,因此您需要手动设置 Merged Mesh1 的Anchor Override
。
如果您使用的是 Modular Avatar,则可以将 MA Mesh Settings
组件添加到虚拟形象的根目录下,以设置整个虚拟形象的 Anchor Override
。
使用 AAO Merge Skinned Mesh
组件时材质属性动画冲突
此问题是已知错误,目前预计会发生冲突。
将网格与动画材质进行合并时,请注意不要冲突。 如果发生冲突,将显示警告,因此请检查 colsole。
此问题的 Issue:#340
使用 AAO Merge Skinned Mesh
组件时材质槽动画冲突
默认情况下,AAO Merge Skinned Mesh
组件将使用合并目标网格的相同材质来合并材质槽。 这也将合并动画材质插槽。
如果您有一些材质插槽将被动画以不同的方式替换,则应取消选中 AAO Merge Skinned Mesh
中的 Merge
- Merge Materials
组件。
使用 AAO Merge Skinned Mesh
组件时 BlendShape 动画冲突
此问题是已知错误,目前预计会发生冲突。
将网格与动画 BlendShapes 合并时,请注意不要冲突。 如发生冲突,将显示警告,因此请检查 colsole。
此问题的 Issue:#568
在 OSC 开关中使用的 PhysBones / Contact Receivers(接触式接收器)不起作用
AAO Trace and Optimize
组件经过精心设计,不会改变虚拟形象的行为。 但由于技术原因,AAO Trace and Optimize
组件无法检测到某些 PhysBone/Contact Receiver 组件是否用于 OSC 开关。
部分虚拟形象有自己的基于 PhysBone / Contact Receiver 组件的开关,因此在大多数情况下,这些组件会被忘记删除。 因此, AAO Trace and Optimize
会假设该组件不适用于 OSC 开关,如果它们不用于其他用途,则会将其删除。
当然,这种假设并非总是如此,因此,如果您在没有 Animator 或 Expressions 的情况下将 PhysBone / Contact Receiver 组件用于 OSC 开关, 请配置您的虚拟形象以检测虚拟形象中是否使用了它们。
如果开关在虚拟形象的 Animator 中被使用,则 AAO Trace and Optimize
不会将其删除。 因此,通过将 OSC 开关中使用的参数添加到 Animator Controller 或 Expression Parameters 的参数列表中, 此类组件不会被移除。
此外,为了将来的讨论,如果您的 OSC 开关被 AAO Trace and Optimize
删除,劳烦您告诉我们基于 OSC 的噱头中使用的参数名称。我可能会为实现 OSC 可能使用的参数列表保留这些参数的组件,或通过其他方式防止将来的删除操作。 请随时在下面的 GitHub Issue、Fediverse (Misskey / Mastodon) 或 Twitter 上联系。
此问题的 Issue:#1090
由于预构建硬限制检查,我无法上传虚拟形象
Avatar Optimizer 和其他一些非破坏性虚拟形象修改工具可以使您的虚拟形象不超过 VRChat 的硬限制。 但是,如果场景中的虚拟形象超过硬限制,VRCSDK 控制面板上的上传按钮将会被禁用。 您可以使用以下方法跳过 预构建硬限制检查。 请注意,这些方法不会跳过 构建后的硬限制检查。
-
在上传虚拟形象之前手动烘焙虚拟形象。
在上传虚拟形象之前,您可以在虚拟形象游戏对象的上下文菜单上使用
NDM Framework/Manual bake avatar
以应用非破坏性工具。 这个插件会克隆您的虚拟形象,并将非破坏性工具应用于克隆了的虚拟形象上,以保证您的原始虚拟形象不被修改。 -
使用 Sayamame-beans 的 Upload without pre-check。
Upload without pre-check 可以让您在没有预构建硬限制检查的情况下上传虚拟形象。
-
使用 kurotu 的 VRCQuestTools。
VRCQuestTools 是一款高效实用的工具,每一位用户都可以通过它轻松将虚拟形象转换为与 Android / Quest 兼容的虚拟形象。
作为该工具的一部分,VQT Avatar Builder 允许您在不对 Android 版本进行预构建硬限制检查的情况下上传虚拟形象。
我想支持 Avatar Optimizer 的开发
如果您想支持 Avatar Optimizer 的开发,欢迎在 GitHub Issues 上对 GitHub Discussions 进行反馈、bug 报告、功能请求等,并提出 pr。
good first issue 的问题相对容易实现。建议将它用于实践第一个 pr。 此外,help wanted 的问题是缺乏开发人员或信息的问题。感谢您参与讨论和开发。
我还接受 GitHub Sponsors 和 Booth 的财务支持。