81 lines
5.1 KiB
Markdown
81 lines
5.1 KiB
Markdown
# Task 12c 报告:LOD-fps 探针(全量交互渲染最后一根链子)
|
||
|
||
## 状态
|
||
|
||
**完成 / PASS** —— 四件事(a/b/c/d)全做,双闸通过(无纹理维度错误 + 三段均回读非空像素),
|
||
真实实测,未编造。LOD-based C 路线在本机判据下钉死可行。
|
||
|
||
## 实测数字(本机 RTX 3060 Laptop GPU,离屏,frames=120,多次重跑稳定)
|
||
|
||
| 项 | 维度 | 结果 | 交互级判据 |
|
||
|---|---|---|---|
|
||
| (a) 粗层概览 fps | level2 整卷 11119×8×41 (~3.6M 体素) | **~752 fps**(多跑 590~759) | ✔ 远超 ≥30 |
|
||
| (b) 全分辨率局部 fps | level0 局部 256×29×162 (~120 万体素,4 brick 列) | **~380 fps**(多跑 374~422) | ✔ 远超 ≥30 |
|
||
| (c) LOD 切换过渡 | 切换帧 60/120,从远观(level2)dolly 拉近到近观局部(level0) | 平均 **1.09ms/帧**,切换帧 **~5.5ms**(尖峰 ~6×邻帧),最大 ~6.95ms | 无可感知卡顿 ✔ |
|
||
|
||
- **粗层概览 fps**:~752 fps(达交互级 ✔)
|
||
- **全分辨率局部 fps**:~380 fps(达交互级 ✔)
|
||
- **LOD 切换过渡帧耗时 / 是否卡顿**:切换帧 ~5.5ms(仍 <1 个 60Hz 帧 16.7ms)→ **无可感知卡顿**
|
||
- **截图路径**:`docs/superpowers/plans/poc-lod-shots/`
|
||
- `lod-overview.png`(level2 整线概览,全 2200m 线呈细带)
|
||
- `lod-fullres-local.png`(level0 局部,全分辨率板面有细节)
|
||
- `lod-transition-mid.png`(切换后推近的过渡中间帧)
|
||
- **是否都达交互级**:**是**。(a)/(b) 均 >>30fps;(c) 切换无可感知卡顿。
|
||
|
||
## 设计与诚实测法
|
||
|
||
- 在真实金字塔 store(`gpr_poc build ... --levels 3`,level0=44476×29×162,
|
||
level1=22238×15×81,level2=11119×8×41,level3=5560×4×21)上跑,非合成。
|
||
- (a)/(b):把对应 level 的所有 brick 重组成单张 VTK_SHORT vtkImageData
|
||
(逻辑同 `WholeVolumeSource`,按 level 维度 + spacing×2^level / 局部段 X 偏移),
|
||
喂 `buildVoxelI16FromImage`(SmartVolumeMapper,GPU 路径),旋相机 120 帧测 fps。
|
||
level2/局部段单轴均 <16384 → 单 3D 纹理可成,无纹理墙。
|
||
- (c):同一窗口,相机从远观(level2 整卷)dolly 拉近;第 60 帧跨越 LOD 切换那一下
|
||
把体从 level2 概览换成 level0 局部 + 焦点移到局部段中心,**逐帧记帧耗时**,
|
||
标切换帧尖峰。这是审核人加的验收点①(测切换动态,非两端静态)。
|
||
- (d):`vtkWindowToImageFilter`+`vtkPNGWriter` 存 3 张 PNG,供人眼判
|
||
“概览糊→拉近清晰”(审核人验收点②)。
|
||
- **双闸(同 9c,绝不把空纹理假帧率当性能)**:
|
||
① `CapturingOutputWindow` 捕获 3D 纹理维度错误(实测=否);
|
||
② 真实回读前缓冲像素,统计非背景像素(概览 1889 / 局部 167612 / 过渡 21924,
|
||
三段均非空)。两闸全过,fps 可信。
|
||
|
||
## 卡顿判据说明(避免误报)
|
||
|
||
切换帧含一次性建 actor / 换 mapper 输入,~5.5ms,是邻帧(~0.9ms)的 ~6×;但绝对值
|
||
仍 < 1 个 60Hz 帧(16.7ms),人眼不可感。故采用**绝对耗时判据**:切换帧 >33ms(2 帧)
|
||
才记“可感知卡顿”,16.7~33ms 记“轻微抖动”,亚毫秒基线下尖峰倍数虽大但绝对值低不算
|
||
卡顿。本机切换帧 ~5.5ms → 无可感知卡顿。
|
||
|
||
## 判据结论
|
||
|
||
粗层概览 + 全分辨率局部**都达交互级**(≥30fps,远超)且切换**无不可接受卡顿**
|
||
→ 命中 brief 第一条判据:**LOD-based C 路线钉死可行**。
|
||
|
||
对照 12b:整卷全分辨率 ray cast(2.08 亿体素)~10fps 是硬上限;本探针证实
|
||
“渲更少体素 = LOD” 这根杠杆有效——粗层 ~752fps、全分辨率局部 ~380fps,两端都远
|
||
在交互级,且 LOD 切换瞬态 ~5.5ms 无卡顿。
|
||
|
||
## 最低配未验声明(审核人验收点③)
|
||
|
||
本探针**仅在本机(RTX 3060 Laptop GPU,NVIDIA 555.97,OpenGL 4.5)跑得上限数字**。
|
||
**最低配机器未验证**,需用户在目标机跑 `gpr_poc renderLOD <store>` 或提供型号后再评估。
|
||
本机数字是上限,最低配可能更低。
|
||
|
||
## 进程峰值内存
|
||
|
||
~99 MB(探针逐 level 重组单张 image,未常驻整卷;level0 局部仅取 4 brick 列)。
|
||
|
||
## Concerns
|
||
|
||
1. **截图视觉偏暗/偏细**:体绘制 `kMaxOpacity=0.15`(复用探针传函)+ 整线物理纵横比
|
||
极扁(2200m × ~1.5m × 8m),故概览图中整线呈一条细带、过渡中间帧呈小斜板。
|
||
这是物理真实呈现(整线本就是长薄带),非渲染缺陷;但作为“人眼判可接受度”素材
|
||
偏素净。若需更醒目的生产视觉,需后续调传函不透明度/着色与取景,超出探针范畴(YAGNI)。
|
||
2. **(c) 为单次脚本化切换**:测的是“从 level2 直切 level0 局部”一次硬切的瞬态;
|
||
生产里多级连续 LOD/视野自适应的换页节奏、预取与 morphing/淡入是探针过了之后的
|
||
工程(brief 明确不在本探针范围)。
|
||
3. **(b) 局部仅取 4 brick 列(256 体素宽)**:证“全分辨率局部块快”;若生产需更宽的
|
||
全分辨率窗口(仍需 <16384 或分区/分块),fps 会随体素数下降,需届时按窗口大小复测。
|
||
4. **最低配仍是最大未知**(见上声明)。
|