geopro/.superpowers/sdd/task-9c-report.md

3.1 KiB
Raw Permalink Blame History

Task 9c 报告POC-B 离屏 GPU 渲染基准

状态:DONE(闸门通过;真实基准实测完成;关键发现如实记录,无任何编造 fps

执行机Windows 11MSVCVS18 Community+ NinjaReleaseGPU = NVIDIA RTX 3060 Laptop GPUOpenGL 4.5.0 NVIDIA 555.97。 日期2026-06-23。


1. 交付物

  • tools/gpr_poc/main.cpp:新增两个子命令
    • gpr_poc offscreen-smoke —— 最小离屏渲染冒烟(闸门),打印 OK/FAIL + GL 能力。
    • gpr_poc renderB <storeDir> [--frames 120] —— 离屏体绘制 + 切片扫描 fps 基准。
  • tools/gpr_poc/CMakeLists.txt:补 VTK 组件RenderingVolume / RenderingVolumeOpenGL2 / ImagingCore / InteractionStyle
  • docs/superpowers/plans/poc-results-B.md新增「§4 离屏 GPU 渲染基准」段(闸门 + 真实指标 + 关键发现 + 结论)。
  • build/_t9c_build.bat:本任务用的 gpr_poc 单 target 构建脚本vcvars64 直驱 cmake

2. 闸门结果 —— OK

offscreen-smoke:离屏 vtkRenderWindowSetOffScreenRendering+SetShowWindow(false))→ cube actor → Render() → GetRGBACharPixelData 读回 65536 像素,非背景 28224。GL vendor=NVIDIA硬件加速 True。离屏 GL 可用,继续真实基准。

3. 真实 GPU 指标line 001, cellXY=0.05, cellZ=0.05

  • 体维度:44476 × 29 × 162;体素数 ≈2.09 亿;整卷字节 398.54 MBint16
  • 体绘制 fpsINVALID —— 整卷 X 维 44476 超 GL_MAX_3D_TEXTURE_SIZE=16384 vtkVolumeTextureInvalid texture dimensions [44476,29,162],未真正绘出体数据。 raw_fps=295.6 是空纹理假帧率,已显式标 INVALID不作为体绘制性能上报
  • 切片扫描 fps54.6 fps120 帧沿 Z 扫整卷vtkImageReslice 2D 切面 + 2D 纹理;不受 3D 纹理上限约束。≥30fps 目标达成。
  • 是否进显存:(瓶颈是单轴纹理维度上限 16384非显存字节整卷 398 MB << RTX 3060 6GB 显存)。
  • GPU 显存NVXN/A(随包 VTK 安装未带 GLEW 头,无法链 GL loader 直查GL 扩展列表确认机器支持 NVX_gpu_memory_info
  • 进程峰值内存:≈509 MB(加载整卷 398 MB + 渲染管线)。
  • build 峰值内存4830 MB装配阶段 double survey 主导,与 §2 一致);无 OOMcellXY=0.05 一次通过。

4. concerns

  1. 整卷朴素体绘制对长测线根本不可行X=44476 撞 OpenGL 单轴 3D 纹理上限 16384。 与显存容量无关,是硬限制。任何「整卷一次性 3D 纹理」方案对长测线都会撞墙。 这是 Task 12核外 / 分块 LOD / 体纹理分区 vtkOpenGLGPUVolumeRayCastMapper::SetPartitions 的硬性依据。本任务按约束未做核外,仅如实记录。
  2. SmartVolumeMapper 报 GPURenderMode=2 但纹理上传失败——GetLastUsedRenderMode() 不能单独作为 「真的渲染出来了」的判据renderB 已加 OutputWindow 捕获 + 维度超限双判据才下 INVALID 结论。
  3. GPU 显存读数缺失N/A仅因 VTK 安装未带 GLEW 头;若需要可后续单独链 GL loader 调 NVX 枚举。