45 lines
3.1 KiB
Markdown
45 lines
3.1 KiB
Markdown
# 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
|
||
|
||
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 枚举。
|