跳到主要内容

附录 D:示例文件

D.0 THMB 可选缩略图样例要求

带缩略图的样例应在活动 Directory 中含唯一 THMB[-1],并且其载荷为可独立打开的 RGBA PNG。 读取器测试至少应覆盖:正常 THMB、缺失 THMB、payload CRC 错误、PNG signature 错误、非正方形 IHDR 和超过 1024 × 1024 的尺寸。上述错误只应让缩略图降级,不应改变同一文件的 VOX0 验证结论。

本附录定义一个最小概念资产,供编译器与读取器进行互操作测试。它是一个 1 × 1 × 1 的单红色体素资产,只有一个 Chunk,VOX0 使用 RAW8。为避免本附录因 CRC32 和 Source Hash 示例值被手工复制错误而产生误导,最终文件字节应由附录 B 的布局与第 16 章的 Hash 规则生成。

D.1 资产语义

属性
网格尺寸1 × 1 × 1
Chunk 尺寸1 × 1 × 1
Chunk 数量1
非空体素数1
Palette索引 1 = RGBA(255, 0, 0, 255)
Chunk ID0
Chunk 坐标(0, 0, 0)
VOX0RAW8,唯一体素的 Palette Index 为 1

D.2 规范化输入

{
"gridSize": [1, 1, 1],
"chunkSize": [1, 1, 1],
"palette": {
"1": { "rgba": [255, 0, 0, 255], "materialFlags": 0, "emission": 0 }
},
"voxels": [
{ "x": 0, "y": 0, "z": 0, "paletteIndex": 1 }
]
}

D.3 所需区段

Directory 必须含有以下四条权威 Entry:

TagchunkIdCodecPayload 要点
META-1RAW8grid/chunk size 均为 1,voxelCount=1,chunkCount=1,paletteEntryCount=1
PAL0-1RAW8一个索引 1 的红色条目
CHIX-1RAW8一个 Chunk ID 0、坐标 0/0/0、尺寸 1/1/1 的 Entry
VOX00RAW8Header 的 capacity=1、nonEmpty=1、dataLength=1,数据字节为 01

VOX0 的可变数据区只有一个字节:

01

D.4 文件写入顺序示例

以下是推荐物理布局;读取器不得依赖此排列:

Header (64)
META (128)
PAL0 (24)
CHIX (64)
VOX0 (33) + 7 bytes zero alignment padding
DIR0 (32 + 4 × 48 = 224)
Footer (64)

在此布局中,Directory Entry 的 Section Offset 分别为:META=64、PAL0=192、CHIX=216、VOX0=280、DIR0=320、Footer=544,文件总长度为 608 字节。每个 Payload 的 CRC32、DIR0 CRC32 和 META Source Hash 必须由实际字节计算后写入;不可使用占位值。

D.5 预期读取结果

合规读取器加载该文件后应得到:

asset.gridSize = (1, 1, 1)
asset.chunkCount = 1
asset.chunk(0).size = (1, 1, 1)
asset.chunk(0)[0,0,0] = paletteIndex 1
asset.palette[1] = RGBA(255, 0, 0, 255)
asset.nonEmptyCount = 1

读取器可自行生成六个可见单位面、十二个三角形或其他等价渲染表示;这些表现结果不改变该示例的权威体素内容。