Creative Coding Drill vol.3
※この記事はtkmh.me上で掲載している記事 (2016.02.24掲載) を転載、加筆・修正したものです。
---------
第三回はフラクタルについて。
フラクタルといえばこれ!みたな図形のひとつにマンデルブロ集合というものがあるのは知っていましたが、どうやって実装するのかは知りませんでした。なので今回はフラグメントシェーダのみで実装。
実際のデモは時間経過で色を変えているだけなので今回は静止画のみですが、非常に美しい図形ができました。
マンデルブロ集合は
zn+1 = zk2 + C
z0 = 0
という漸化式で定義される複素数列で n → ∞ の極限で発散しない複素数Cの集合
とのこと。ここで、複素数Cを
c = x + iy
としてXY平面上で考えたものが↑の画像になります。
つまり、フラグメントシェーダで各ピクセル(x, y)においてzn+1を計算し、発散する場合としない場合で違う色で着色していけば、↑の画像が完成します。
発散の条件式は
|zn| > 2
この条件に関しては、こちらのページで解説されているのを参考にさせていいただきました。
また、集合の条件で、「n → ∞ の極限で発散しない複素数Cの集合」とありますが、実際にコンピュータで∞回計算することは不可能なので、今回はn → 600で発散するかどうかを判定しています。この値が∞に近くなればなるほど、正確なマンデルブロ集合が描けることになりますが、コンピュータでは現実的には不可能です。
今回のソースコードは以下です。
サポートいただければ、レッドブルを飲んでより頑張れると思います。翼を授けてください。