みたにっき@はてな

三谷純のブログ

(続)メンガーのスポンジ

前回の記事のメンガーのスポンジの形はCGソフトでモデリングして作っていましたが、フラクタルのレベルを上げるたびに、その3乗のオーダーでデータ量が増えるので、前回作成したlevel4以上を作るのはあまり現実的でありません。

 

そこで、シェーダーを書いて、それ以上の詳細度を持つ形状表現ができるようにしてみました。

 

動画はこちら

www.youtube.com

 

実行ファイル、プログラムコードはこちらに置いてあります。

https://github.com/jun-mitani/menger-sponge/blob/master/README.md

 

シェーダーはレイマーチングを使っていて、基本的な考え方は、次のような感じ。

各画素単位でレイを飛ばして、物体にぶつかるまでの距離と、ぶつかった場所の法線を算出。その情報からピクセルの色を決定する。

このアプローチだと、処理にかかる時間やデータ量は主に画素数に依存して、フラクタルのレベルにはあまり依存しなくなります。

断面を求める計算も、平面上をレイの出発点とすればよいだけなので、簡単に実現できます。