干渉縞・シェーダーInterference
円を描いて周回する複数の波源から広がる波を重ね合わせ、渦を巻くように動く干渉縞を描きます。
どう計算しているか
- 「波源の数」ぶんの点を、半径「波源の軌道」の円周上に等間隔で置きます。偶数番目と奇数番目で逆向きに、「波源の周回」の回数だけ回します。
- シェーダー(GPU で画素ごとに計算するプログラム)で、各画素から各波源までの距離 d を求め、sin(2π(d·「波の細かさ」 − 「1ループの波の数」·t)) を足し合わせて平均します。波源から同心円状に波が外へ進みます。
- 波の山と谷が強め合ったり打ち消し合ったりして、干渉縞ができます。2値では合計が正か負かで塗り分け、細線では合計が 0 になる境目だけを細い線で描きます。
- 色帯では、合計値を「色帯の段数」で区切り、1段おきに色を付けて残りを透明にします。
v = (1/n)·Σ sin(2π(|p − sᵢ(t)|·freq − cycles·t))ループがつながる理由
波の位相の項も、波源の回転角の項も、整数 × t です。t=1 で波はちょうど整数周期進み、波源は整数周して元の位置に戻るので、模様が最初と一致します。
調整できるパラメータ
形
| 波源の数 | 1 〜 8(初期値 3) |
|---|---|
| 波の細かさ | 2 〜 80(初期値 7) |
| 描き方 | 2値・色帯・細線 |
| 色帯の段数 | 2 〜 12(初期値 4) |
動き
| 波源の軌道 | 0 〜 1.2(初期値 0.45) |
|---|---|
| 1ループの波の数 | 1 〜 6(初期値 1) |
| 波源の周回 | -3 〜 3(初期値 1) |
同じ分類のシーン(線・波)
- 線・波Wave Lines横に引いた何本もの線を、正弦波や矩形波、ノイズで上下に揺らし、線ごとに少しずつ時間をずらして波を流します。
- ループするノイズNoise Field格子状に並べた線分や点、四角が、時間方向に閉じたノイズに従って回転・伸縮し、場全体がうねるように動きます。
- モアレMoiré同心円や縞を2組重ね、片方を少しずらしたり傾けたりすることで、干渉模様(モアレ)が流れるように動きます。
- 二重らせんDouble Helix奥行きに応じて大きさと濃さを変えた点で二重らせんを描き、横に流れながら回転して見えるようにします。
- 波打つ地形Wave Mesh斜め上から見下ろした格子の地形が、波紋・交差波・ノイズで上下にうねり、手前の面が奥の線を隠します。
- リボンTwisted Ribbon幅のある帯がねじれながら流れ、表と裏の色の切り替わりと陰影で立体感を出しています。
- 等高線の地図Contour Map時間とともに形を変えるノイズの地形を等高線で描き、地図のように5本ごとに太い線を入れます。
- ジグザグ・シェブロンChevron Flow山形に折れ曲がった色の縞が流れ続け、ジグザグの深さが呼吸するように変わります。
- オシロスコープOscilloscopeオシロスコープのビームがリサージュ図形や波形をなぞり、後ろに残光の尾を引いて光ります。
- マーブル・シェーダーGLMarbling絵の具を水に浮かべて混ぜたようなマーブル模様を、ノイズで座標を何度もゆがめて作り、ゆっくり流します。
- ドメインワープ・シェーダーGLDomain Warpノイズで座標をゆがめ、そのゆがんだ座標でまたノイズを引くことで、煙や流体のような有機的な模様を作ります。