# 票 35 本轮最终状态 日期:2026-10-09 ## 已实施 - 7 个在用 CAD BIM 批次全部完成资产级减面、按材质合并和 Draco 压缩。 - 新增 `tools/city-massing/build-streaming-tiles.mjs`:从合并 GLB 再拆为空间小瓦片,`streaming-v2` 每片最多 20,000 三角、60,000 顶点,粗层 request volume 1500m,细层 request volume 250m。原批次目录保留。 - 运行配置 `public/cockpit/config.json` 已切换 7 个精细批次到 `streaming-v2`。 - 运行时加载控制器 `services/tilesetLoading.js`: - 只按相机到根 OBB 最近距离做批次判定; - 关闭 Cesium 内部会读取相机高度的 dynamic SSE; - 相机停止 600ms 才开始新的批次流入; - 前一个批次实际内容 pending/processing 完成、tilesLoaded 且稳定后才释放队列; - 隐藏且无进行中请求的粗模不再永久占用队列; - 处理失败、晚到初始化、重复销毁、事件和 timer 清理; - 当前渲染帧没有可见精细内容时,不隐藏粗模。 - 显存缓存目标从 512/256MiB 收紧到 64/32MiB;Cesium 的缓存目标不是硬显存上限。 ## 资产核验 `streaming-city-audit-final.json`: - 7 批、30,159 栋建筑; - 5,956 个 Draco 小瓦片; - 40,709,705 个三角形守恒; - 95,151,680 个解码顶点; - 最大单文件 46,847 顶点,低于 60,000 上限; - 每个小瓦片的 Draco 索引、节点变换、request volume 中心、瓦片边界、字节/三角形清单均通过; - 跨批建筑 ID 无重复/缺失。 Cesium 原生 request-volume 距离测试:试点 634 个小瓦片、1,268 个范围内外断言通过。 ## 代码回归 - `t35-tileset-loading.mjs`:12 个加载/失败/空锚点/当前帧/卸载/晚到结果场景通过; - `t35-obb-distance.mjs`:4 个 OBB 最近距离场景通过; - 7 批 `verify-lod-district.mjs` 通过; - `node --check`:`cesiumEngine.js`、`tilesetLoading.js`、`mapService.js`、两个新工具脚本通过; - Blender 导出脚本 Python 编译通过; - `git diff --check` 通过; - 8000 已返回 7 个 streaming-v2 根 tileset JSON,HTTP 200。 ## 实际驾驶舱证据与限制 实际 8000 页面可以进入,状态显示 `3D Tiles 7 个`;调试网络确认 7 个 streaming-v2 根 tileset JSON 和 root-anchor.glb 请求成功。浏览器会话中途出现 session/ref 失效,导致没有获得稳定的“房屋内容加载期间”帧率和长任务样本;当前的性能记录只能证明页面启动和根资产请求,不足以证明靠近后的慢动作已经消失。 因此票 35 仍保持 open,不能宣称最终帧率达标。下一次人工复测应硬刷新 8000,进入场景后靠近城区,确认网络 URL 含 `/streaming-v2/` 且出现分片 GLB 请求,同时观察移动/静置两个阶段的帧间隔。 ## 其他限制 - 项目规则要求本轮未运行 build、dev、serve 或 preview;未启动替代服务器。 - `deck_issue_patch(comment)` 因 workspace-write 文件策略拒绝,未直接修改票正文;本独立记录保存全部结果,`deck_issue_report` 已上报当前处理关系。