Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Distance field of Julia set

Distance field of Julia set

ゆるゆるシェーダー交流会 #2 で発表した

Avatar for kinakomoti-321

kinakomoti-321

November 07, 2026

More Decks by kinakomoti-321

Other Decks in Programming

Transcript

  1. ジュリア集合 • ある複素数 𝑐 ∈ ℂ に対して、複素数 𝑧0 ∈ ℂ

    について次のような漸化式を考える 𝑧𝑖+1 = 𝑧𝑛2 + 𝑐 • 𝑖 → ∞ の時、発散しない 𝑧0 の集合を 𝑐 のジュリア集合という • 指数が 2 じゃなくてもよかったりする
  2. 距離場の推定 • これをテイラー展開してみると 𝑓 𝑝 + 𝜖 ⋅ ∇𝑓 𝑝

    + 𝑂(𝜖 2 ) = 0 • 絶対値について、一次近似すれば 0= 𝑓 𝑝+𝜖 ≈ |𝑓 𝑝 + 𝜖 ⋅ ∇𝑓 𝑝 | • ここから三角不等式で 0 ≥ 𝑓 𝑝 − ∇𝑓 𝑝 ⋅ 𝜖 ≥ |𝑓 𝑝 − ∇𝑓 𝑝 ⋅ |𝜖|
  3. 距離場の推定 • 結果として距離 |𝜖| に対する近似的な最低値が求められる 𝑓(𝑝) 𝜖 ≥ |∇𝑓(𝑝)| •

    これは一次近似に基づいているので、形状に近い位置ほど正しい距離場に近づく • 遠くに行くほど距離場としておかしくなるかも • とにかく距離場っぽいものが得られる
  4. 距離場の推定 • 距離場の推定には関数値 𝑓(𝑝′ ) と微分値 ∇𝑓(𝑝′ ) だけで良い •

    微分値は数値計算とかで求められる • 綺麗なグラフの線を書けたりする • GraphToy はこれ使ってるらしい
  5. ジュリア集合の距離場 • ジュリア集合にはいい感じのポテンシャル関数が定義されている • Hubbard-Douady potential 𝐺𝑐 (𝑧) log |𝑧𝑛

    | 𝐺𝑐 𝑧 = lim 𝑛→∞ 2𝑛 • 𝐺𝑐 はジュリア集合に近づくほど 0 になっていく性質 • ジュリア集合は 𝑮𝒄 𝒛 = 𝟎 で定義できる! 𝐺𝑐 𝑧 = log 𝑧 + const + 𝑜(1) • 元々は boettcher map という写像から来ている、色々便利らしい
  6. ジュリア集合の距離場 • 実際には極限は計算できないので、どっかで打ち切る 𝑑 𝑧 ≈ 𝑧𝑛 log |𝑧𝑛 |

    |𝑧𝑛′ | • 𝑧𝑛′ の計算は結構簡単、ジュリア集合の漸化式を微分すればよい ′ 𝑧𝑛+1 = 2 𝑧𝑛 𝑧𝑛′ , with 𝑧0′ = 1 • 計算を軽くするため、漸化式を以下のように計算する場合もある ′ 2 = 4 𝑧 2 𝑧′ 2 𝑧𝑛+1 𝑛 𝑛
  7. 3 次元ジュリア集合 • 複素数 𝑧 ∈ ℂ ではなく四元数 𝒒 ∈

    ℂ𝟒 を使うだけ • 3次元座標(𝑥, 𝑦, 𝑧) に対して 𝑞 = 𝑥 + 𝑦𝑖 + 𝑧𝑗 として以下の漸化式を考えて、ジュリア集合を構成する 𝑞𝑖+1 = 𝑞𝑛2 + 𝑐 • 4次元ジュリア集合の 𝑤 = 0 の断面を見ている感じ、どう座標を扱うかはある程度自由
  8. 参考文献 • distance to fractals • 3D Julia sets •

    distance estimation • The science of fractal images • Distance estimation method for drawing Mandelbrot and Julia sets