loop-animation

SDF・等高線Contour Tunnel

図形の距離関数を等高線の縞として描き、縞が中心から湧き出し続けながら2つの図形の間でモーフするループアニメーションです。

WebGL2 のシェーダーで、画素ごとに計算して描いています。初期設定で再生しています。

距離関数の等高線が湧き出し続ける。図形AとBの間でモーフし、距離に応じてねじれる(WebGL2)

このシーンで作る

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

どう計算しているか

  1. WebGL のシェーダーで、画面の各ピクセルについて「図形 A」「図形 B」の距離関数(ある点が図形の境界からどれだけ離れているかを返す関数)を計算します。
  2. 2つの距離を混ぜる割合を 0 → 1 → 0 と変えるので、図形 A から B へ変形してまた戻ります。「モーフの強さ」でどこまで B に近づくかを決めます。
  3. 距離に「縞の数」を掛けて時刻を引き、その小数部分で縞を作ります。小数部分が「縞の太さ」より小さいところだけ塗るので、等高線状の帯が並び、時刻とともに帯が外へ流れて見えます。「多色の縞」では整数部分を色番号に使います。
  4. 描く前に座標を回転させます。回転角は中心からの距離 × sin(2πt) ×「ねじれ」と「回転」の和なので、遠いほど強くねじれ、全体も回ります。
v = d(p)·freq − t·cycles·P,  塗る: fract(v) < duty

ループがつながる理由

縞は1ループで「流れる速さ」×色数ぶんの整数本だけ移動するので、縞の位置も色の順番も元に戻ります。モーフの割合とねじれは t = 0 と t = 1 でどちらも 0 になり、「回転」は整数周だけ回ります。

調整できるパラメータ

形

図形 A丸・四角・三角・六角形・十字・リング
図形 B丸・四角・三角・六角形・十字・リング
縞の数2 〜 40(初期値 12)
縞の太さ0.05 〜 0.95(初期値 0.5)
多色の縞オン/オフ(初期値 オン)

動き

流れる速さ-4 〜 4(初期値 1)
ねじれ-4 〜 4(初期値 0.8)
回転-3 〜 3(初期値 0)
モーフの強さ0 〜 1(初期値 1)

同じ分類のシーン(放射・回転)