流畅的雷达循环一开始只是数字,而不是现成的影片。Forecast Bar让全国扫描依次经过图块、校验、缓存和设备端渲染,再处理两次扫描之间的空档,让风暴在屏幕上流畅移动。
一次全国扫描,约一千六百万个数值
NOAA每两分钟将雷达观测合并为一次全国扫描。这部影片使用的扫描包含6,100×2,700个点,共16,470,000个数值。Forecast Bar的服务器每二十秒检查一次有无新扫描。
这是不同的时钟。每二十秒检查一次,并不会每二十秒产生一次新观测。同样,屏幕每秒刷新多次,也不代表收到了同样多的新雷达扫描。
先发送数值,之后再添加颜色
雷达以数字形式传输,每个点一个字节。手机在绘制地图时才添加颜色。这样就把底层雷达数值和观看者看到的配色分开了。
各个雷达的扫描并不同步。某个雷达滞后时,它的数据会平缓过渡到下一次真实扫描。影片将此描述为在真实扫描之间工作,而不是虚构一次观测。
用校验过的图块构建完整的帧
每一帧都被切成图块。图块从相邻图块借用一像素的边框,让显示的各部分无缝衔接。每个图块还会获得一个SHA-256指纹。
只有所有图块都通过校验,一帧才会上线。发布后它就不再改变。屏幕所需的图块会在一次请求中以一个文件一起到达,而不是以一连串不完整的片段出现。
把不可变的帧放在离你近的地方
因为已发布的帧不会改变,边缘缓存可以保留它一年。缓存的旧帧仍然是那一帧;查找最新扫描是另一项工作。
在设备上,图块叠入GPU内存,颜色在绘制时逐像素应用。影片测得的自动播放结果约为一秒半。这衡量的是循环准备好播放的时间,而不是雷达观测的时效,也不是通用的传输时间。
在扫描之间移动风暴,而不只是淡入淡出
在两次观测之间的几分钟里,风暴一直在移动。普通的交叉淡化会让旧风暴淡出、新风暴淡入,产生两个模糊的副本。
GPU则会估算运动场,让回波沿路径在帧之间移动。结果可以在屏幕下一次刷新时更新,在支持的屏幕上最高可达120Hz。这是显示上限,不是对每台设备的承诺,也不会增加观测频率。
要点
下次可以这样核对:
- 区分扫描节奏、服务器检查和屏幕刷新。
- 即使动画看起来连续,也要看时间戳。
- 平滑运动是扫描之间的渲染,不是新的雷达观测。