使用 Animation Bake

使用 Animation Bake 将 FBX 模型中的骨骼动画烘焙到 EXR 纹理中,并生成相应的 JSON 配置文件。

播放期间,材质根据动画进度从纹理中采样骨骼变换,并在顶点着色器中对网格进行蒙皮。这样可以减少 CPU 处理以及向 GPU 的数据传输,但会占用额外的显存。动画精度取决于纹理分辨率。

您可以使用起始帧和结束帧定义多个动作,例如待机、行走和转身。该工具会将已启用的动作写入动画纹理,并记录每个动作的帧范围,以便在回放时选择。

点击 Start Bake 后,该工具会烘焙动画、导入资源,并将网格添加到 Prefabs。该工具还会为网格设置材质、材质属性和 EXR 图像。

回放材质

该工具提供两种支持骨骼动画纹理的材质:

材质 (Material)

描述 (Description)

VertexPhongSkinnedSkeletonAnimation

使用冯氏 (Phong) 光照的骨骼动画材质。

PhysicallyBasedSkinnedSkeletonAnimation

使用基于物理的渲染的骨骼动画材质。

这两种材质都通过动画纹理和剪辑属性控制骨骼动画。请根据工程的光照和外观要求选择材质。如果手动更改材质,请检查动画纹理和回放属性是否仍正确关联。

前提条件

烘焙骨骼动画之前:

  1. 准备一个包含蒙皮模型和动画的 FBX 文件。

  2. 在建模工具中检查动画。确保网格变形、位置、朝向和缩放符合预期。

  3. 确保需要蒙皮的顶点具有有效的骨骼权重。动画回放最多支持每个顶点受四根骨骼影响。

  4. 确定要导出的动作名称和帧范围。

  5. 确保工程可以写入烘焙输出目录。

对于不需要骨骼变形的几何体,请使用适合其用途的网格和材质配置。

打开该工具

要打开 Animation Bake,在 Kanzi Studio 主菜单中选择 Tools > Animation Bake。

../../_images/Animation-Bake.png

该窗口包含模型列表、动画剪辑列表、动作配置表和烘焙选项。

../../_images/Animation-Bake-tool.png

用户界面

模型和动画剪辑

控件

描述 (Description)

Load FBX

加载 FBX 文件。

Remove FBX

从工具列表中移除选定的 FBX 模型。

FBX Models

列出已加载的模型。选择一个模型可查看其动画剪辑。

Animation Clips

列出选定模型的动画剪辑,用于创建动作。

动作配置

../../_images/Animation-Bake-tool-add-action.png

点击 Add Action 可向 Action Config 添加动作。使用表格中的字段指定动作名称、帧范围以及是否导出该动作。

字段

描述 (Description)

Model

包含该动作的模型。

Clip

该动作的源动画剪辑。

Action Name

导出的动作名称。请使用易于识别的名称,例如 Idle、Walk 或 Turn。

Start Frame

动作的第一帧(包含该帧)。

End Frame

动作的最后一帧(包含该帧)。

Export

是否在当前烘焙中包含此动作。

Delete

删除此动作配置。

删除动作配置与移除源模型是不同的操作。烘焙之前,请检查剩余的动作配置及其 Export 状态。

烘焙选项

控件

描述 (Description)

Trim static frames

检查并裁剪动作开头和结尾处重复的静态帧,以减少存储的动画数据。

Start Bake

烘焙已启用的动作配置,并将相关资源导入工程。

烘焙骨骼动画

加载模型

要加载 FBX 模型:

  1. 单击 Load FBX。

  2. 选择要处理的 FBX 文件。

  3. 在 FBX Models 中选择您加载的模型。

  4. 在 Animation Clips 中查看该模型的剪辑。

如果没有可用的动画,请检查 FBX 是否包含动画和有效的骨骼绑定。

创建动作

要从动画剪辑创建动作:

  1. 在 Animation Clips 中选择源动画剪辑。

  2. 单击 Add Action。

  3. 在 Action Config 中,将 Action Name 设置为您要导出的名称。

  4. 设置 Start Frame 和 End Frame。

  5. 为该动作启用 Export。

  6. 重复这些步骤以创建其他动作。

结束帧必须大于或等于起始帧。该范围必须位于源动画的有效范围之内。

两个端点均包含在内。不进行裁剪时,帧数为:

Action frame count = End Frame - Start Frame + 1

例如,以下配置将一条时间线划分为两个动作:

Action Name

Start Frame

End Frame

Export

Idle

0

29

已启用 (Enabled)

Walk

30

89

已启用 (Enabled)

Idle 包含 30 个采样帧,Walk 包含 60 个采样帧。这些范围仅为示例,请根据您的动画设置范围。

