3.8 KiB
Task 12d-polish 报告:梯度不透明度 + 光照 打磨探针
状态
完成。真实离屏渲染、真实 fps,无编造。三张对比图均通过双闸(无 3D 纹理维度错 + 渲出高于背景像素)。
命令
gpr_poc polish tmp\store_lod_001 --frames 90(默认取景 El45/Az30/Zoom1.5「斜穿俯视」,视线从上方斜穿体内部而非只看端面)。
测试体
- 全分辨率 level0 局部段:256 x 29 x 162(沿线中段 4 brick 列 [345,349)/695),垂向夸张 exagg=8(放大薄 Y/Z 轴使截面可读)。
- 三图标量传函/配色/取景/夸张全相同,唯一变量是「梯度不透明度 / 光照」。
梯度幅值分布(量化域,中心差分,545211 样本,按实测标定阈值)
median=5.32,p75=20.1,p90=196.2,p99=9058.5,max=21470。 梯度不透明度 piecewise(按此分布标定,非猜):grad≤5.32→0.0、grad=196.2(p90)→0.5、grad≥9058.5(p99)→0.9。 即:占多数的低梯度均匀区透明,仅高梯度处(层界面)不透明。 标量不透明度峰值:基线 a=0.15(与默认体绘制同档→白雾);b/c 梯度门控压住均匀区后提到 0.6,让层界面净不透明度(标量×梯度)足够高、层面成实面。
三张对比图(docs/superpowers/plans/poc-lod-shots/)
| 图 | 路径 | 高于背景像素(>35) | 结构像素(>50) | 平均亮度(0-255) | fps |
|---|---|---|---|---|---|
| a 基线白雾 | polish-a-value.png | 219980 (21.5%) | 145874 (14.2%) | 20.07 | 160.8 |
| b +梯度不透明度 | polish-b-grad.png | 50358 (4.9%) | 36430 (3.6%) | 15.71 | 58.2 |
| c +梯度+光照 | polish-c-grad-shade.png | 25008 (2.4%) | 756 (0.07%) | 14.81 | 57.3 |
光照参数(c):ShadeOn,Ambient 0.3 / Diffuse 0.7 / Specular 0.2 / SpecularPower 10。
目视结论:内部层是否「浮」出来了?
部分浮出来了,但不是全身——这正是层状数据的固有限制。
- a(基线):一根平滑均匀的灰蓝色长条,没有任何内部层次,只有端面隐约可辨——就是需求描述的「体中间均匀白雾、只端面有层次」。穿透均匀水平层积分成雾。
- b(+梯度不透明度):体的大部分(沿线中段那段均匀体)变透明、白雾消失,端部/过渡区露出清晰的水平层状条纹(层界面),底部另现一块淡蓝层状斑。证实:梯度不透明度确实把均匀积分雾抹掉、把层界面显出来了。
- c(+梯度+光照):在 b 基础上端部层条纹带上轻微立体明暗(层带有了明暗起伏的层次感),但 shading 整体压暗,可见区更少更暗。
关键如实结论:梯度不透明度 + 光照能消除均匀白雾、并让「确有梯度突变的层界面」浮出成可读的层状条纹——打磨方向有效。但对这条道路 GPR 数据,强梯度集中在端部/过渡区;沿线的长段水平层因「沿测线方向看过去是均匀的」(梯度低)会整段变透明,而不会显出层。所以打磨改善了「层界面可见性」,但无法让整条体内部都「长出层」——长均匀段的内部偏雾/偏空是层状数据本身的固有属性,不是没打磨。 想看长段内部层,应配合切片/正交截面,而非纯体绘制穿透积分。
fps 代价
梯度不透明度需逐采样点算梯度,fps 从基线 160 降到 ~58(约 -64%),但仍远高于交互级 15fps,可接受。光照(c)相对 b 近乎免费(58→57)。本机 RTX 3060 数;最低配未验。
提交自检
- 仅
git addtools/gpr_poc/main.cpp + 3 张 polish-*.png + 本报告;未git add -A。 git diff --cached --stat确认无 chart/scatter/quill/rangeslider/Dialog/FormK。- 未改任何交互默认(探针性质,仅新增 polish 子命令与三个 polish 专用辅助函数)。