流暢的雷達動畫一開始是一堆數字,不是做好的影片。Forecast Bar讓全國掃描經過切圖、驗證、快取和裝置端繪製,再處理掃描之間的空檔,讓風暴能在螢幕上平滑移動。
一次全國掃描,約一千六百萬個數值
NOAA每兩分鐘將雷達觀測合併成一次全國掃描。這部影片使用的掃描有6,100乘2,700個點,共16,470,000個數值。Forecast Bar的伺服器每二十秒檢查一次是否有新掃描。
這是不同的時鐘。每二十秒檢查一次,不會每二十秒產生一筆新觀測。同樣地,每秒更新許多次的螢幕,也不是每秒收到那麼多次新的雷達掃描。
先送數值,之後再上色
雷達資料以數字傳送,每個點一個位元組。手機在繪製地圖時才加上顏色。這樣就能把底層雷達數值和使用者看到的色盤分開。
各雷達的掃描並不同步。某座雷達延遲時,它的資料會朝下一次真實掃描逐步過渡。影片將此描述為在真實掃描之間作業,而不是捏造另一筆觀測。
用驗證過的圖磚組成完整畫格
每個畫格都切成圖磚。圖磚會向鄰居借一像素的邊界,讓顯示的區塊接合時不留接縫。每個圖磚也有SHA-256指紋。
只有所有圖磚都通過驗證,畫格才會上線。一經發布就不再變更。螢幕需要的圖磚會以一個檔案、一次請求一起送達,而不是一片片陸續出現。
把不可變更的畫格放在近處
因為已發布的畫格不會變更,邊緣快取可以保留一年。快取中的舊畫格仍是那個畫格;找到最新掃描是另一件事。
在裝置上,圖磚會堆疊進GPU記憶體,並在繪製時逐像素上色。影片中測得的自動播放結果約為一秒半。這測量的是動畫準備好播放的時間,不是雷達觀測的新舊,也不是通用的送達時間。
在掃描之間移動風暴,而不只是淡化
在兩次觀測之間的幾分鐘裡,風暴持續移動。單純的交叉淡化會讓舊風暴淡出、新風暴淡入,產生兩個模糊的分身。
GPU改為估算移動向量場,讓回波在畫格之間沿著路徑移動。結果可以在螢幕下次更新時顯示,在支援的螢幕上最高可達120 Hz。這是螢幕的上限,不是對每台裝置的承諾,也不會提高觀測頻率。
重點整理
下次可以這樣檢查:
- 區分掃描頻率、伺服器檢查和螢幕更新率。
- 即使動畫看起來連續,也要看時間標記。
- 平滑移動是掃描之間的繪製結果,不是新的雷達觀測。