设置静态帧裁剪

要移除动作开头和结尾处重复的静态帧,请启用 Trim static frames。

启用后,该工具会检查动作开头和结尾处重复的骨骼姿势,并在适用时减少存储的帧数。裁剪会更新动作的起始行、帧数和持续时间信息。

备注

如果开头或结尾的停顿属于预期时序的一部分,请禁用此选项。此选项只修剪动作边界处的静态帧,不会修剪动作内部的停顿。

开始烘焙

要烘焙需要导出的动作:

  1. 检查所有动作的名称和帧范围。

  2. 确保至少为一个动作启用了 Export。

  3. 点击 Start Bake。

    该工具为每个采样帧计算骨骼变换,并生成 EXR 和 JSON 文件。

  4. 在 Log 中检查处理消息和烘焙结果。

查看生成的资源

预设件 (Prefabs)

烘焙完成后,网格会被添加到 Prefabs 中。该工具会自动配置:

  • 骨骼动画回放材质。

  • 回放所需的材质属性。

  • 对应的 EXR 动画图像。

在 Prefabs 中找到生成的模型,将其添加到场景中,然后检查其外观和动画回放。

../../_images/Animation-Bake-tool-prefab.png

输出文件

该工具将生成的文件保存在:

Tool_project\Bake\Animation Bake

文件类型

内容和用途

.exr

为回放材质存储每帧的骨骼矩阵。

.json

存储动画和纹理配置,用于查看、验证和使用烘焙结果。

请使用相互匹配的 EXR 和 JSON 文件。重新烘焙或更改动作范围后,请使用新生成的资源和配置。

日志和 JSON

在 Log 中查看烘焙过程和相关数据。如需进一步验证,请打开对应的 JSON 文件,检查动作名称、片段帧数、起始行和纹理尺寸。

启用静态帧修剪时,请使用生成的配置。不要继续使用修剪前的帧数和起始行。

../../_images/Animation-Bake-tool-log.png

材质属性参考

该工具会自动配置动画纹理属性。使用此参考检查结果,或通过应用程序逻辑控制回放。

纹理属性

属性 (Property)

描述 (Description)

SkeletonAnimationSkinningBoneTexture

存储骨骼变换的动画纹理。

SkeletonAnimationBoneCount

烘焙的骨骼数量。

SkeletonAnimationTextureWidth

纹理的完整宽度(以像素为单位)。

SkeletonAnimationTextureHeight

纹理的完整高度(以像素为单位)。

SkeletonAnimationTextureSpritePosX

动画数据区域的水平起始位置(以像素为单位)。对于独立的输出纹理,初始值为 0。

SkeletonAnimationTextureSpritePosY

动画数据区域的垂直起始位置(以像素为单位)。对于独立的输出纹理,初始值为 0。

动画纹理存储的是数值数据。请保留有效的浮点数据,避免会改变矩阵值的颜色转换或有损处理。

../../_images/Animation-Bake-tool-bake-exr.png

剪辑属性

属性 (Property)

描述 (Description)

SkeletonAnimationClipStartRow

当前动作相对于动画数据区域的起始行。

SkeletonAnimationClipFrameCount

当前动作中存储的采样帧数。

SkeletonAnimationClipProgress

当前动作的播放进度,范围为 0.0 到 1.0。

播放和切换动作

播放动作

../../_images/Animation-Bake-tool-anmiation.png

要播放动作:

  1. 从生成的配置中获取目标动作的起始行和帧数。

  2. 设置 SkeletonAnimationClipStartRow 和 SkeletonAnimationClipFrameCount。

  3. 将 SkeletonAnimationClipProgress 设置为 0.0。

  4. 使用属性动画或应用程序逻辑,在所需的持续时间内将进度从 0.0 更新到 1.0。

进度 0.0 显示第一帧,1.0 显示最后一帧。中间进度会在相邻采样帧之间对骨骼矩阵进行插值。

暂停和循环

  • 要暂停动画,请停止更新进度并保持其当前值。

  • 要重新播放动画,请将进度设置为 0.0,然后重新开始更新进度。

  • 要循环播放动画,请在到达末尾后从 0.0 重新开始。过渡效果取决于源动作的第一个姿势和最后一个姿势是否一致。

数据布局和限制

每个骨骼矩阵占用四个像素,每个采样帧占用一行。单独烘焙的纹理具有以下维度:

Texture width = Bone count × 4
Texture height = Sum of stored frame counts for all exported actions

例如,78 个骨骼和总共 300 个存储帧会生成 312 × 300 的纹理。

骨骼和帧越多,纹理尺寸越大。烘焙前,请仅启用所需的动作,并根据播放要求设置帧范围。

另请参阅

动画 (Animations)

使用网格