第 6 章:SCNE 区段
Directory Tag: SCNE
作用范围: 全局区段,chunkId = -1
必须性: 可选
允许 Codec: RAW8
SCNE 定义资产首次被打开、预览或展示时的推荐场景状态,包括根变换、默认相机、背景和主光源。它不改变资产权威体素内容;缺失或不支持时,读取器应使用自身默认展示策略。
6.1 Payload Layout
SCNE Payload 固定为 128 字节:
| Offset | Size | Type | Field | Description |
|---|---|---|---|---|
| 0 | 2 | uint16 | sceneVersion | 必须为 1 |
| 2 | 2 | uint16 | sceneSize | 必须为 128 |
| 4 | 4 | uint32 | sceneFlags | 场景选项标志 |
| 8 | 12 | float32[3] | translation | 资产默认平移 (x,y,z) |
| 20 | 16 | float32[4] | rotation | 默认旋转四元数 (x,y,z,w) |
| 36 | 12 | float32[3] | scale | 默认缩放 (x,y,z) |
| 48 | 12 | float32[3] | cameraPosition | 默认相机位置 |
| 60 | 12 | float32[3] | cameraTarget | 默认相机观察目标 |
| 72 | 4 | float32 | cameraFovY | 垂直视场角,单位为度 |
| 76 | 4 | float32 | cameraNear | 近裁剪面 |
| 80 | 4 | float32 | cameraFar | 远裁剪面 |
| 84 | 4 | uint32 | backgroundRgba | 非预乘 RGBA8,低位到高位依次为 R/G/B/A |
| 88 | 12 | float32[3] | keyLightDirection | 主光方向,指向光线传播方向 |
| 100 | 4 | float32 | keyLightIntensity | 主光相对强度 |
| 104 | 4 | uint32 | keyLightRgba | 非预乘 RGBA8 |
| 108 | 4 | float32 | ambientIntensity | 环境光相对强度 |
| 112 | 4 | uint32 | ambientRgba | 非预乘 RGBA8 |
| 116 | 4 | uint32 | reserved0 | 必须为 0 |
| 120 | 8 | uint8[8] | reserved1 | 必须为全零 |
sceneFlags 定义:
| Bit | 名称 | 含义 |
|---|---|---|
| 0 | USE_ORTHOGRAPHIC | 使用正交相机;否则使用透视相机 |
| 1 | SHOW_GROUND | 推荐显示地面 |
| 2 | ENABLE_SHADOW | 推荐启用阴影 |
| 3–31 | Reserved | 必须为 0 |
6.2 解释规则
translation、rotation 和 scale 为展示根变换。它们不得回写为 VOX0 坐标,也不得影响 Source Hash。rotation 应为单位四元数;读取器可在数值误差范围内归一化它。scale 每个分量必须大于零。
cameraTarget 不等于 cameraPosition。cameraNear 必须大于零,cameraFar 必须大于 cameraNear。透视相机下 cameraFovY 必须位于 (0, 180);正交相机下该字段保留为建议缩放参考,读取器可以用自身默认正交尺寸。
主光方向应为非零向量,读取器可归一化。背景和光照颜色以 RGBA8 表示;Alpha 对背景是否透明的具体处理由宿主渲染器决定。
6.3 缺失与降级
SCNE 不存在时,读取器应使用以下合理默认:资产位于原点、单位缩放、无旋转;相机从资产包围盒对角线方向观察中心;中性背景、单一白色主光和适量环境光。
读取器不支持相机、光照、阴影或地面时,可以忽略对应字段。SCNE 损坏、未知版本或校验失败时,读取器应丢弃整个 SCNE,但不得拒绝权威资产。
6.4 验证规则
验证器必须检查:
codec = RAW8且length = rawLength = 128;sceneVersion = 1、sceneSize = 128;sceneFlags的保留位和所有保留字段为0;- 全部浮点字段有限;
- 四元数长度大于零;
scale分量均大于零;- 相机位置与目标不相等,近远裁剪关系正确;
- 主光方向长度大于零,强度不小于零,环境光强度不小于零。
SCNE 验证失败属于可选展示数据错误。验证器应报错,读取器应忽略该区段并使用默认展示。
本章总结
SCNE 为资产提供可复现的首屏展示建议,但不参与资产真实性。VFP 的可编辑体素语义始终由 META、PAL0、CHIX 和 VOX0 决定。