第 13 章:ANM0 区段
Directory Tag: ANM0 · 作用范围: 全局 · 必须性: 可选 · Directory Codec: RAW8
ANM0 存储资产展示动画。VFP 1.3 的动画只作用于资产根变换和展示参数,不允许直接覆盖 VOX0 的体素内容。逐体素帧动画、骨骼系统或物理模拟不属于本版本。
13.1 Payload Layout
ANM0 由 32 字节 Header、clipCount 个 32 字节 Clip Record、以及每个 Clip 所引用的关键帧数据组成。
Header:uint16 version=1、uint16 headerSize=32、uint32 clipCount、uint32 clipSize=32、uint32 flags=0、uint8[16] sourceHashPrefix。
Clip Record:
| Offset | Size | Type | Field |
|---|---|---|---|
| 0 | 4 | uint32 | clipId |
| 4 | 4 | uint32 | durationMs,必须大于 0 |
| 8 | 4 | uint32 | keyframeCount |
| 12 | 4 | uint32 | keyframeOffset(相对 Payload) |
| 16 | 4 | uint32 | flags |
| 20 | 12 | uint8[12] | 保留,全零 |
关键帧固定 48 字节:uint32 timeMs、float32 translation[3]、float32 rotation[4]、float32 scale[3]、uint32 reserved。关键帧必须按 timeMs 严格升序,首帧为 0,末帧不得超过 durationMs。
13.2 解释规则
flags bit0 = LOOP,bit1 = PING_PONG,其他位为零。读取器可选择默认播放第一个 clipId 最小的片段,或由应用自行选择。插值规则为:平移与缩放线性插值,四元数使用最短路径球面插值;若实现不支持球面插值,可使用归一化线性插值。
ANM0 不修改 META.anchor/pivot、CHIX、PAL0 或 VOX0。它的 Source Hash 前缀仅用于确认所引用的资产版本;不匹配时应丢弃 ANM0。
13.3 验证与降级
验证器必须检查所有 Offset、Clip ID 唯一性、关键帧范围、有限浮点、正缩放、非零四元数、时间顺序和保留字段。动画错误为可选表现错误:读取器应忽略整个 ANM0 或受影响 Clip,不得拒绝资产。
本章总结
ANM0 提供轻量的资产展示动画;它不承担体素动画真值,也不会影响权威 Source Hash 的输入。