跳到主要内容

第 4 章:META 区段

META 是唯一的全局 RAW8 UTF-8 JSON 区段(chunkId=-1、codec=0、flags=0),不是固定 128 B 二进制结构。Writer 必须使用 canonical JSON:json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(',', ':')) 的 UTF-8 字节。

4.1 必需字段​

{
"format":"Voxel Format Package",
"formatVersion":{"major":1,"minor":3},
"coordinateSystem":"Z_UP",
"axisConvention":{"up":"+Z","forward":"+Y","handedness":"RIGHT_HANDED"},
"sourceHash":"64 个小写十六进制字符",
"objects":[{
"id":"obj_main",
"type":"voxel-volume",
"gridSize":[128,128,128],
"chunkSize":16,
"chunksPerAxis":8,
"voxelEncoding":"RAW8_OR_RLE8",
"meshEncoding":"GREEDY_FACE_V1",
"bounds":{"min":[0,0,0],"max":[127,127,127]},
"solidVoxelCount":1,
"globalGreedyFaceCount":6
}]
}

gridSize 必须为三个相同的 1..255 整数;chunksPerAxis=ceil(gridSize/chunkSize)。coordinateSystem 固定为字符串 Z_UP:体素源坐标 x 最快、y 次之、z 为上轴。axisConvention 补齐 Z_UP 未定义的朝向:固定为 up=+Z、forward=+Y、handedness=RIGHT_HANDED,因此 right=cross(forward,up)=+X。新 Writer 必须写入完整对象;缺失该对象的早期 1.3 文件按这组默认值解释,存在但不完整或其他值时 Reader 不得猜测。sourceHash 必须同时匹配 Header 和根据 PAL0/VOX0 重算的值。

bounds 是非空体素的闭区间包围盒。缓存、生成器、名称等额外字段可存在,但不能替代 Directory、CHIX 或权威 VOX0。

4.2 可选扩展声明​

存在 MATL、Rig 或 XEXT 时,META 分别声明 materials、rig、extensions 清单,用于发现能力;真正的二进制内容及可信绑定仍以对应区段为准。未知字段必须忽略,不得把它们解释为新的权威体素语义。

4.3 验证​

验证器应检查 META 是 UTF-8 JSON 对象、格式/版本、Z_UP、完整的 v1 轴约定(或历史缺失回退)、单一立方对象、网格/Chunk 范围、bounds/实体数与权威恢复结果,以及 META/Header 的 sourceHash 一致。META 中出现旧的 coordinateSystem=1、+Y 上或固定二进制 META 布局属于过期规范,VFP 1.3 Writer 不得生成。