08-coarse-to-fine-transition-solution.md 11 KB

低精度 → 高精度过渡的解法

Type: prototype Status: resolved Labels: wayfinder:prototype Blocked by: 01,05,07

进度:100%

维护者已在实际场景观看影像交接原型,反馈“基本上没问题,可以算原型基本验收完毕”。本票按方案决策与原型观感范围 resolved:选用先隐藏精细层、雾先保护、再渐显影像,返回反向交接的方案;不等于正式功能完成、全路径零跳变或性能已达标。

下一步:正式实施按 Answer 的三条反馈调快进出雾气变化、校成冷白灰而非绿色,并使返回全球的镜头高度变化与雾气模糊同步;保留影像先收起、保护不断档的顺序。实施时还须核查目标瓦片、矩形内部 LOD 换级、异常降级和 P95 帧耗时增幅 ≤15%。三项反馈未给精确数值,交由实施调校与维护者复核,不把原型参数当成最终数值。依项目规则本轮未运行 build/dev 或浏览器调试,目视结论来自维护者反馈。

Question

按甲方判据(Q5=B)——「从全球飞到县城视角的全过程不出现肉眼可辨的方形色块跳变」,选出一套手段组合并给出可实施的判定。

调研 05 已查明两条硬约束:① 矩形边缘是 GLSL step() 硬切,引擎零羽化、零交叉淡入,任何渐显都得手写;② 跳变有两类——(a) 矩形首批瓦片到位时整体出现,(b) 矩形内部被地形 LOD 牵着逐级换挡。甲方已确认 (b) 类也纳入判据,并允许「边界羽化 / 渐变遮罩」这类碰 shader 的手段。

候选手段(按成本从低到高):

  • 雾气遮蔽(07 的 depth 雾)——零额外机制,但只在有雾的距离带内有效;
  • minimumTerrainLevel 硬门——"太远就不显示精细层",最省的近似闸门,但是硬开关;
  • 按高度驱动 ImageryLayer.alpha 整层渐显——能消除 (a) 类的"整体出现",但羽化不了边缘,也治不了 (b) 类(整层 alpha 无法只淡"新到的那一级");
  • 边界羽化 / 渐变遮罩(碰 shader)——唯一能真正软化矩形边缘的手段;
  • 隐藏精细层至接近才渐显——甲方原提案,甲方自评"效果不一定好";
  • 预烘焙中精度影像层——把台阶从 1 级变 2 级,成本最高,作为兜底。

要裁决的:

  1. 选哪几样组合才能同时满足 (a)(b) 两类、且不把开销推高(甲方 Q9 明确在意性能)?
  2. 若选边界羽化:走哪个挂点 —— 自建 provider 包装、自定义 Globe 材质、还是复用 07 那条 depth 后处理级(把"距离"换成"到矩形的距离")?与 ADR 0004「不接管 Cesium 场景」是否相容?
  3. 用原型(廉价、粗糙、可反应)验证观感,而不是先写正式实现;原型只回答"看起来行不行"。

建议做法:先出一版最小原型(改 alpha 曲线 + 一个边界羽化的最小 shader 挂点,不做美化),交给甲方目视判断;原型结论落票面 ## Answer,不作为正式实现进仓。

Answer

最终决策:实际场景原型基本验收

维护者在真实驾驶舱场景目视后反馈:“基本上没问题,可以算原型基本验收完毕”。本票采用 B:地物距离雾先形成保护,再渐显精细影像;返回采用反向交接。全球/引导态保留粗底图、隐藏精细层;进入可以在精细层不可见时预取;目标瓦片未准备好不揭示影像。雾失效时业务可用优先,提示降级并渐显精细层,但不承诺完全遮边。取消、返回及再次进入只认最新目标,过期渐显或撤雾不得生效。原型 A(现状直显)与 C(接近后渐显)保留作对照,不作为本票选定方案。

正式实施必须处理维护者指出的三项问题:

  1. 进出雾变换稍快:进入时清晰到模糊、返回时模糊到清晰的变化速度均比原型稍快。反馈没有指定秒数或高度阈值;以实际飞行观感调校,不能未经复核自行锁成某个时长。
  2. 冷白灰雾色:视觉应偏冷白灰,不得发绿。此前 B 的 #bdcdd6 是旧原型已确认默认初值,不等于这次实际场景的最终色;实施时以本次色相反馈校准并请维护者复核最终值,18/42 km 距离端点未在本次反馈中变更。
  3. 返回同步:返回全球时,镜头高度上升与雾气模糊减弱须同步作用;不能先让影像收完、画面停顿,再让镜头飞走,也不能镜头远离后才突然撤雾。与此同时保持“影像在失去保护前收起”:需在镜头起飞阶段继续保护,按画面实际风险协调雾强度与影像 alpha,避免重现矩形边缘。

本次仅通过方案决策/原型观感,不宣称生产实现已满足从全球到县城全程无可辨方块。真实保护成立不等于 stage ready、雾强度或相机距边界单一指标;globe.tilesLoaded 也不证明目标视野逐像素就绪。矩形内部随地形 LOD 逐级换挡不能靠整层 alpha 修复,若正式实现中肉眼可辨,须另做局部过渡或在不接管 Cesium 场景的边界内评估 shader 羽化,预烘焙中精度层仅作更高成本兜底。目标瓦片失败和雾失效的可用性、透明对象可读性、首次启用卡顿及同条件 P95 帧耗时增幅 ≤15% 仍是实施验收项,均未由本票原型证明。

已确认的方案方向(上游原型反馈,历史)

