loop-animation

擬似3D・階段Iso Columns

斜め上から見た四角い柱が格子状に並び、中心から外へ伝わる波に合わせて高さが上下するアニメーションです。

Canvas 2D で、図形を 1 つずつ計算して描いています。初期設定で再生しています。

アイソメトリックの柱が波打つ。段数を指定すると高さが階段状に切り替わる

このシーンで作る

パラメータ、色、エフェクトを変えて、GIF・APNG・WebP・MP4・WebM で書き出せます。

どう計算しているか

  1. 格子の番号 (i, j) を、アイソメトリック投影(奥行きの軸を斜め30°に倒して立体を平面に描く方法)で画面座標に変換します。x は (i − j)·cos30°、y は (i + j)·0.5 に比例します。
  2. 各柱は左の側面・右の側面・上面の3枚の四角形で描きます。手前の柱が奥の柱を正しく隠すように、i + j が小さい奥の列から順に塗ります。
  3. 柱ごとに「位相のずれ方」で決まる遅れ off(放射なら中心からの距離)を求め、「ずれ量」を掛けます。u = fract(t − off) をイージングし、0.5 − 0.5·cos(2πe) という山なりの波に通して高さの割合を作ります。
  4. 高さは「最低の高さ」+「高さの振れ幅」×波の値です。「階段の段数」が1以上のときは、波の値を段数倍して整数部分と、なめらかにつないだ小数部分に分け、高さが段ごとに切り替わるようにしています。
u = fract(t − off·spread),  h = base + amp·(0.5 − 0.5·cos 2π·ease(u))

ループがつながる理由

波は 0.5 − 0.5·cos(2πe) なので、e = 0 と e = 1 で同じ値になります。各柱の時刻は fract で 0〜1 に折り返されるため、どの柱も1ループでちょうど1回上下して元の高さに戻ります。

調整できるパラメータ

形

分割数2 〜 20(初期値 8)
すき間0 〜 0.6(初期値 0.06)
最低の高さ0 〜 200(初期値 20)

動き

高さの振れ幅0 〜 400(初期値 140)
階段の段数(0で無段階)0 〜 8(初期値 0)
位相のずれ方同時・放射・角度・渦巻き・斜め・横・縦・市松・ランダム
ずれ量0 〜 4(初期値 1)
イージングlinear・sine・quad・cubic・quint・expo・back・elastic

同じ分類のシーン(立体・擬似3D)