跳到主要内容

第 21 章:兼容性规范

VFP 的兼容性目标是让旧读取器安全处理新文件,让新读取器稳定读取旧文件,并避免任何版本在不知情的情况下错误解释权威体素数据。

21.1 主版本与次版本​

主版本变更表示可能影响 Header、Footer、Directory、META、PAL0、CHIX、VOX0 或其核心解释的破坏性变化。读取器遇到更高主版本必须拒绝文件,除非它显式实现该主版本。

次版本只能新增可安全忽略的能力,例如新可选 Tag、可选缓存或更严格的验证说明。若次版本引入无法被旧读取器安全忽略的权威语义,必须提高主版本。VFP 1.3 的目录 flags 和 reserved 已冻结为零,不能把未来语义塞入未使用位。MATL v1 是可选 palette-bound 扩展:旧 Reader 忽略后保留 PAL0 基础色显示。

21.2 未知数据处理​

未知内容旧读取器行为
未知四字符 Tag,目录属性与范围有效跳过整个 Section,可记录 Warning
已知必需区段的未知 Codec拒绝资产
可选区段的未知 Codec忽略该区段
任意目录项的 flags 非零拒绝;VFP 1.3 不定义 flags 扩展位。
Header/Footer/目录项的 reserved 非零拒绝;合规 Writer 必须写零。

写入器不得在 VFP 1.3 文件中填充未来版本字段或私有数据;自定义数据必须使用 XEXT,不能占用未分配 Tag、flags 或 reserved 字段。

21.3 缓存兼容性​

读取器可以只实现最小权威读取路径,而不实现任何缓存。缓存版本、缓存顶点格式和渲染策略可以随 Minor 版本演进,只要旧读取器可以安全忽略不支持缓存并从 VOX0 重建。

缓存不得成为 VFP 兼容性的强制前提。任何产品若只发放 VBUF/PMSH/PRVW/THMB 而不提供 VOX0,就不符合 VFP 1.3。

21.4 尺寸与未来格式​

VFP 1.3 固定服务于单轴不超过 255 的单体体素资产。为了支持更大模型、世界分区或更宽坐标,不得在 VFP 1.3 中私自把 uint8 字段解释为 uint16,也不得复用保留字段拼接坐标。

这类能力应通过新的主版本或独立的 VWFP 世界格式引入。VFP 资产可被 VWFP 引用、实例化或嵌入,但两者的二进制语义必须独立。

21.5 兼容性承诺​

一旦 VFP 1.3 冻结,以下语义不得改变:VOX0 为唯一权威体素源、Palette Index 0 为空、坐标线性顺序、Directory/Footer 定位方式、已分配 Tag/Codec/Flag 值、Source Hash 规范化输入。对 MATL 等可选扩展,冻结的是其已发布版本的记录布局与降级规则;新字段必须使用新的版本化记录,不能占用 v1 保留字节。


本章总结​

兼容性不是“尽量读出来”,而是“要么正确读取,要么安全拒绝”。VFP 通过版本、DIR0、严格目录字段和缓存降级,保证长期演进不牺牲资产真实性。