Type: task Status: claimed Labels: ready-for-agent, wayfinder:task
继续重做被维护者两次否决的房屋模型。2026-09-24 明确反馈:地形穿透仍在;需按顶视卫星图逐栋建模,非特写近景也要有房屋样貌;允许调用本地 Blender / 3ds Max,同类模型复用。沿用本会话认领,不另开重复票。
当前实现是 地形遮挡修复 + Blender 房屋库 + 影像足印示范街区。不是完整县城交付,也没有获得维护者视觉验收。
旧版 90% 结论撤回。穿透问题已完成真实渲染回归;Blender资产库、城市覆盖底册、规则小区高置信度样片以及三套空间LOD树已完成。2026-09-29 按维护者三条反馈重做旧城生成:旧城不再沿道路造房(道路改为纯排除几何),改为只接受 OSM 建筑面与 z19 卫星屋顶分割足印;所有模型强制落在主场景区内(新增 primary-area.mjs 统一裁剪/包含契约 + 6 项测试);样式由 8 种已认可变体按来源建筑确定性分配,不再是整城统一橙色尖顶。当前经 verify-city-models.mjs 验收:主场景区外 0、交通道路上 0、居民地掩膜外 0。
2026-09-30 找到权威建筑来源,影像分割方案已被取代。 按维护者要求先取 GIS 建筑数据:本地此前只用过 OSM 的 169 个建筑面,但 D:\GIS\ArcGIS\yuanling\ 下有两份 1:500 测绘 CAD 图(沅陵20240110.dwg、沅陵20240510.dwg),其 JMD(居民地)图层含 60,771 个房屋面,另有 泵站厂房/BYQ/KZD/WSL/YSL 等专业图层。用本机 ArcGIS Desktop 10.8 的 arcpy 转成 GIS 后实测:主场景区内 60,744 个房屋轮廓,41,101 个规整四角矩形、19,643 个 L 形/天井等复杂外轮廓;1:1 z19 影像对照显示轮廓精确贴合屋顶(含街面进深、天井、组合体量),精度显著优于卫星分割(后者只能给旋转矩形)。面积中位 17.1 m²、p75 68.5 m²、p95 210.4 m²;37,151 个落在既有居民地掩膜内,其余 23,593 个为掩膜外村庄/散建。数据缺失:注记 54,663 条里只有 10 条带结构类型,层高需另行估计。
2026-09-30 BIM 管线已建立并跑通(维护者确认"先尝试制作")。 链路:prepare-cad-bim.mjs(足印→ENU、城区/乡村分级、按面积估层数)→ sample-terrain-offline.mjs(原始量化网格 DEM 采样)→ seat-cad-bim.mjs(平地/台基落地 + 轮廓有效性校验)→ assemble-cad-bim.py(Blender 导出空间 LOD 树)→ verify-lod-district.mjs。
分型策略:足印矩形度 ≥0.85 且尺寸落在 asset-fit.json 窗口内的用已认可精细资产(带窗、阳台、屋面),其余按真实测绘轮廓挤出体量棱柱——不再把 L 形/天井强行套成矩形,这正是此前"误差很大"的主因。层数按足印面积估(测绘注记不含可用层数)。
计划量与座落:足印 60,744 → 建模 54,455(精细资产 13,554 / 体量 40,901;城区 33,054 / 乡村 21,401;6,289 个 <4 m² 噪点跳过)→ DEM 座落后 48,425 栋(平地 46,934 / 台基 1,491;36 个自相交/塌缩轮廓、5,772 栋因高差超出合规台基而排除并记录原因)。
首批 CIM 交付(本轮完成):全量 48,425 栋单次导出体量过大(LOD0 逾 880MB 时被取消、无完整 manifest,未作为交付),改为按分级先交付城区 BIM 首批:make-cad-bim-pilot.mjs 按居民地掩膜分层抽样(66 掩膜 1,800 / 65 掩膜 700 / 130 掩膜 300 / 126 掩膜 200,确定性哈希排序),共 3,000 栋,经 assemble-cad-bim.py --grid 16 --coarse-grid 4 导出为 city/cad-bim/lod-pilot:2,942 栋、68 细分片、9 粗父节点,LOD1 24.0MB/3,480,996 三角、LOD0 77.3MB/5,111,164 三角(58 栋为资产库无法承载而排除并记录)。verify-lod-district.mjs → passed: true。体量棱柱按真实轮廓挤出,L 形/天井/街面进深保留;精细资产用于矩形度高的房屋。
修掉的导出器缺陷(子代理首版遗留、由本人定位并修复):① 棱柱墙面四边形被加入两遍且第二遍反向绕序,每条墙边关联 4 个面、网格非流形,recalc_face_normals 无法定向,细长轮廓体积自检误判"内外翻转"——去掉重复面后恢复;② 体积自检与棱柱顶点原先用绝对 ENU 坐标(离原点约 2 km,mathutils 单精度),改为按 positionENU 构建局部坐标并加对象位移,自检数值稳定且导出节点位移与计划一致;③ 体量建筑原先额外生成"外接矩形埋地基础",与棱柱侧面共面闪烁、并在 L 形/细长轮廓上伸出建筑之外——体量棱柱已下探到 foundationBottom,故只对精细资产保留独立基础;④ 材质索引按三角面数而非面数填写,已改为"n 个墙面 + 两个顶底盖"。
仍未完成:其余 45,483 栋的分批导出(城区已含于首批的除外)、层高估计校准、三树 + CAD BIM 的运行态性能与下载量实测、维护者视觉验收。
createViewer() 未开启 globe.depthTestAgainstTerrain。在不透明球面/本地 DEM 下完全埋入的红色 GLB 仍显示 2916 像素;仅开启该项后为 0。已在 Viewer 创建和视图图层切换时保持开启;地下管线透视仍由显式 globe.translucency 控制。doubleSided 和法线自洽检查不能证明屋顶闭合。goHome(options) 的参数传入,实际没有改变预设距离;旧截图文件名中的“2400m/1200m”等不能作为视距证据。cesiumEngine.js 默认与图层切换保持 depthTestAgainstTerrain=true。tools/city-massing/verify-occlusion.mjs 在实际本地 DEM 场景验证默认地面0红像素、关闭深度2916、深度开启0、管线半透明2916、回地面0。负对照能复现原问题。regular-estate 有 5 处影像描绘屋顶与 OSM 巷道互相矛盾待人工判定。tools/city-massing/primary-area.mjs 作为唯一裁剪/包含契约(clipFeatureToBounds 对道路用 bboxClip、对建筑面用 intersect),city-atlas.mjs 与生成器都改用它;primary-area.test.mjs 6/6 通过;verify-city-models.mjs 对三套导出树实测主场景区外 0、交通道路上 0、居民地掩膜外 0。regular-estate 的 5 处影像描绘屋顶与 OSM residential 巷道重叠(15%–55%)作为 sourceConflicts 如实记录,未擅自删楼或改路。district/lod-preview(37单元,LOD1 7.04MB/790,296三角,LOD0 10.04MB/1,094,016三角)、city/regular-estate/lod-preview(15单元,LOD1 5.35MB/314,640三角,LOD0 8.12MB/449,424三角)、city/oldtown/lod-preview(4,601模块、319细分片、39粗父节点,LOD1 124.5MB/30,913,288三角,LOD0 662.6MB/43,942,492三角)。三棵树均通过 verify-lod-district.mjs 静态回验;oldtown 体量已大幅上升,运行时性能尚未复测,不能据此声称通过。map.tilesets[].lighting:true 归一化后,Cesium按tileset地理包围球配置稳定局部DirectionalLight与IBL;默认配置仍关闭模型,不改变无模型部署。tileFailed同步捕获内容阶段错误。.scratch/cockpit-shell-panel-layout/verify/artifacts/t35/runtime-lod/report.json(该文件描述的是改造前的旧树,已过期)。tools/city-massing/convert-dwg-to-gis.py:用 ArcGIS Desktop 10.8 的 arcpy 把测绘 DWG 转成文件地理数据库并盘点图层(CAD 无坐标系,按 CGCS2000 3 度带 GK CM 111E / EPSG:4546 定义;CADToGeodatabase 必须给参考比例,本图取 1:500)。tools/city-massing/export-cad-layers.py:按 CAD 图层名取出要素、定义坐标系、投影到 WGS84 输出 SHP;跳过 MultiPatch(三维重复几何)与 Annotation(文字框)。tools/city-massing/cad-shp-to-geojson.py:把 SHP 转成只含主场景区的 GeoJSON,并统计面积分布。city/cad-buildings.geojson(60,744 个房屋轮廓,SHA256 4266B3EC…)、city/cad-building-labels.geojson(54,663 条注记)、city/cad-extract-report.json。tools/city-massing/verify-cad-buildings.mjs → city/cad-buildings-z19-core.png(1:1 影像 + 轮廓描边,本人已读图确认贴合)、city/cad-buildings-overlay.png、city/cad-buildings-core.png。复现命令(路径含中文,故先复制到 ASCII 临时目录):
$tmp="$env:TEMP\city-dwg"; New-Item -ItemType Directory -Force -Path $tmp | Out-Null
Copy-Item 'D:\GIS\ArcGIS\yuanling\沅陵20240510.dwg' "$tmp\yuanling-20240510.dwg" -Force
& 'C:\Python27\ArcGIS10.8\python.exe' tools/city-massing/convert-dwg-to-gis.py "$tmp\yuanling-20240510.dwg" "$tmp\cad-20240510.gdb" 500
& 'C:\Python27\ArcGIS10.8\python.exe' tools/city-massing/export-cad-layers.py "$tmp\cad-20240510.gdb" "$tmp\shp" JMD
& 'C:\Python27\ArcGIS10.8\python.exe' tools/city-massing/cad-shp-to-geojson.py "$tmp\shp" tools/city-massing/city "110.328749941417,28.3917230659234,110.465779226663,28.4913038992907"
node tools/city-massing/verify-cad-buildings.mjs
注:city/cad-building-outlines.geojson(43MB,JMD 线要素)与多边形重复,为控制仓库体积已删除,需要时按上面命令重新导出。
tools/city-massing/house-library/house-library.blend、library.json、独立 GLB 和 preview.png:房屋资产库(8 个变体,已被维护者认为单栋质量基本够用)。tools/city-massing/asset-fit.json:足印模块 ↔ 资产变体的唯一缩放窗口契约,生成器与 Blender 导出器共用,防止两段各自放宽标准。tools/city-massing/primary-area.mjs + primary-area.test.mjs:主场景区裁剪与包含的单一契约(6 项测试)。tools/city-massing/segment-imagery-footprints.mjs + city/imagery-footprints.geojson + imagery-footprints-report.json:z19 卫星屋顶分割(6,000 足印,阈值与逐掩膜可靠性写在报告里)。tools/city-massing/verify-imagery-footprints.mjs + city/imagery-footprints-verify.png:1:1 卫星底图对照图,用于人工判读足印是否真的压在屋顶上。tools/city-massing/generate-oldtown-fill.mjs:来源足印 → 模块计划(含 sources 与逐条 excluded 原因)。tools/city-massing/seat-oldtown.mjs:平地/台基/台阶三档落地,terraced 记录台阶切分。tools/city-massing/verify-city-models.mjs + city/city-model-verification.json:主场景区/交通道路/掩膜/来源验收,并把无法自动判定的来源冲突单列。tools/city-massing/draw-model-coverage.mjs + city/city-model-coverage.png / city-model-coverage-core.png:生成足印叠在卫星底图上的覆盖对照。tools/city-massing/district/generated/coverage.json、geometry-verification.json:示范街区的来源覆盖与 GLB 坐标检验。本地工具:Blender 5.2.2 LTS 位于 D:/Steam/steamapps/common/Blender/blender.exe,批处理制作与导出成功。3ds Max 2024 批处理探针未进入脚本就绪状态,本次已停止,未声称用 Max 制作成功。
独立审查页:http://127.0.0.1:8092/preview.html(serve-review.mjs,只监听本机并复用8001的引擎/GIS)。不写入生产产物。旧 map.tilesets 已置空;新街区只通过审查入口展示,未擅自正式启用。
primary-area.test.mjs 6/6、oldtown-geometry.test.mjs 5/5、verify-lod-district.mjs 三棵树全通过、verify-city-models.mjs passed:true(主场景区外 0 / 交通道路上 0 / 掩膜外 0,5 处来源冲突如实列出)。city/imagery-footprints-verify.png(1:1 卫星底图 + 足印描边)与 city/city-model-coverage-core.png(生成足印压在城市核心卫星图上)已由本人读图判读:足印落在屋顶、街区内、河岸与山体保持空白。http://127.0.0.1:8092/preview.html 仍在,但它依赖 8001 的 dev 服务取 Cesium;本轮 8001 未在运行,因此没有重新取得运行态截图或帧率。项目规则禁止擅自启动 dev/调试服务,故运行态验收留待维护者开启服务后进行。房屋外观比旧版实质改善,样式也不再单一,但不能把有窗的详细单元等同逐栋真实建筑复原。楼层与立面是估计;DEM 自身精度、屋顶视差和历史影像错配依然存在。影像分割足印是最小外接矩形,贴邻无阴影分隔的两栋会并成一栋、暗屋顶会漏、L 形与天井不表达,位置不确定度约 0.3–0.6 m。掩膜 63/130 的影像足印已被判为不可信并排除,但这属于人工读图判读,不是自动质量指标。允许保留数值证据,不允许据此重新声称“全城达标”。
regular-estate 的 5 处来源冲突(影像描绘屋顶 vs OSM residential 巷道),决定改路还是改描绘。