なめらかなレーダーループは、出来上がった動画ではなく、数値から始まります。Forecast Barは全米スキャンを、タイル化、検証、キャッシュ、デバイス上のレンダリングへと進め、スキャンの間のすき間も処理して、嵐が画面上をなめらかに動くようにしています。
1回の全米スキャン、約1,600万個の値
NOAAはレーダーの観測を2分ごとに全米スキャンへ統合します。この動画で使われているスキャンは6,100×2,700ポイント、16,470,000個の値を含みます。Forecast Barのサーバーは20秒ごとに新しいスキャンを確認します。
これらは別々の時計です。20秒ごとに確認しても、20秒ごとに新しい観測が生まれるわけではありません。同様に、1秒間に何度も更新される画面が、その回数分の新しいレーダースキャンを受け取っているわけでもありません。
値を送り、色はあとで加える
レーダーは1ポイントあたり1バイトの数値として送られます。スマートフォンがマップを描くときに色を加えます。これにより、元のレーダー値と見る人に表示される配色が分離されます。
個々のレーダーは同時に走査しているわけではありません。遅れているレーダーのデータは、次の実際のスキャンへとなだらかに近づけられます。動画ではこれを、別の観測を作り出すのではなく、実際のスキャンの間を処理することとして説明しています。
検証済みのタイルから完全なフレームを作る
各フレームはタイルに分割されます。タイルは隣から1ピクセルの境界を借りるので、表示される部分が継ぎ目なくつながります。すべてのタイルにはSHA-256フィンガープリントも付けられます。
フレームが公開されるのは、すべてのタイルが検証に合格したときだけです。公開後は変更されません。画面に必要なタイルは、不完全な断片が次々に現れるのではなく、1回のリクエストで1つのファイルとしてまとめて届きます。
変更されないフレームを近くに保持する
公開されたフレームは変更されないので、エッジキャッシュは1年間保持できます。キャッシュされた古いフレームもそのフレームのままであり、最新のスキャンを見つけるのは別の処理です。
デバイス上では、タイルがGPUメモリに積み重ねられ、描画時にピクセルごとに色が適用されます。動画で測定された自動再生の結果は約1.5秒でした。これはループの再生準備が整うまでの時間であり、レーダー観測の古さや、普遍的な配信時間を測ったものではありません。
単にフェードするのではなく、スキャンの間に嵐を動かす
観測の間の数分間も、嵐は動き続けます。単純なクロスフェードでは、古い嵐が消えながら新しい嵐が現れ、薄い2つのコピーができてしまいます。
そこでGPUがモーションフィールドを推定し、フレーム間でエコーをその経路に沿って動かします。結果は画面の次の更新で反映でき、対応ディスプレイでは最大120Hzです。これはディスプレイの上限であり、すべてのデバイスでの保証ではなく、観測の頻度を上げるものでもありません。
覚えておきたいこと
次回はこれらを確認しましょう:
- スキャンの間隔、サーバーの確認、画面の更新を区別する。
- アニメーションが連続して見えても、タイムスタンプを確認する。
- なめらかな動きは、スキャンの間のレンダリングであり、新しいレーダー観測ではないと理解する。