维护者在选择 B(仅地物距离雾)、指出进入遮挡过晚后,确认“采用上述推荐方案”。采用视距雾气的实现规格记录的“精细影像先隐藏 → 雾先形成保护 → 精细影像渐显”,返回全球采用反向交接。本节是当时的方向记录;本票后续的原型观感验收见 Answer 首节,不代表正式功能已实施。

第 1 轮已确认

维护者答复 Q1=A、Q2=A、Q3=A、Q4=A:

  1. 本轮先做单文件逻辑原型,不挂真实地球。
  2. 雾不可用时关闭并提示,精细层仍渐显,但不承诺遮住矩形边。
  3. 取消进入或返回全球时立刻改成收起,不把正在变亮的过程放完;过期操作无效。
  4. 隐藏时可以预取瓦片。看不见不等于停止加载。DEM、3D Tiles 和业务对象仍不在这次范围内。

原型里的可观察规则

逻辑见 prototypes/prototype-coarse-to-fine-transition.html 的 Transition.reduce。页面只负责按钮。

  • 雾可执行、雾强度和保护成立是三件事。只有保护成立后,才允许精细层变亮。
  • 目标视野还不能显示时也不变亮,避免先空白再跳出方块。
  • 返回时先收起精细层,收到看不见再撤雾。精细层还在时撤雾,记成边缘可能露出。
  • 雾失败且精细层已经可见时,不突然藏起来,同时把遮缝承诺改成降级。
  • 整层透明度不能只淡矩形内部新到的那一级。这条走查只把问题摊开,没有选中修复手段。

原型阶段未确认(历史,最终口径见本票 Answer 首节)

  • 四档变亮/变暗只是按钮粒度,不是秒数,也还没和相机运动绑在一起。
  • 瓦片失败时保持隐藏、继续用粗底图。
  • 「保护成立」在原型里由人标记。真实画面上怎样才算挡住边缘,还没验收。
  • 正向和反向都还没有肉眼验收,也没有性能证据。

实际场景原型入口与限制

维护者要求在实际场景观察,因此在原有单文件逻辑原型之外,新增 src/modules/cockpit/prototypes/TransitionPrototype.vue 与 transition-prototype-scene.js,并通过 src/pages/cockpit/index.vue 的 DEV query 显式接入现有 /cockpit。普通应用按仓库已有 yarn dev 启动,打开其实际地址的 /#/cockpit?transitionPrototype=1&variant=B;variant=A 和 variant=C 为对照,同一路由底栏左右箭头或键盘左右键切换。不要同时启用其它原型 query。

B 复用已有仅地物距离雾 stage,进入时渐入雾,图层 alpha=0 时保留挂载供加载,满足粗判才用 900 ms 渐显。当前原型的返回演示先把精细层收至 0,再撤雾并让镜头返回全球;维护者已指出此时高度与雾气模糊应同步,故正式实现不能照搬这一等待顺序,须以 Answer 首节的同步要求和连续保护为准。A 保留现状作为方块对照,C 只在接近时渐显。卸载还原图层原 alpha/show 与内置雾。相机距影像矩形边缘 38 km、20 km 高度门控与 globe.tilesLoaded 只是原型初值和代理信号,不是已验收的保护/瓦片就绪契约。本 agent 未运行开发服务器、构建或浏览器走查;维护者已提供目视反馈,原型方案基本通过,生产运行质量仍待验收。

Comments

上游雾原型人工反馈:进入遮挡出现过晚

维护者选择视距雾气的实现规格的 B(仅地物距离雾),反馈颜色与距离基本没有问题,但进入演示的雾出现过晚,未能及时遮挡矩形边缘。B 不包含天空/地平线背景着色,也不包含 C 的太阳方向微调。

本票后续必须验证“矩形边缘首次可能可见”与“保护已成立”之间的先后关系。当前雾原型只有 60/20 km 高度门控,未控制精细影像层交接;不能直接把这套进入参数当成达标手段。

初次登记时为候选;维护者随后确认“采用上述推荐方案”,已写入 Answer 的方向记录。保持现有依赖,不创建反向阻塞,也不将方案获选当作进入过渡已修复。本轮已 claimed,只为开始第 1 轮澄清。

第 1 轮澄清:原型分支与交接条件

方向已锁,不重开。下列四项会改变原型形状,未答复前不写原型:

  • Q1:本轮先验证状态时序,还是直接在驾驶舱里目视。
  • Q2:无雾时是否仍渐显精细层。
  • Q3:取消进入、快速返回时是否立即收起精细层。
  • Q4:隐藏时是否继续请求瓦片。

维护者答复 Q1=A、Q2=A、Q3=A、Q4=A。逻辑原型已放到 prototypes/prototype-coarse-to-fine-transition.html。脚本核对了八条状态走查:保护未成立时变亮被拒绝;先收影像再撤雾不记边缘露出;先撤雾、雾失败后变亮、无雾变亮会记成可能露出。该记录只描述第一阶段;实际场景原型随后已获维护者基本目视认可,见 Answer 首节。本轮未跑 build/dev。

实际场景原型反馈与决策验收

维护者反馈:“基本上没问题,可以算原型基本验收完毕”,同时要求后续具体执行注意:进入和返回时雾气变换速度再快一点,雾为偏冷白灰而非绿色,返回全球时高度和雾气模糊同步应用。将反馈记录为本票决策与原型观感验收,不误记成正式功能或性能验收。执行细则与保留的技术风险已归并到 Answer 首节;本票 resolved。

可丢弃原型源文件目前仍在共享工作区,/cockpit 入口还含其它尚未独立归档的原型接线;本轮未切分支或提交,以免把并行改动混入证据。后续整理时将本票原型与其入口补丁单独保存在 throwaway 分支并留下分支指针,正式实现只吸收获确认的交接决策,不把原型代码直接当生产实现。