本ページはプロモーションが含まれています

ギャラリー

Canvasで描く都会のビル群|窓の明かりが灯る夜景

CATEGORY
REV.
DRAWN BY
TOM
SHEETS
2枚
City Lights(Canvasで描くビル群の夜景)

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

終電を逃した帰り道に、ビルの窓を数えるくせがあります。

こんな時間なのに、まだ明かりのついた部屋がいくつもある。

あの一つひとつに人がいて、それぞれの夜があるのだと考えると、なぜか少しだけ救われます。

その景色を、画像も動画も使わずに、HTML・CSS・JavaScriptのCanvasだけで作りました。

高架を電車が走り、空を飛行機が横切り、押せば花火も上がります。

ドラッグすると、街を左右に見渡せます。

夜の街の見方

ボタンは画面の下にまとめてあります。

夕暮れから深夜まで、好きな時間の街を探してみてください。

  • 時間:スライダーを左に寄せると夕暮れ、右に寄せると深夜になります。深夜ほど空が暗くなり、点いている窓の数が増えて、星が見え始めます
  • 天気:晴れ・雨・雪から選べます。雨の日は路面が濡れて街の明かりが映り込み、雪の日は粒がゆっくり舞います
  • 花火:夜空に打ち上がります。上がる光の尾、開く瞬間の閃光、散っていく火の粉まで描いています
  • 電車:高架を5〜7両編成が走り、窓明かりが下の道路をなぞります
  • 飛行機:空の高いところを、赤い衝突防止灯を点滅させながら横切ります
  • ドラッグ:手前のビルほど大きく動き、奥のビルはゆっくり流れます
  • 街の音:低いざわめきが流れ、ときどき車が通り過ぎていきます
窓の明かりは、0.25秒ごとにどこかの部屋が点いたり消えたりしています。

じっと1か所を見ていると、誰かが帰宅した瞬間や、誰かが寝た瞬間に立ち会えます。

私はこれを眺めながら書いているうちに、また終電を逃しました。

この街のつくり

見た目重視で作ったので、しくみは簡単なメモだけにしておきます。

外部ライブラリは使っていません。

見えているものしくみ
ビル群奥行きの違う4列を、幅と高さを変えながら並べています。奥の列ほど低く、空の色に近づけています
窓の明かりビル1棟ごとに別のキャンバスへ描いてあり、点き消えした窓だけを塗り直します。毎フレーム全部の窓を描くと重くなるためです
窓のにじみ手前の2列だけ、同じ絵を少し大きくlighterで重ねて光をにじませています
赤い点滅高いビルの屋上の航空障害灯です。ビルごとに点滅のタイミングをずらしています
車の光道路の上を流れる細長いグラデーションです。右へ進むのが白、左へ進むのが赤い尾になります
電車高架の桁の上を、窓明かりを持った車両が並んで走ります。下の道路に明かりがこぼれます
花火打ち上げ・閃光・火の粉の3段階です。火の粉は170個で、時間とともに減速しながら落ちていきます
雨の映り込み地平線より上の街を上下反転し、横長の帯に切って、路面へ少しずつずらして重ねています。帯ごとに横揺れを加えて水面のゆらぎにしています
街の音Web Audio APIのブラウンノイズをローパスに通したざわめきに、バンドパスの中心を動かした通過音を重ねています
ページ全体記事を開くと背景が夜の色になり、一番下には街のシルエットが居座ります。こちらの窓も、2秒ごとにいくつか切り替わります

いちばん時間を使ったのは、窓の配置でした。

等間隔に並べると、ビルではなく表計算ソフトに見えます。

ビルの上のほうだけ幅を狭める段差を入れ、列ごとに窓の大きさと間隔を変えたところ、ようやく街になりました。

  • 画面の外にあるときは描画を止めて、スクロール中の負荷を抑えています
  • OSで「動きを減らす」設定をオンにしている人には、止まった状態で表示します
  • 手元の環境では60fpsで動いています
NEXT READ本棚から1本

AIで開発を組み直すなら、まずこの5冊から

入門・実践・設計まで、Claude Codeの本をレベル別に5冊選んで比べました。

→ おすすめ5冊を見る

  • この記事を書いた人
  • 最新記事

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

ギャラリー