Skip to main content

合并骨架(Merge Armature)

合并骨架(Merge Armature)组件用于将一个对象树合并到虚拟形象的骨架上。

merge-armature-bf5a37a5be1eb560ba8402f24e55133b.png

适用场景

合并骨架(Merge Armature)组件是为服装预制件(Prefab)特别设计的,同时它还包括更新带蒙皮网格渲染器的引用以及减少生成的骨骼数量的特殊逻辑。如果您需要让一个带蒙皮的网格跟随虚拟形象的骨骼,则应使用该组件。

非适用场景

该组件不是为了兼容不同虚拟形象的预制件而设计的。举个例子,这个组件不适合指尖笔预制件。

由于该组件假设您所绑定的骨骼的位置是没有变动的,所以不能通用于配置了的虚拟形象之外的虚拟形象。

配置合并骨架

将合并骨架(Merge Armature)组件添加到原层级的根对象上后,将虚拟形象中相应的骨骼(合并到的骨骼)拖如 Merge Target(合并目标) 框中。一般情况下 Prefix(骨骼前缀)Suffix(骨骼后缀) 会被自动设置。

他的原理是?

合并骨架(Merge Armature)组件会遍历其所在对象的子对象,通过遍历到的对象的名称查找虚拟形象中相应的骨骼。为了与虚拟形象更好地兼容,您可以指定 Prefix(骨骼前缀)Suffix(骨骼后缀),在查找相应骨骼时去除相应的前缀或者后缀。 如果找到了相对应的骨骼,组件会尝试将指向原骨骼的引用修改成对虚拟形象相应骨骼的引用。在某些情况下,如果无法修改引用,那么将会创建一个子骨骼。 如果找不到相应的骨骼,将会在相应的父骨骼下创建一个子骨骼。

合并骨架(Merge Armature)在确保原层级中其他组件的配置和指向问题上付出了很多努力。具体来说,它会:

  • 根据动画的属性,更新动画机的动画路径(例如,变换(Transform)动画会指向合并后的骨骼,对象的开关动画会指向原层级)
  • 动骨(PhysBone)和触碰(Contact)组件会将他们的目标(Target)更新为合并后的骨骼。在动骨(PhysBone)组件不在合并骨架(Merge Armature)组件所在子对象内时也适用。
  • 其他组件会留在原层级中,但是组件所在对象会添加一个追踪已合并的骨骼的约束(Constraint)。

合并骨架(Merge Armature)会将部分层级留在原处 - 如果其中的对象中存在除了变换(Transform)之外的组件,这些组件将会被保留,除此之外的对象一般会被删除。 必要时,动骨(PhysBone)对象的目标会被更新,父约束(Parent Constraint)也会在必要时创建,使其正常工作。

Modular Avatar 1.7.0 已经能够实现嵌套合并骨架了 - 也就是说,将 A 合并到 B,然后将 B 合并到 C。Modular Avatar 会自动确定合并顺序。

位置锁定模式

位置锁定(Position Locking)能够让服装跟随虚拟形象素体移动,处于编辑模式(Edit Mode)时也有效。这对测试动画和姿势,以及截图都很有帮助。有三个位置锁定模式(Position Lock Mode)可供选择:

  • 不锁定(Not locked) - 在编辑模式(Edit Mode)下,服装不会跟随虚拟形象素体移动
  • 素体(Base)=======> 合并目标(Target)(单向)- 当虚拟形象素体移动时,服装也会跟随移动。而您移动服装时,素体不会跟着移动。这个模式会保留您对服装作出的所有调整,推荐在一般情况使用。
  • 素体 <======> 合并目标(双向)- 当虚拟形象素体移动时,服装会跟着移动。服装移动时,素体也会跟着移动。这个模式在特定高级场景下很有帮助,比如制作一个通过动画修改素体的头发或者动物耳朵的预制件。

当您使用 Setup Oufit(适配服装) 对服装进行适配时,位置锁定模式会被设置为 素体\=\=\=\=\=\=\=\> 合并目标(单向)。您可以在检查器(Inspector)中修改。

与虚拟形象素体的位置对齐

merge-armature-reset-position-4170f7d644191d9bed0c2c020854c534.png

当服装不是专为您的虚拟形象制作的情况下,在微调前先粗略地将服装的位置与素体进行对齐是好的。组件中的 Reset position to base avatar(将位置与 Avatar 进行对齐) 工具可以实现这个功能。

当您点击 Do It!(执行) 时,服装中的所有骨骼会将自身的位置对齐虚拟形象中相应的骨骼。 有三个可选的附加选项:

  • 也对齐旋转(Also set rotation):将服装中所有骨骼的局部旋转对齐虚拟形象素体的相应局部旋转。用于特殊场合;如果服装和虚拟形象不是从同一个 3D 建模软件导出的,则会出现奇怪的效果。
  • 也对齐局部缩放(Also set local scale):将服装中所有骨骼的局部缩放对齐虚拟形象素体的相应局部缩放。在您调整过虚拟形象素体骨骼的缩放后,需要服装的缩放保持一致时使用。
  • 根据虚拟形象素体调整服装的整体比例(Adjust outfit overall scale to match base avatar):调整服装的整体比例以契合虚拟形象。这个选项使用臂展长度确定虚拟形象和服装的大小,然后在调整位置前放大(或缩小)整个服装。一般推荐在适配服装时使用。

这些选项不会被保存;点击 Do It!(执行) 后只会对齐一次。

对象引用

虽然编辑器 UI 允许您将一个目标对象拖入合并骨架(Merge Armature)组件中,但是在组件内部,这个对象会被保存为一个路径引用。 这么做能让合并骨架(Merge Armature)组件在存进预制件(Prefab)后能够自动恢复目标对象。

匹配骨骼名称

由于合并骨架(Merge Armature)是通过骨骼名称进行匹配的,所以一套为一个虚拟形象设计的服装并不总能简单地合并到另一个虚拟形象上。 您可以通过点击 Adjust bone names to match target(根据合并目标调整骨骼名称) 按钮尝试调整服装中的骨骼名称,使之与当前指定的虚拟形象骨骼名称匹配。 使用 Setup Oufit(适配服装) 添加的合并骨架(Merge Armature)组件会自动执行这一操作。

防止名称冲突

虽然合并骨架(Merge Armature)会将骨骼合并到目标骨架中名称匹配的骨骼上,但在默认情况下,合并的资产所独有的骨骼会被重命名。这能防止与其他也使用合并骨架(Merge Armature),同时碰巧骨骼名称一样的资产产生冲突。

某些特殊情况禁用这个行为会有所帮助。在必要时,您可以取消勾选 Avoid name collisions(避免命名冲突) 勾选框。