前回の記事のメンガーのスポンジの形はCGソフトでモデリングして作っていましたが、フラクタルのレベルを上げるたびに、その3乗のオーダーでデータ量が増えるので、前回作成したlevel4以上を作るのはあまり現実的でありません。
そこで、シェーダーを書いて、それ以上の詳細度を持つ形状表現ができるようにしてみました。
動画はこちら
実行ファイル、プログラムコードはこちらに置いてあります。
https://github.com/jun-mitani/menger-sponge/blob/master/README.md
シェーダーはレイマーチングを使っていて、基本的な考え方は、次のような感じ。
各画素単位でレイを飛ばして、物体にぶつかるまでの距離と、ぶつかった場所の法線を算出。その情報からピクセルの色を決定する。
このアプローチだと、処理にかかる時間やデータ量は主に画素数に依存して、フラクタルのレベルにはあまり依存しなくなります。
断面を求める計算も、平面上をレイの出発点とすればよいだけなので、簡単に実現できます。