# 32: 管线构件 glTF 素材与实例化渲染(样条/角/阀门/支管四类) Type: task Status: resolved Label: ready-for-agent Category: frontend-execution ## 来源 [票 24(前端设施点位与管线真实几何图层接线)](24-24.md) 收口时维护者 2026-10-12 裁定另立本票。 ## 现状事实(票 24 交付了什么、没交付什么) 票 24 已把真实几何接上图(端点 `GET /api/cockpit/v1/infrastructure/geometry`,由[票 30](30-untitled.md) 提供): - **管段**:`polyline` 贴地折线,管径分档映射线宽、行业映射颜色 —— **已是真实几何**; - **构件**:阀门/角管道/支管管道目前用**可辨识符号 + 中文标签**(`point` + `label`)表达,**不是 glTF 管道模型**。 票 24 明确没有拿临时符号冒充"已建成的管道模型"。本票补上素材与实例化。 ## 交付物 1. **四类构件素材**(维护者 2026-10-12 裁定的建模分类): - 样条管道:沿路径点拉伸的管体(管段本身已有折线,本项是把它做成有管径体积的模型); - 角管道:预制弯头/转角构件; - 阀门管道:含阀门结构的预制件; - 支管管道:T 型/十字型分支构件。 2. **实例化渲染**:同一构件类型复用同一份 glTF,按位置/朝向实例化,**不得每个构件各加载一份**(真实数据 5268 条管线,构件数随行业增长,逐个加载会爆内存)。 3. **朝向由真实几何决定**:管段两端点可算方向;**构件朝向目前无来源**(`gas_pipe_point` 无方位字段),只能按管段方向或固定朝向摆放时必须**如实说明这是近似**,不得声称是真实安装朝向。 4. **素材缺失时的降级**:素材未就位时保持票 24 的符号表达,**不得白屏或静默丢弃**。 ## 约束 - 素材放 `public/cockpit/...`(跟随现有资源归属约定),不进产物源码目录。 - 渲染层仍是 Cesium(ADR 0005 / 票 24 裁定);若最终判定必须引入 Three.js,需先修订 ADR 0005。 - 与票 24 的坐标纪律一致:不可上图的构件**不渲染**,仍进「无地图位置」清单。 ## 验收 浏览器实测:四类构件按素材渲染、类型可辨;大量实例下帧率可接受(给出实测读数);无真实朝向来源的构件如实标注近似;素材缺失时降级为符号而非空白。 ## 关联 由[票 24](24-24.md) 收口派生;几何契约由[票 30](30-untitled.md) 提供(已收口)。 ## 进度 **最终状态:resolved(2026-10-15)。** 用户确认“基本没有问题,可以尝试收口”,据此完成功能交付收口、关闭票据并完成关闭report。该确认不转化为缺失的性能或故障画面测试证据。 - 实施:四类glTF/GPU实例化、明示虚拟埋深及示意放大、地面近景保留2D导引、缺径显示默认DN160/400/800/800;源径/双侧推算与显示默认分开。排水按network_level 0污水/1雨水、缺失按0,非排水忽略,旧数据库不改。 - 已交付:前端`e518ba0`、`aa529db`;后端`a96091ce`、`1d1461a5`、`7150d431`;几何23/23、Cockpit489/489和相关领域/Cesium适配器回归通过;此前真实近景画面及本轮诊断记录均保留。 - 保留后续事项:最后一次运行接口检查缺少networkLevel键,部署/重载7150d431后需复验字段与真实等级1数据;没有在本次关闭时重新请求接口,不能将历史环境结论当作今日运行状态。旧数据/新数据导入由用户管理。 - 未取得完整通过证据:4K正常桌面平均FPS≥30、浏览器模板404及四类最终完整画面;最终构建受共享依赖缺失阻断。按用户确认关闭功能票,以上仅作为记录在案的后续复验,不标成已通过。本次只做票据/地图收尾,按项目规则未新增build/debug或截图。 - 证据入口:[模式及network_level修复记录](../verify/artifacts/t32/view-mode-network-level-fix.md)、[真实近景记录](../verify/artifacts/t32/visibility-fix-and-evidence.md)、[帧率限制记录](../verify/artifacts/t32/visibility-performance.json)。 ### 实施与验证历史(以下未完成状态为当时记录,以最终状态为准) - 已认领 @me、完整读票并 report。ready-for-agent,无 needs-triage、无阻塞;父 map 允许执行。本轮保留其他任务工作树,提交仅选择本票增量。 - 用户裁定(2026-10-13补充):低多边形标准示意;地表采样减虚拟埋深2m(非实测);已知管径按mm→m。缺管径允许在同业、端点完全重合且无分叉的连续链上,以两侧不同已知管段为锚点,按缺失段路径中点距离线性插值,保留两侧code/diameterMm、标记interpolated;单侧/无锚点/同一锚点闭环/分叉不补,不吸附邻近端点、不回写。路径不平滑/不生成安装拓扑;未知构件尺寸约1m、固定朝向明示近似;沿用地下视图。原4K平均FPS≥30与构建/回归/浏览器授权保留。 - 已实施:四类五模板(样条、弯头、阀门、三通、十字);EXT_mesh_gpu_instancing、ENU空间批次、稳定外部bin跨批共享几何;readyEvent后替换备用表达,初始/后续资源或地表失败降级、30s冷却后刷新重试;稳定批不重建,跨首次dynamic import和模型异步的清层代次守卫;已有信息面板展示虚拟埋深/近似与降级原因。 - 对抗式复核修掉:北向镜像、跨批embedded geometry不共享、稍变就全量拆建、失败永久短路、清层期间首次import迟到复活、terrainFailed未发布。相关新回归及既有t24/t33回归通过;最后全部代码的已授权yarn build成功(退出码0,Vite54.43s),临时public验收页已移除。 - 隔离浏览器证据:6实例/5批,spline2、elbow/valve/branch/cross各1,pending0/failed0、unknown保留1个符号,虚拟埋深与近似说明可读。窄模拟视口证据不能冒充4K。 - 真实只读核查更正:旧响应5268条LineString均**没有diameter键**,不能据此断言数据库全缺管径。后端已有毫米BigDecimal,读模型未透传;本轮提交`a96091ce`透传原值/显式null。现网5268条均有diameter键,3332条正源管径、18条双侧推算、1918条不补;唯一合法Point仍为窨井YL-YJ-003、pointType=null,另3条不可上图几何保持拦截。真实驾驶舱读到4480管体实例/19批、1919折线/符号,与源3332/推18/未补1918一致,均未覆盖源数据。 - 管径补全验证:新插值回归与t32/t24/t33既有回归通过;后端针对性21/21、Cockpit全量487/487通过;前端最终构建退出0(Vite55.65s)。复核先复现再修复闭合支路漏算分叉、异常JSON形成伪锚点;覆盖路径长度权重、独立反向、环、多顶点、行业隔离/邻近不吸附等。详情与证据见[管径实施记录](../verify/artifacts/t32/diameter-implementation.md)、[真实补全结果](../verify/artifacts/t32/diameter-live-result.json)、[驾驶舱计数截图](../verify/artifacts/t32/diameter-cockpit-status.png)。窄模拟视口计数证据不代替4K运动帧率。 - 完整实施与证据:[验收记录](../verify/artifacts/t32/implementation-and-acceptance.md);[隔离画面](../verify/artifacts/t32/isolated-types.png);复现工具见 tools/pipe-models/README.md。 - 尚未完成:4K可见窗口45°/10s镜头运动平均FPS≥30(真实降级与明确标识的GPU压力样例分开)、浏览器404素材缺失恢复符号、修复后的完整驾驶舱显隐与状态说明。 - 当前障碍:browser工具schema要求同时提供互斥的off/device/尺寸、session/requestId等字段;无法去掉移动模拟或清理会话,后续会话失去注册并达5个上限。snapshot/press/screenshot仅取得部分证据,没有绕过技能用外部进程控制。 - 自动续跑Round1:提交`5f091eb`,真实Cesium数学/事件加IO替身的adapter回归通过(404保留符号、地表失败原因、模板只取一次/跨批共享URL、metadata零重建、改径仅换一批、late error及destroy)。此为离线证据,不替代浏览器。 - 自动续跑Round2:工具重载后stop仍报session/requestId互斥;静态确认插件只将action设required,模型收到的工具契约却要求全部字段。已形成[可复现诊断](../verify/artifacts/t32/browser-tool-parameter-conflict.md),未修改插件/绕过浏览器技能;剩余4K/FPS及故障画面条件不变。 - 用户可见性反馈(2026-10-14):指定燃气红/供水蓝/污水绿/雨水青/窨井紫,允许比例放大、可读性优先;后端`1d1461a5`原样透传remark/显式null。现规则已改为network_level,旧空值默认0污水,1雨水。 - 真实接口复测:`/infrastructure/geometry`当前返回2729条排水管,但`networkLevel`和`network_level`键均为0;兼容默认后全部为污水绿。合成同一接口payload的`networkLevel:1`已验证为雨水青。说明前端规则已生效,当前运行后端实例尚未重启/部署`7150d431`;需重载后端后,待新数据写入等级1才会出现雨水青。 - 本轮可见性已实施(前端提交`e518ba0`):显示粗度8倍、限制1.5–3m,源/推算径和路径长度不变,虚拟埋深2m;UNLIT语义材质;地面全距导引,管线视图ready段600m外导引;网络等级变化会触发2D与3D重着色。 - 对抗式复核修掉:metadata更新替换PolylineGraphics后距离限制丢失;CSS sRGB直接写线性材质颜色漂白;同一GLSL修复由票36提交`850c6c6`。 - 实际证据:此前共用驾驶舱污水近景、燃气与窨井画面见[可见性记录](../verify/artifacts/t32/visibility-fix-and-evidence.md)。本轮没有新的正式浏览器截图,不将构建/浏览器/GPU验收报为通过。 - 最终验证:后端几何Service+Controller23/23、Cockpit全量489/489;前端领域、真实Cesium bundle适配器、模式切换、默认DN、补径、T24/T33相关回归通过。独立提交:前端`aa529db`、后端`7150d431`。 - 环境边界:共享node_modules缺`@cesium/engine`、`@babel/parser`、`cross-env`;官方Cesium CJS bundle可用于适配器回归,但Vue链路因parser缺失阻断,`yarn build`因cross-env缺失未启动。未安装依赖、未改锁文件、未修改旧DB。 - 性能尚未通过:4K正常桌面FPS≥30、browser404和四类完整画面仍未验收;票保持claimed/open,满足门槛前不关闭/不追加完成gist。详细见[修复记录](../verify/artifacts/t32/view-mode-network-level-fix.md)。 Labels: ready-for-agent ## Comments ### local — 2026-10-14T04:10:23.357Z > *This was generated by AI during triage.* **提醒一句(来自票 35 会话,2026-10-14):后端 `a96091ce` 仍未推送,且本分支基底已变** 本会话在做[票 35 后端修复](../../cockpit-real-data-wayfinding/issues/35-createdat.md)时动到了同一个后端仓库 `E:\pipe-ner-server`,只此一件事需要你们知道(**未代你们提交或推送任何东西**): **现状** | 项 | 值 | | --- | --- | | 后端 `local master` | **`a96091ce`**(= 你们那条「透传管径原值/显式 null」,见本票进度第 5 条) | | 后端 `origin/master` | **`05c23774`**(我的票 35 提交,落在远端**较新**基底 `5a821872` 上) | | 两者关系 | **已分叉**:`a96091ce` 与 `origin/master` 均非对方祖先,`local master` 落后远端 5 个提交 | **要点** 1. **什么都没丢**:`a96091ce` 仍是有效对象(`git cat-file -t` = commit);你们那 4 个几何源文件 + `.idea` 的**未提交在制品完好无损**(我按字节校验过,`git hash-object` 与暂存时逐一致)。 2. **但不要直接 `git push`**:现在从 `local master` 直推会被拒(non-fast-forward)。请先 `git fetch`,再以 `origin/master` 为基变基(或 `reset --hard origin/master` 后重新 cherry-pick `a96091ce`),**保留你们的在制品**再推。 3. **`a96091ce` 仍只存在于本机**:它不在任何远端分支上(与我会话开始时一致)——所以「远端缺管径透传」这件事仍未解决,随你们推送才会解决。 4. **期间我做的唯一分支操作**:为把票 35 推到远端,我 `rebase` 时它曾把 `a96091ce` 一并带上;我随即 `reset` 回 `origin/master` 只 cherry-pick 我自己的提交,再把分支 tip **复位成会话开始时的 `a96091ce`** —— 即 `local master` 与我会话开始时**完全一致**,未改动你们的分支语义。 **注意**:远端基底在我会话前就已前进(含「移动端-工单管理」等提交),所以分叉**不是我造成的**;我只是在远端新基底上多加了 1 个提交。你们推 `a96091ce` 时本来也需要先变基。 ### local — 2026-10-15T01:40:04.117Z 按用户“基本没有问题,可以收口”要求关闭本票。已完成:地面视图近景始终保留2D导引;管线视图ready模型近景导引按600m规则显示;network_level仅对DRAINAGE生效,0/旧空值为污水、1为雨水,非排水忽略;缺径显示默认DN160燃气/DN400供水/DN800排水,visual-default不改源径;异步模式切换、模型失败和元数据替换回归通过。前端提交aa529db,后端提交7150d431;Geometry 23/23、Cockpit 489/489通过。当前运行后端实例尚未部署networkLevel字段,真实旧接口2729条排水均无该键,重启/部署后新等级数据即可显示雨水;4K FPS/浏览器404完整门槛按真实边界保留记录。 ## Answer