geopro/docs/superpowers/specs/2026-06-30-radar-import-pro...

8.4 KiB
Raw Blame History

三维雷达 导入→处理→渲染 全链路方案(结合 POC 评估)

2026-06-30。本文把用户给出的雷达产品目标落成方案并结合 POC明星路 13G已验证的资产 评估复用/缺口、定关键架构缝与决策、排风险与分期。范围限定三维雷达(渲染/切片/异常 + 其上游的导入/处理管线);不含 2D 雷达图、不含后端反演链。

1. 用户目标(七步)

  1. 设备经 USB 接到用户电脑。
  2. 客户端「设备连接」功能:自动识别设备、打开 USB 存储,用户选文件导入。
  3. 另一导入分支:文件已在用户电脑,经文件夹选择导入。
  4. 导入过程按文件类型(不同型号雷达)自动加载插件,对数据做 ds 标准化转换
  5. 导入完成自动形成 项目 / GS / TM / ds 结构(建 GS/TM 的「方案」待细化)。
  6. 数据集详情页:用数据处理插件处理原始数据,插件支持多种方法(用户勾选); 另固定加入两个客户端内置处理方法插值预渲染(即为 LOD 做准备)。 处理后存为新 ds
  7. VTK 视图:选三维雷达 ds 渲染、切片等;所选 ds 可能是未处理原数据,也可能是处理后数据(不同 ds

2. 关键决策(用户已拍板)

  • D1 — 预渲染LOD 烘焙)是可选的。 默认勾选,但用户可取消。 → 渲染路径必须同时支持「未预渲染」与「已预渲染」两类 ds(不能假设所有大体都已烘焙 LOD。 → 采用混合渲染源(见 §4原/插值 ds 走整卷源;预渲染 ds 走 LOD 源。

3. POC ↔ 目标 映射(复用 vs 缺口)

**结论算法基本齐POC/app 已有标准化、插值、增益、LOD 引擎、渲染源抽象);缺的是三层"框架/管线"

  • 设备接入。**
步骤 已有POC/现状) 缺口
12 设备 USB/存储 全新Windows 设备识别 + USB 盘浏览(与 POC 无关,纯平台 plumbing
3 文件夹导入 已有导入入口、tools/radar_convert malamira 转换器 文件夹选择 + 批量
4 按型号插件标准化 转换算法有malamira→规范化 .head/.dataRadarVolumeAssembler、int16 量化) 导入插件框架(按文件类型注册 reader现写死一种
5 项目/GS/TM/ds 结构 ds 树(sourceShowParentId 派生嵌套)已在 自动建 GS/TM 的「方案」
6 处理插件 + 两内置 两内置算法都有:插值=createRadarVolumeGrid 通道插值(targetDy);预渲染=ChunkedVolumeStore::write+buildPyramidStreaming。增益(dewow/AGC/tpow)亦有 处理插件框架 + 「处理→存为新 ds」管线 + 多方法勾选 UI
7 选 ds 渲染/切片 渲染源抽象 IVolumeRenderSource(整卷/LOD 多态,含 sliceSource() + 整卷渲染 + 切片 + 异常 把 app 雷达路径迁到 IVolumeRenderSourceLOD 源接进 appTrack D

4. 架构缝:IVolumeRenderSource(已设计好,最低风险)

POC 已建好渲染源抽象(src/render/source/IVolumeRenderSource.hpp):上层(控制器/SliceTool)只认此接口, 运行时在两种实现间切换:

  • WholeVolumeSource(整卷) —— 给未预渲染的原/插值 ds小体单纹理够用
  • ViewAdaptiveVolumeSource(核外金字塔 LOD —— 给已预渲染的 ds大体按相机选层/选块重组单纹理)。

接口自带 update(vtkCamera)currentImages()sliceSource()(切片/异常的 reslice 基底也走它), 故"切片在两种源上都能切"是接口内建能力,不需两套切片代码。

D1 落到这里:选 ds 渲染时按"该 ds 是否带 LOD store"路由到对应源。未预渲染 → 整卷源(现有内存 体路径迁入即可);已预渲染 → LOD 源Track D 接入)。

5. 处理与数据血缘模型

  • 处理一律产出新 ds,挂在源 ds 下(复用现有派生树 sourceShowParentId
    原始 ds ─[插值]→ 插值 ds ─[预渲染]→ 预渲染 ds(LOD store)
          └─[增益/migration/…(可多选)]→ 处理 ds
    
  • 两个内置处理方法client 自带、固定加入):
    • 插值:线内通道插值(读真实道偏移、目标横向间距如 2.5cm绝不跨线)。算法=createRadarVolumeGrid 的 targetDy 路径。
    • 预渲染LOD 烘焙):把体烘成 ChunkedVolumeStore 分块金字塔int16 量化、64³ brick、qCompress、 逐级 2× 降采样、每块 min/max流式 buildPyramidStreaming 不持整卷)。产出 = 一个 store 目录 不是普通稠密体 → 该 ds 须带「类型=LOD store + 路径」标记,供 §4 渲染路由。
  • 顺序:通常先插值再预渲染(烘焙插值后的体);模型支持任选基底(也可直接烘原始)。

