feat/3d-radar-volume-ingest #9

Merged
gaozheng merged 17 commits from feat/3d-radar-volume-ingest into main 2026-06-30 19:14:55 +08:00
1 changed files with 12 additions and 5 deletions
Showing only changes of commit b2d130a7bf - Show all commits

View File

@ -77,6 +77,13 @@ vtkSmartPointer<vtkVolume> assembleVolume(vtkImageData* img,
(bnd[3] - bnd[2]) * (bnd[3] - bnd[2]) +
(bnd[5] - bnd[4]) * (bnd[5] - bnd[4])); // 包围盒对角(最长穿越路径)
// 大体(如雷达24M 体素、深度采样距 mm 级 → 单条光线上千采样步)开启【交互期】采样距自适应:
// 旋转时 VTK 自动加大采样步(变粗)保流畅,停手即恢复设定的细采样距(0.3×minSp)出全质量帧。
// 只是渲染期降采样、【绝不动数据】;切片/异常取自全分辨率体,保真不受影响。
// 小体(反演,实测~7ms/帧)保持全程全质量,避免"停手补高清"的视觉突跳。
constexpr vtkIdType kInteractiveLodVoxels = 4'000'000;
const int interactiveAdjust = (img->GetNumberOfPoints() > kInteractiveLodVoxels) ? 1 : 0;
vtkSmartPointer<vtkVolumeMapper> mapper;
if (mask && g_gpuVolumeSupported) {
// 真白化mask=0 体素被光线投射完全跳过,杜绝空值格沿边界渗蓝。需 GPU 光线投射支持。
@ -84,8 +91,8 @@ vtkSmartPointer<vtkVolume> assembleVolume(vtkImageData* img,
gpu->SetInputData(img);
gpu->SetMaskInput(mask);
gpu->SetMaskTypeToBinary();
gpu->SetAutoAdjustSampleDistances(0); // 全程全质量GPU 直接 mapper 无交互降采样开关)
// 关了自适应必须显式给【细】采样距离,否则用粗默认值 → 看到一层层体素(分层伪影)。
gpu->SetAutoAdjustSampleDistances(interactiveAdjust); // 大体:交互降采样保流畅,停手全质量;小体:全程全质量
// 静止帧用【细】采样距离(0.3×minSp)否则用粗默认值 → 看到一层层体素(分层伪影)。
if (minSp > 0) gpu->SetSampleDistance(static_cast<float>(0.3 * minSp));
// 抖动:用噪声纹理微扰每条光线的采样起点,消除规则采样面造成的「木纹/分层」伪影VTK 官方此用途)。
gpu->SetUseJittering(1);
@ -94,9 +101,9 @@ vtkSmartPointer<vtkVolume> assembleVolume(vtkImageData* img,
// SmartVolumeMapper有 GPU 走 GPU ray cast否则自动回退 CPU避免无 GPU 时卡死/失败。
vtkNew<vtkSmartVolumeMapper> sm;
sm->SetInputData(img);
// 全程统一全质量(GPU 足够快, 实测 ~7ms/帧):关掉交互降采样, 避免"停手补高清"那一帧突跳停顿
sm->SetAutoAdjustSampleDistances(0);
sm->SetInteractiveAdjustSampleDistances(0);
// 大体交互降采样保流畅(停手恢复全质量);小体全程全质量(GPU 足够快, 实测 ~7ms/帧)避免突跳。
sm->SetAutoAdjustSampleDistances(interactiveAdjust);
sm->SetInteractiveAdjustSampleDistances(interactiveAdjust);
mapper = sm;
}