Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
3D 骨架重定向
重定向选项
骨骼映射
在高级场景导入菜单中选中 Skeleton3D 节点时,右侧将出现一个菜单,其中包含“重定向”部分。重定向部分只有一个属性:bone_map(骨骼映射)。
选中骨架节点后,请先设置一个新的 BoneMap 和 SkeletonProfile。Godot 有一个用于人形模型的预设,名为 SkeletonProfileHumanoid。本教程假设你使用的就是 SkeletonProfileHumanoid。
备注
如果需要不同于 SkeletonProfileHumanoid 的配置文件,你可以通过选择 Skeleton3D 并使用 3D 视口工具栏中的 Skeleton3D 菜单从编辑器中导出一个 SkeletonProfile。
使用 SkeletonProfileHumanoid 时,会在设置 SkeletonProfile 时执行自动映射。如果自动映射的效果不佳,你也可以手动映射骨骼。
缺失、重复以及不正确的父子关系映射都会显示为洋红色/红色按钮(取决于编辑器设置)。这些问题不会阻止导入过程,但会警告动画可能无法正确共享。
备注
自动映射会对骨骼名称进行模式匹配。所以建议骨骼使用常见的英文名称。
设置 bone_map 后,以下部分中提供了多个选项。
移除轨道
如果要将资源导入为用于共享的 AnimationLibrary,那么我们建议启用这些选项。而如果要将资源导入为场景,某些情况下应该禁用这些选项。例如导入带有动画配件的角色时,这些选项可能会导致配件没有动画。
仅保留骨骼变换
删除动画中除骨骼变换轨道之外的所有轨道。
非重要位置
删除动画中除了在 SkeletonProfile 中定义过的 root_bone 和 scale_base_bone 以外的位置轨道。在 SkeletonProfileHumanoid 中,这意味着删除“Root”和“Hips”之外的位置轨道。自 Godot 4 起,动画在变换值中包含放松姿势。如果禁用此选项,动画可能会意外地改变身体形状。
未映射骨骼
删除动画中未被映射骨骼的变换轨道。
骨骼命名器
重命名骨骼
重命名映射的骨骼。
唯一节点
使骨架成为唯一名称节点,名称在 skeleton_name 中指定。这使得动画轨道路径能够独立于场景层次结构保持一致。
放松修复器
SkeletonProfileHumanoid 中定义参考姿势有以下规则:
人形物体呈 T 形姿势
人形物体在 Y 朝上的右手坐标系中面向 +Z
人形物体不应该有变换节点
将 +Y 轴从父关节指向子关节
+X 旋转使关节像肌肉收缩一样弯曲
这些规则为混合动画和反向动力学(IK)提供了便捷的定义。如果你的模型与此定义不符,则需要用这些选项来进行修正。
应用节点变换
如果资产在导出时没有考虑到共享,导入的骨架可能会有用于变换的节点。例如,从 Blender 导出的没有执行“应用变换”的 glTF 就是这样的情况。模型看起来与定义相符,但内部的变换与定义不同。此选项可通过在导入时应用变换来修复此类模型。
备注
如果导入的场景包含骨架以外的其他对象,该选项可能会产生负面影响。
归一化位置轨道
位置轨道主要用于模型的移动,但在不同高度的模型之间共享移动动画可能会由于步长的差异而导致滑步现象。该选项会根据 scale_base_bone 的高度归一化位置轨道。scale_base_bone 高度作为 motion_scale 存储在骨架中,归一化的位置轨道值在播放时将乘以该值。如果禁用此选项,则位置轨道不会被归一化,导入后骨架的 motion_scale 始终为 1.0。
对于 SkeletonProfileHumanoid,scale_base_bone 是“髋部”(Hips),因此髋部的高度被用作 motion_scale。
覆盖轴
通过覆盖模型的放松姿势来统一模型的放松姿势,以匹配 SkeletonProfile 中定义的参考姿势。
备注
该选项是 Godot 4 中共享动画最重要的选项,但请注意,如果外部设置的原始放松姿势很重要,此选项可能会产生糟糕的结果。如果你想在保留原始放松姿势的情况下共享动画,请考虑使用实时重定向模块。
修复剪影
这会尝试让模型的剪影与 SkeletonProfile 中定义的参考姿势相匹配,例如 T-Pose。该功能无法修复差异太大的剪影,并且可能对修复骨骼滚动不起作用。
使用 SkeletonProfileHumanoid 时,不需要为 T-Pose 模型启用此选项,但应为 A-Pose 模型启用。然而在这种情况下,根据模型的脚跟高度,修复后脚部的结果有可能会很糟糕,所以你可能需要在 filter 数组中添加你不希望修复的 SkeletonProfile 中的骨骼名称,如下例所示。
此外,对于膝盖或脚弯曲的模型,可能需要调整 scale_base_bone 高度。为此可以使用 base_height_ adjustment 选项。