# 低精度 → 高精度过渡的解法 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(仅地物距离雾)、指出进入遮挡过晚后,确认“采用上述推荐方案”。采用[视距雾气的实现规格](07-fog-implementation-spec.md#answer)记录的“精细影像先隐藏 → 雾先形成保护 → 精细影像渐显”,返回全球采用反向交接。本节是当时的方向记录;本票后续的原型观感验收见 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 ### 上游雾原型人工反馈:进入遮挡出现过晚 维护者选择[视距雾气的实现规格](07-fog-implementation-spec.md)的 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 分支并留下分支指针,正式实现只吸收获确认的交接决策,不把原型代码直接当生产实现。