3.1 KiB
3.1 KiB
Task 9c 报告:POC-B 离屏 GPU 渲染基准
状态:DONE(闸门通过;真实基准实测完成;关键发现如实记录,无任何编造 fps)
执行机:Windows 11,MSVC(VS18 Community)+ Ninja,Release;GPU = NVIDIA RTX 3060 Laptop GPU,OpenGL 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:离屏 vtkRenderWindow(SetOffScreenRendering+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 MB(int16)。
- 体绘制 fps:INVALID —— 整卷 X 维 44476 超
GL_MAX_3D_TEXTURE_SIZE=16384,vtkVolumeTexture报Invalid texture dimensions [44476,29,162],未真正绘出体数据。 raw_fps=295.6 是空纹理假帧率,已显式标 INVALID,不作为体绘制性能上报。 - 切片扫描 fps:54.6 fps(120 帧沿 Z 扫整卷,vtkImageReslice 2D 切面 + 2D 纹理;不受 3D 纹理上限约束)。≥30fps 目标达成。
- 是否进显存:否(瓶颈是单轴纹理维度上限 16384,非显存字节;整卷 398 MB << RTX 3060 6GB 显存)。
- GPU 显存(NVX):N/A(随包 VTK 安装未带 GLEW 头,无法链 GL loader 直查;GL 扩展列表确认机器支持 NVX_gpu_memory_info)。
- 进程峰值内存:≈509 MB(加载整卷 398 MB + 渲染管线)。
- build 峰值内存:4830 MB(装配阶段 double survey 主导,与 §2 一致);无 OOM,cellXY=0.05 一次通过。
4. concerns
- 整卷朴素体绘制对长测线根本不可行:X=44476 撞 OpenGL 单轴 3D 纹理上限 16384。
与显存容量无关,是硬限制。任何「整卷一次性 3D 纹理」方案对长测线都会撞墙。
这是 Task 12(核外 / 分块 LOD / 体纹理分区
vtkOpenGLGPUVolumeRayCastMapper::SetPartitions) 的硬性依据。本任务按约束未做核外,仅如实记录。 - SmartVolumeMapper 报 GPURenderMode=2 但纹理上传失败——
GetLastUsedRenderMode()不能单独作为 「真的渲染出来了」的判据;renderB 已加 OutputWindow 捕获 + 维度超限双判据才下 INVALID 结论。 - GPU 显存读数缺失(N/A):仅因 VTK 安装未带 GLEW 头;若需要可后续单独链 GL loader 调 NVX 枚举。