geopro/.superpowers/sdd/task-12d-polish-report.md

3.8 KiB
Raw Permalink Blame History

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.32p75=20.1p90=196.2p99=9058.5max=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

光照参数cShadeOnAmbient 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 add tools/gpr_poc/main.cpp + 3 张 polish-*.png + 本报告;未 git add -A
  • git diff --cached --stat 确认无 chart/scatter/quill/rangeslider/Dialog/FormK。
  • 未改任何交互默认(探针性质,仅新增 polish 子命令与三个 polish 专用辅助函数)。