# 重构施工计划:`osmassets` 包化(P0–P3) > 临时工作文档。P3 收尾后把结论并入 `docs/changelog.md`,本文件删除。 ## 目标 把「从 OSM 生成 Blender / Cesium 资产」的逻辑从两个单体脚本里拆成可复用的库,使得: - 新增一种 OSM 要素 = 新增一个 `features/*.py` + 注册一行,不改 `build()` - 道路图层表、材质规格只有一份定义,JS 侧与 Python 侧不再各存一份 - `export_cesium.py` 不再靠材质名字符串跟 `generate_scene.py` 对接 - 纯几何 / 解析逻辑脱离 `bpy`,可用系统 python 直接测 ## 硬约束:严格产物一致 P0–P3 全程 **不改变任何输出**。每期结束必须通过 parity 校验,任何差异都要么消除、要么在本文件里逐条记录原因。 已知缺陷(本轮**只记录、不修**): | # | 位置 | 现象 | |---|---|---| | D1 | `export_cesium.py:26,34,40,52` | `"Office White Metal Facade"` 四张表里都有,`generate_scene.py` 里已无此材质——死条目 | | D2 | `scene-layers.js:15` vs `generate_scene.py:1017` | 同一批图层的颜色两侧各自手调,无一致性保证 | | D3 | `generate_scene.py:788` | `tuft_density_wave` 注释仍在跟已删除的 hedge banding 作对比 | ## Parity 工具与基线 `outputs/` 已在 `.gitignore` 中,基线快照放 `outputs/_refactor-baseline/`,不入库。 | 工具 | 位置 | 作用 | |---|---|---| | 场景摘要 | `blender/tools/scene_digest.py` | 在 Blender 内打开 `.blend`,输出稳定 JSON:对象名/顶点数/面数/材质槽/自定义属性、材质参数、场景属性 | | GLB 摘要 | `scripts/glb-digest.js` | 纯 Node 读 GLB 的 JSON chunk,输出 node/mesh/material 清单与 PBR 参数,附 buffer 字节长度 | | 驱动 | `scripts/parity.sh