跳到主要内容

第 6 章:SCNE 区段

Directory Tag: SCNE
作用范围: 全局区段,chunkId = -1
必须性: 可选
允许 Codec: RAW8

SCNE 定义资产首次被打开、预览或展示时的推荐场景状态,包括根变换、默认相机、背景和主光源。它不改变资产权威体素内容;缺失或不支持时,读取器应使用自身默认展示策略。

6.1 Payload Layout

SCNE Payload 固定为 128 字节:

OffsetSizeTypeFieldDescription
02uint16sceneVersion必须为 1
22uint16sceneSize必须为 128
44uint32sceneFlags场景选项标志
812float32[3]translation资产默认平移 (x,y,z)
2016float32[4]rotation默认旋转四元数 (x,y,z,w)
3612float32[3]scale默认缩放 (x,y,z)
4812float32[3]cameraPosition默认相机位置
6012float32[3]cameraTarget默认相机观察目标
724float32cameraFovY垂直视场角,单位为度
764float32cameraNear近裁剪面
804float32cameraFar远裁剪面
844uint32backgroundRgba非预乘 RGBA8,低位到高位依次为 R/G/B/A
8812float32[3]keyLightDirection主光方向,指向光线传播方向
1004float32keyLightIntensity主光相对强度
1044uint32keyLightRgba非预乘 RGBA8
1084float32ambientIntensity环境光相对强度
1124uint32ambientRgba非预乘 RGBA8
1164uint32reserved0必须为 0
1208uint8[8]reserved1必须为全零

sceneFlags 定义:

Bit名称含义
0USE_ORTHOGRAPHIC使用正交相机;否则使用透视相机
1SHOW_GROUND推荐显示地面
2ENABLE_SHADOW推荐启用阴影
3–31Reserved必须为 0

6.2 解释规则

translationrotationscale 为展示根变换。它们不得回写为 VOX0 坐标,也不得影响 Source Hash。rotation 应为单位四元数;读取器可在数值误差范围内归一化它。scale 每个分量必须大于零。

cameraTarget 不等于 cameraPositioncameraNear 必须大于零,cameraFar 必须大于 cameraNear。透视相机下 cameraFovY 必须位于 (0, 180);正交相机下该字段保留为建议缩放参考,读取器可以用自身默认正交尺寸。

主光方向应为非零向量,读取器可归一化。背景和光照颜色以 RGBA8 表示;Alpha 对背景是否透明的具体处理由宿主渲染器决定。

6.3 缺失与降级

SCNE 不存在时,读取器应使用以下合理默认:资产位于原点、单位缩放、无旋转;相机从资产包围盒对角线方向观察中心;中性背景、单一白色主光和适量环境光。

读取器不支持相机、光照、阴影或地面时,可以忽略对应字段。SCNE 损坏、未知版本或校验失败时,读取器应丢弃整个 SCNE,但不得拒绝权威资产。

6.4 验证规则

验证器必须检查:

  • codec = RAW8length = rawLength = 128
  • sceneVersion = 1sceneSize = 128
  • sceneFlags 的保留位和所有保留字段为 0
  • 全部浮点字段有限;
  • 四元数长度大于零;
  • scale 分量均大于零;
  • 相机位置与目标不相等,近远裁剪关系正确;
  • 主光方向长度大于零,强度不小于零,环境光强度不小于零。

SCNE 验证失败属于可选展示数据错误。验证器应报错,读取器应忽略该区段并使用默认展示。


本章总结

SCNE 为资产提供可复现的首屏展示建议,但不参与资产真实性。VFP 的可编辑体素语义始终由 METAPAL0CHIXVOX0 决定。