Files
MapLibreParticleLab/docs/报告/STEP-055_Android真实WeatherV2风场综合可视化_Codex完成报告_v2.md
OpenAI Codex 6c7886b0c3
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
fix: tune real weather particle rendering
2026-09-05 08:34:36 +08:00

4.1 KiB
Raw Blame History

STEP-055 真实 WeatherV2 风场综合可视化修复 Codex 完成报告 v2

基线与结果

  • Starting HEAD:8a0873a5fb2c8867c7e2a126b4d4c185077dd6f9
  • 分支:particle/main
  • 状态:IMPLEMENTED / WAITING_ANDROID_VALIDATION
  • 本轮针对首轮 Android 实机视觉问题修复;Android Gradle、APK、ADB、App/设备测试与 Jest 均未执行。

已完成

  • REAL WEATHER basemap 改为 GSI 标准地图,并以 basemap=GSI failSoft=true 记录独立底图配置;不引入 key、商业 SDK 或天气网络。
  • REAL WEATHER 现在是 MAP 旁的一级菜单,MORE 不再重复。首次点击提交现有真实 T0–T3 Host dataset、fit bounds 并打开 tuning;再次点击只切换菜单。退出真实场景恢复进入前的 synthetic visual state。
  • 真实场默认 P=2048、W=0.75、L=0.0040、O=0.75、T=0.55、F=0.88;HUD 和 PARTICLE TUNING 使用同一状态。离散低频调参/RESET 不重载 Style、不重提 Field、不重置 Timeline 或 Runtime Window;只有 P 允许 State/draw resource recreate。
  • Core 粒子数支持明确的 validation presets 256/512/1024/2048/4096/8192/16384(并保留既有高档位);State grid 改为 ceil(sqrt(count)),剩余 texels不绘制。lineWidth/streakLength 下限分别为 0.25/0.0005。

m/s 位移结论

此前 State shader 使用 position += velocity * frame * 0.00004:它没有 m/s、秒、地球尺度或纬度解释,真实数据虽能推进 A/B,但无法审计真实地理位移,粗宽 trail 也掩盖小位移。

现链路保持 canonical U=eastward、V=northward、单位 m/s:wall delta 限制为 1/240–0.05s,作为明确视觉仿真时钟乘 6000 simulation-seconds/real-second;shader 使用 dx=U*dt/40075016.6856 与 dy=-V*dt/(40075016.6856*cos(latitude)) 写入 Web Mercator world state。6000 是 rendering-only time dilation,用于在日本 validation zoom 下将真实 m/s 的亚像素 real-time displacement 显示成可观察流线;它不修改 payload、Adapter、Snapshot、validTime、MIX 或 Timeline playback。低频 ParticleMotion 仅报告 CPU field sample 与同公式估算 delta,无 GPU→CPU readback。

Pause 仍只冻结 forecast Timeline;Particle State update 保持 active,因此固定风场下粒子继续运动。

架构保护与未做项

未修改 STEP-054 WeatherV2 assets、ParticleFieldDescriptor/Snapshot/DataAdapter、Host Submission contract、Timeline/Playback、Runtime Field Window 或 WeatherColorLayer 数据链。继续保持 A/B→B/C→C/D、OLD_T1→NEW_T0 reuse、only NEW_T1 upload、MIX property-only、正常 boundary simulationRebuild=false/trailCleared=false;未在 Renderer 引入 provider/network/vendor 逻辑,未接 Weather Service、React Native 或 Jest。

Rotation/Viewport 只纳入本轮人工验收,未扩大实现范围。MIX 文本滞后及 WAITING/INVALID 状态视觉仍为 NON-BLOCKING observability。

Linux / 静态验证

  • node shaders/generate_shader_code.mjs:PASS。
  • OpenGL CMake 受影响 Core TU 精确编译:render_particle_validation_layer.cpp、raster_particle_layer.cpp、render_weather_color_layer.cpp、raster_array_source.cpp:PASS。
  • test/style/style_layer.test.cpp 以同一 OpenGL CMake 参数精确编译:PASS(含 2048 preset 与 visual bounds 更新)。
  • mbgl-test-runner 构建已启动以复用现有 target,但在进入无关 Core translation units 前按本任务定向边界停止;不作为通过声明。
  • git diff --check:待文档完成后的最终检查。

Android 后续一次验收

按 人工验收指令 v2 在 Windows 11 只做一次构建/install。重点检查 GSI、默认细密且明显运动的粒子、HUD/tuning/RESET、Pause 下 simulation、ParticleMotion、T0→T3 两次 boundary、Pan/Zoom/Rotate/Rotation、Duplicate、Invalid 和 Renderer continuity。

Git 收尾

本报告将在本任务相关代码和文档提交后补充实际 commit、push 与 Final HEAD。无关未跟踪的历史 diff、任务书和日志保持未触碰、未 stage。