この端末のブラウザでは WebGL2 が使えないので、このゲームは動きません。Chrome か Edge の新しい版で開くか、ブラウザの設定で「ハードウェア アクセラレーション」を入れてみてください。
いま画面に出ているものは、画像ファイルを 1 枚も使っていない。山も海も空も雲も木も鳥も巨鯨も塔も、全部その場で数式から計算して描いている。音も同じで、音のファイルは無い。風も鐘も和音も、ブラウザの中で波形を合成している。
| 地形 | 「ノイズ」と呼ばれる、なめらかな乱数の式を何層も重ねて高さを決める。原点から遠いほど山が高くなる式にしてあるので、遠くの名所ほど険しい所にある。世界に果ては無い(計算すればどこまでもある) |
| 今日の空 | 日付から 32bit の「種」を作る。同じ種なら同じ世界。だから今日は全員が同じ山と海と風を飛び、名所も同じ場所にある |
| 斜面の風 | 今日の風の向きと強さも種から決まる。風が山肌に当たると上へ逃げるので、地面の傾きと風の向きの掛け算で空気が上がる速さを出す。地面に近いほど強い。風下の斜面では逆に吹き下ろす。本物のグライダーが尾根沿いに飛ぶのと同じ仕組み |
| 上昇気流 | 地面を 820m の升目に分け、升目ごとに「気流があるか・どこか・どれくらい強いか」を種から決める。夜は弱くなる |
| 影 | 飛んでいるあいだ 0.5 秒ごとに位置を残し、今日の空を飛んだ人の道筋を同じ時刻で再生する。上手い人の影は、気流と斜面の風がある所を通る |
| 空と雲 | 太陽の高さから空の色の勾配を計算する。雲は高さ 1900m の層にノイズを置き、太陽に照らされる側と影を分けて描く。雲の影は地面にも落ちる。夜は星とオーロラと流れ星 |
| 水と木 | 水は 3 方向の波の式で空を映す。木は GPU が地面の格子ごとに「ここは木が生えるか」を計算して、数千本を一度に描く |
| 衝突 | GPU と同じ高さの式を JavaScript にも持っていて、機体の下の地面の高さを毎コマ求める。式を 1 行ずつそろえてあるので、見えている山と当たる山がずれない |
| 音 | Web Audio API。風はフィルターを通した雑音で、地面に近いほど鋭くなる。登っているときの「ピピピ」は、本物のグライダーの昇降計の音をまねている |
Claude(Anthropic の AI)が作り、阿久澤が遊んで感想を返しながら直している。コードは JavaScript と GLSL で約 2,480 行(171 KB・1 つの HTML ファイル)。外部のライブラリは使っていない。
動きが重いときは解像度が自動で下がる。学校のノートパソコンでも動くように作ってあるが、WebGL2 が切られている端末では動かない。