6. 预渲染专用落盘格式LOD 前置,已实现于 POC

ChunkedVolumeStore(一个目录,非单文件):

  • meta.json:几何 + 量化(scale/offset) + 逐块索引(offset/压缩长/每块 min/max)
  • data.bin:逐块 int16 → qCompress块内 i 最快、k 最慢;偏移全 64 位(卷 >2GB
  • data_L1.bin…:金字塔各级(逐级 2× 降采样)。

构建:整卷 write 或流式 StreamingVolumeWriter(逐块写不持整卷)+ buildPyramid(Streaming)。 渲染:ViewAdaptiveVolumeSource 打开 storeupdate(相机)→选层+选块→readBrick→重组单 vtkImageData 内存恒定、绕 16384 纹理墙

7. 需要新建的三块骨架

  1. 插件框架(两类,别混)
    • 导入插件步4按文件类型/型号 → 标准化成 ds 的 reader 注册表。
    • 处理插件步6吃一个 ds → 产出新 ds 的 transform可多选串联两内置插值、预渲染即自带处理插件。
    • 待定:插件接口(输入 ds/参数 → 输出 ds、发现/注册、进程内 DLLABI/崩溃隔离风险vs 子进程。
  2. 「处理 → 新 ds」管线:血缘落树、预渲染 ds 的 store 路径/缓存/失效/磁盘占用、重处理异步+进度+可取消
  3. 设备/USB 接入步12Windows 设备识别 + USB 盘浏览。最独立、与 POC 无关,可最后做;先跑通文件夹导入。

8. 风险排序

  1. 插件框架架构骨架影响步4/6定义不好后面返工
  2. :预渲染 ds 的渲染/切片路由Track D 核心;但引擎+缝已验证,是"接线"风险非"能不能做"风险)。
  3. 低–中:处理管线异步/进度/缓存(工程量明确)。
  4. :设备 USBplumbing独立

9. 分期建议

  • P0 验证最高技术风险:把 app 雷达渲染迁到 IVolumeRenderSource,使
    • 未预渲染 ds → WholeVolumeSource(迁现有内存体路径);
    • 预渲染 ds → ViewAdaptiveVolumeSource 南同大道先烘一个小 store 验"选 ds→按是否预渲染路由→渲染+切片"全链路。验通则整个方案立住。
  • P1 插件框架:先定处理插件接口(含两内置),跑通"原 ds→插值→预渲染→渲染";导入插件框架并行。
  • P2 处理管线 UI/异步:详情页多方法勾选、进度、新 ds 落树。
  • P3 设备 USB:最后接。

10. 现状基线(本轮已落地的交互/渲染精修,作为接入前的稳定底座)

  • 切片拾取精确化:光标射线 vs 切片真实矩形求交 + 可见数据(alpha)双判定,去除外扩(雷达+反演通用)。
  • 取消选中:点击体/空白/帘面即取消(精确"命中切片"判据)+ Esc 兜底。
  • 滚轮步长:按沿法向体素间距 × NShift 粗调),不随体长跳变。
  • 双击正视:缩放到切片(按面内尺寸+视角框住),不再"又小又远"。
  • 不透明度:各向异性体用特征尺度(门控;近立方反演维持原对角线)。
  • B 方案视角导航#1 绕拾取点旋转(无选中时绕光标射线穿体中段点,不甩飞); #2 沿线位置滑块(雷达专属,沿最长轴 dolly 到窗口;仅细长体显示)。
  • 雷达显示增益模式右键切换AGC/保幅 tpow/关),纯显示重建、不动原始数据。

这些是单内存体 + 渲染期采样距自适应底座;多分辨率/视锥 LOD 仍属 §4/§9 的 Track D 接入范畴(未做)。