跳到主要内容

第 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=1uint16 headerSize=32uint32 clipCountuint32 clipSize=32uint32 flags=0uint8[16] sourceHashPrefix

Clip Record:

OffsetSizeTypeField
04uint32clipId
44uint32durationMs,必须大于 0
84uint32keyframeCount
124uint32keyframeOffset(相对 Payload)
164uint32flags
2012uint8[12]保留,全零

关键帧固定 48 字节:uint32 timeMsfloat32 translation[3]float32 rotation[4]float32 scale[3]uint32 reserved。关键帧必须按 timeMs 严格升序,首帧为 0,末帧不得超过 durationMs

13.2 解释规则

flags bit0 = LOOPbit1 = PING_PONG,其他位为零。读取器可选择默认播放第一个 clipId 最小的片段,或由应用自行选择。插值规则为:平移与缩放线性插值,四元数使用最短路径球面插值;若实现不支持球面插值,可使用归一化线性插值。

ANM0 不修改 META.anchor/pivot、CHIX、PAL0 或 VOX0。它的 Source Hash 前缀仅用于确认所引用的资产版本;不匹配时应丢弃 ANM0。

13.3 验证与降级

验证器必须检查所有 Offset、Clip ID 唯一性、关键帧范围、有限浮点、正缩放、非零四元数、时间顺序和保留字段。动画错误为可选表现错误:读取器应忽略整个 ANM0 或受影响 Clip,不得拒绝资产。


本章总结

ANM0 提供轻量的资产展示动画;它不承担体素动画真值,也不会影响权威 Source Hash 的输入。