merged-loading-results.md 4.4 KB

七批建筑合并与内容加载队列修复

日期:2026-10-09

实际驾驶舱近景帧率尚未验收。本记录只描述完成的资产与代码核验,不将其等同于“卡顿已消失”。

已完成

  • 正在运行的 pwsh-532 顺序导出正常结束,7 个在用 CAD BIM 批次全部合并完成;未重复启动导出。
  • 每个 renderable GLB 为 1 个网格节点,最多 17 个材质 primitive(体量批次最多 8 个)。共 603 个实际被 LOD 树引用的文件,覆盖 30,159 个去重建筑 ID。
  • 全部 LOD1:86,293,856 bytes / 11,271,231 triangles / 74 nodes。
  • 全部 LOD0:227,874,904 bytes / 29,438,474 triangles / 529 nodes。
  • 试点清单与原始 Git 清单比较:2,942 栋相同,缺失 0,新增 0;LOD1 节点 3,568 → 9,字节 25,217,016 → 9,029,908。
  • verify-merged-cad-bim.mjs 实际逐 primitive Draco 解码,校验索引、有限顶点、节点变换、瓦片边界(量化容差 0.5m)、manifest 字节/三角形及跨批栋数去重。603 文件全部通过。不能由此证明屋顶闭合、门窗观感或 GPU 帧率。

复现并修复的调度缺陷

原控制器通过 fromUrl() 的返回释放所谓单并发闸门。该返回只表示 tileset.json 初始化完成,不代表 GLB 下载、解码和上传完成。对旧控制器的独立复现输出 started=[a,b],但第一批 tilesLoaded=false,断言“第二批不得启动”失败。

新 services/tilesetLoading.js 将初始流入的单批闸门保持到实际渲染过、loadProgress 的 pending/processing 为 0、tilesLoaded 为 true,并稳定 250ms。已加载批次再次请求细节时,也会阻止新增批次初始化。此闸门限制新增批次,不承诺单个 GLB 上传能被自动分帧或所有已有批次的细化完全互斥。

附带修复:

  • 相机位置累计变化与旋转均计入 600ms 静止门槛。
  • 以根 OBB 的最近距离判断加载/显示,不再减去大外接球半径。
  • 确认 Cesium 动态 SSE 内部读取相机高度,关闭 dynamicScreenSpaceError,保留普通距离投影 SSE。
  • 显式关闭隐藏预载和飞行终点预载。
  • 缓存余量从 512/256MiB 改为 64/32MiB。这是 Cesium 缓存目标,不能叫硬显存上限。
  • 粗模显示判据使用当前渲染帧实际可见的非空三角内容;JSON-ready/空根锚点不代表楼房已经上屏。
  • 清理失败重试风暴、重复销毁、晚到初始化结果、元数据 AbortController、timer 与事件监听。
  • 初始化前立即将控制器交给 mapService,销毁时可取消仍在进行的准备;异步新增实例继承当前地面/管线样式,状态计数更新。
  • 语法检查发现已有重复 hasDeviceMarker 导出:按当前调用方 (viewer, code, pointCode) 保留新版,移除旧定义。

验证

  • node .scratch/cockpit-shell-panel-layout/verify/t35-tileset-loading.mjs:11 个场景 passed(包含当前帧离开视锥后恢复粗模)。
  • node .scratch/cockpit-shell-panel-layout/verify/t35-obb-distance.mjs:4 个检查 passed。
  • verify-lod-district.mjs:7/7 批次 passed。
  • verify-merged-cad-bim.mjs:603 个实际文件通过;报告为 merged-city-audit-final.json。
  • JS node --check、Blender 导出 Python 编译和 git diff --check passed。
  • 既有 8000 HTTP 服务的试点 manifest 返回 200,count=2942,coarseNodes=9,合并标记完整。
  • 按项目规则未运行 build、dev、serve 或 preview,未启动替代服务器。已授权的实际浏览器核验尝试被多次 session not registered or already stopped 阻断,未取得有效近景帧率/CPU profile。

仍需验收

  • 同一相机路径靠近楼房时的帧耗时、长任务与移动响应。
  • 合并/减面后的屋顶、窗门、基础贴地观感。
  • 解码后全资产顶点总量约 111,037,935;这证明压缩下载字节不等于 GPU 上传量。合并降低节点/primitive 数,不能直接宣称整场景流畅。
  • 此前“按需渲染独占空闲帧、保证加载不影响移动、参数优化已经证明唯一根因”的描述没有实测支持,应撤回。

Issue 写入限制

deck_context 已确认 backend=markdown。deck_issue_patch(comment) 返回 requested=1/succeeded=0,具体原因是对 issue 文件写入被 workspace-write 文件策略拒绝。因此未通过其他文件工具改写该被拒绝文件;本记录单独保存。处理关系可通过 deck_issue_report 上报,但 note 仅回显,不等同于票正文更新。