読者です 読者をやめる 読者になる 読者になる

Distance Estimated 3D Fractalsを理解するためのロードマップ

mandelbulbやmandelboxをご存知でしょうか?これらのフラクタルはDistance Estimation という手法を用いて描画されることが多いです。この手法を用いることで、複雑なフラクタル形状を高速で綺麗に描画することができます。
最近この手法を勉強していました。クライン群に関しては以下の二つのようなものを描画することができます。といっても僕がこれらのDistance Estimationのアルゴリズムを考案したわけではないので、まだまだなのですが…これらに関してはそのうち文章にまとめたいと思います。
3D kissing-Schottky orbit spheres
kissing-Schottky limit set

さて、これらを理解するために、ネット上には多くのテキストが存在しますが、僕個人がこの順番だったら楽だったろうなぁというものをまとめておきます。僕もまだなんとなく理解できた、程度ですし、色々な文章を何度も読み返す必要はあると思います。

(独学とは再帰なり)

素数夜曲 by 吉田 武

日々精進あるのみですね。

GLSL、レイマーチングについて学ぶ

wgld.org | GLSL |

glslの基本とレイマーチングの基本が学べます。

全能感UP! GLSLで進めレイマーチング « demoscene.jp

Distance functionについての項目でレイマーチングについてとてもわかりやすい図が載っているので一度目を通すべきです。

フラクタルの描画について学ぶ

Distance Estimated 3D Fractals (Part I) | Syntopia
Syntopiaでは8回にわたってDistance estimationを用いたフラクタル描画に関しての連載があります。非常に参考になるのですが、ところどころ展開が急で面食らうと思います。とりあえずpart1~3を読むのが良いと思います。
レイマーチング等の基本とカラーリングの話、そしてKaleidoscopic IFSについての解説があります。Kaleidoscopic IFSはある面での反転等を行うことによって構築するフラクタル図形です。

distance estimationについて

distance estimation

平面において、ある数式で表される図形から、ある点までの距離を測るにはどうすれば良いのか解説しています。
{ |\epsilon| \geq \frac{|f(x)|}{|\nabla f(x)|}
}
の関係式が重要です。

distance rendering for fractals

マンデルブロ集合をdistance estimationを用いた方法で描画する解説です。

mandelbulb

ここまで来たらSyntopiaのpart4から読んでいくと良いと思います。僕は唐突にヤコビアンがでてきてびっくりしましたが、{|\nabla f(x)|}を求めるためだと考えればなんとなく納得できます。ここら辺は色々なやり方や、論文があるため、一筋縄ではいかないと思います。あまり深入りしない方が良いのではないでしょうか…
Distance Estimated 3D Fractals (IV): The Holy Grail | Syntopia

Syntopiaでも紹介されていますが、そのほかは以下の二つ辺りを読むのがよいかと。mandelbulbまでがなんとなくわかれば残りのSyntopiaの他のパートも比較的楽に読めます。
mandelbulb
Mandelbulb: The Unravelling of the Real 3D Mandelbrot Fractal

その他

What is a Mandelbox - Mandelbox

mandelboxを考案した人のページ。一部表示されていない動画はこれです
2d Mandelbox fold from Tom Lowe on Vimeo

GLSL Sandbox Gallery Shadertoy BETA

これらのサイトで組んでみたり、shadertoyで既存のコードを検索し、値をいじることで理解が深まる場合もあります。

Fragmentarium

Syntopiaの方がつくったGLSLベースのレイトレーサで、シェーダのコードを含むexampleが豊富です。漁ってみればものすごく参考になるのではないでしょうか

おわり

他にも本やFractal Forums、論文など様々なテキストが存在します。もしも理解に詰まったら、あまり固執しすぎずに別のテキストを読んだり、コードを読んだりしてみると良いのではないでしょうか。一人前のフラクタルレンダラ―への道は長いですね。
あとはライティングや色付けに関する勉強ができていないので勉強したいです。そこら辺の理解ができたらまたまとめようと思います。