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

45 lines
3.1 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.

# 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 MB**int16
- **体绘制 fpsINVALID** —— 整卷 X 维 44476 超 `GL_MAX_3D_TEXTURE_SIZE=16384`
`vtkVolumeTexture``Invalid texture dimensions [44476,29,162]`,未真正绘出体数据。
raw_fps=295.6 是空纹理假帧率,已显式标 INVALID**不作为体绘制性能上报**。
- **切片扫描 fps54.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 一致 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 枚举