# 产物一致性(Parity)指南 > **触发条件**:任何声称"纯重构、产物不变"的改动。 > > 这条管线的产物是 `.blend` / `.glb` / `.png`——**二进制、无法 code review、 > 肉眼看不出 5% 的几何漂移**。parity 校验是这一层唯一的回归防线。 --- ## 为什么不能直接比字节 三类文件全都**不是位级可复现**的,同一份代码跑两次就会不一样: | 产物 | 为什么不稳定 | |---|---| | `.blend` | 内嵌绝对路径;图片按哈希表顺序打包 | | `.png` | EEVEE 渲染非位级可复现 | | `.glb` | glTF 导出器会去重相同的 accessor,而 `smart_project` 的 UV 带浮点噪声——实测两次跑出 399 vs 398 个 accessor、差 720 字节,而 node/mesh/primitive/material/image **完全一致** | 所以比对的是**结构摘要**,不是字节。 --- ## 三件套 | 工具 | 位置 | 作用 | |---|---|---| | 场景摘要 | `blender/tools/scene_digest.py` | 在 Blender 内打开 `.blend`,输出稳定 JSON:对象名/顶点数/面数/材质槽/自定义属性、材质参数、场景属性 | | GLB 摘要 | `scripts/glb-digest.js` | 纯 Node 读 GLB 的 JSON chunk,输出 node/mesh/material 清单与 PBR 参数,附 buffer 字节长度 | | 驱动 | `scripts/parity.js` | 跑构建 → 采集摘要 → 快照 / 比对 | ```bash node scripts/parity.js capture