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

116 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 三维雷达 导入→处理→渲染 全链路方案(结合 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/.data`、`RadarVolumeAssembler`、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 雷达路径迁到 `IVolumeRenderSource`LOD 源接进 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` 打开 store`update(相机)`→选层+选块→`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 兜底。
- 滚轮步长:按**沿法向体素间距 × N**Shift 粗调),不随体长跳变。
- 双击正视:缩放到切片(按面内尺寸+视角框住),不再"又小又远"。
- 不透明度:各向异性体用特征尺度(门控;近立方反演维持原对角线)。
- **B 方案视角导航**#1 绕拾取点旋转(无选中时绕光标射线穿体中段点,不甩飞);
#2 沿线位置滑块(雷达专属,沿最长轴 dolly 到窗口;仅细长体显示)。
- 雷达显示**增益模式**右键切换AGC/保幅 tpow/关),纯显示重建、不动原始数据。
> 这些是**单内存体 + 渲染期采样距自适应**底座;多分辨率/视锥 LOD 仍属 §4/§9 的 Track D 接入范畴(未做)。