🌌 Fraktal 3D Mandelbulb
Mandelbulb 3D renderowany raymarchingiem na GPU w czasie rzeczywistym, z uczciwym estymatorem odległości de = 0.5·log(r)·r/dr. Zmieniaj potęgę n, aby przeobrażać kolczastą skorupę, ustaw liczbę iteracji i przełączaj palety.
O tej symulacji
Ten symulator renderuje Mandelbulb, najbardziej znany trójwymiarowy odpowiednik zbioru Mandelbrota, za pomocą raymarchingu na GPU względem analitycznego estymatora odległości. Każdy punkt jest przeliczany na współrzędne sferyczne r, θ, φ, podnoszony do potęgi n przez r→rⁿ, θ→nθ, φ→nφ, przekształcany z powrotem na kartezjańskie i przesuwany o oryginalny punkt c — odzwierciedlając wzór z→zⁿ+c z płaszczyzny zespolonej. Bieżąca pochodna dr śledzi, jak szybko sąsiednie punkty się rozbiegają, dając bezpieczny rozmiar kroku DE = 0,5·log(r)·r/dr, o który przesuwa się promień. Ucieczka poza promień bailout wcześniej oznacza większą odległość od powierzchni fraktala; liczba iteracji do ucieczki napędza następnie paletę kolorów, podczas gdy normalne, miękkie cienie i ambient occlusion cieniują wynik.
🔬 Co pokazuje
Kolczastą, koralowatą powierzchnię 3D zbudowaną w całości z czasu ucieczki iteracji z→zⁿ+c we współrzędnych sferycznych. Kolor powierzchni koduje, ile iteracji przetrwał dany punkt przed przekroczeniem promienia bailout, a oświetlenie pochodzi z przebiegu raymarchowanej normalnej, miękkiego cienia i przejścia ambient occlusion — wszystko obliczane na piksel, w każdej klatce, na GPU.
🎮 Jak korzystać
Przeciągnij płótno, aby obracać kamerę, i przewijaj, by przybliżać — obie czynności po prostu przesuwają punkt startowy promienia i macierz obrotu przekazywane do shadera. Potęga n przekształca fraktal (n=8 to kanoniczna „bulwa”), Max iteracji zamienia szczegółowość na szybkość, Bailout ustala próg ucieczki, Paleta zmienia kolorystykę liczby iteracji, a Jakość skaluje wewnętrzną rozdzielczość renderowania. Auto-obrót obraca widok; Zrzut ekranu zapisuje bieżącą klatkę jako PNG.
💡 Czy wiesz, że...
Żaden wzór nie daje idealnego trójwymiarowego odpowiednika dwuwymiarowego zbioru Mandelbrota — mnożenie liczb zespolonych nie ma czystego uogólnienia 3D — więc użyty tu wzór „triplex” z potęgą n jest przybliżeniem wymyślonym przez hobbystów ze społeczności Fractalforums i spopularyzowanym dopiero w 2009 roku, dekady po oryginalnym odkryciu Mandelbrota z 1980 roku.
Najczęściej zadawane pytania
Czym jest estymator odległości DE = 0,5·log(r)·r/dr i dlaczego raymarching go potrzebuje?
Raymarching przesuwa promień krok po kroku, aż trafi na powierzchnię, ale bez wiedzy, jak daleko ta powierzchnia się znajduje, potrzebowałby tysięcy drobnych, marnotrawnych kroków. Estymator odległości wykorzystuje promień r ze wzoru czasu ucieczki oraz jego skumulowaną pochodną dr, aby obliczyć matematycznie bezpieczną górną granicę tego, jak daleko promień może się przesunąć bez przekroczenia fraktala — shader tej symulacji przesuwa się dokładnie o tę odległość w każdym z maksymalnie 96 kroków, co umożliwia działanie w czasie rzeczywistym na zwykłych kartach graficznych.
Dlaczego zmiana potęgi n tak drastycznie zmienia kształt fraktala?
Potęga n kontroluje, ile razy współrzędne kątowe θ i φ są mnożone (θ→nθ, φ→nφ) oraz jak potęgowany jest promień (r→rⁿ) przy każdej iteracji z→zⁿ+c. Niewielkie zmiany n przesuwają granicę między punktami uciekającymi a pozostającymi ograniczonymi, co reorganizuje całą strukturę samopodobną — n=8 daje słynny bulwiasty, katedralny kształt będący domyślnym ustawieniem tej symulacji, podczas gdy inne wartości n między 2 a 12 dają zauważalnie inną liczbę płatów i inne tekstury powierzchni.
Czy istnieje matematycznie „prawdziwa” trójwymiarowa wersja zbioru Mandelbrota?
Nie — dwuwymiarowy zbiór Mandelbrota opiera się na mnożeniu liczb zespolonych, które ma czystą interpretację geometryczną (mnożenie modułów, dodawanie kątów), nieprzenoszącą się jednoznacznie na trzy wymiary. Wzór „triplex” we współrzędnych sferycznych — r→rⁿ, θ→nθ, φ→nφ — zaimplementowany w tym symulatorze jest jednym z kilku popularnych wyborów wśród konkurujących uogólnień 3D, cenionym za tworzenie bogatych, organicznych detali, a nie za bycie jedynym matematycznym rozszerzeniem oryginału.
Co właściwie robią suwaki Bailout i Max iteracji?
Bailout ustala promień ucieczki: gdy odległość punktu od początku układu przekroczy tę wartość (sprawdzane jako r² > bailout² w shaderze), uznaje się, że punkt uciekł i iteracja zostaje wcześniej przerwana. Max iteracji ogranicza, ile razy zastosowany zostaje wzór z→zⁿ+c, zanim zaniechana zostanie próba zbieżności. Punkty, które uciekają szybko, leżą daleko poza powierzchnią fraktala; punkty, które przetrwają cały budżet iteracji, są głęboko w jego wnętrzu — granica między tymi dwoma zachowaniami to powierzchnia fraktala renderowana przez raymarcher.
Dlaczego zwiększenie Max iteracji spowalnia liczbę klatek na sekundę, ale ujawnia drobniejsze detale?
Każdy krok raymarchingu wywołuje funkcję estymatora odległości, a ta funkcja sama w sobie wykonuje pętlę aż do bieżącej wartości Max iteracji, obliczając z→zⁿ+c i aktualizując pochodną dr. Więcej iteracji pozwala testowi czasu ucieczki rozróżniać coraz drobniejsze wzory blisko granicy fraktala, ale ponieważ ta wewnętrzna pętla działa dla każdego z około 96 kroków marszu na piksel, na klatkę, podwojenie budżetu iteracji w przybliżeniu podwaja obciążenie GPU i obniża licznik FPS widoczny w panelu Statystyk.
Mandelbulb 3D renderowany raymarchingiem na GPU w czasie rzeczywistym, z uczciwym estymatorem odległości de = 0.5·log(r)·r/dr. Zmieniaj potęgę n, aby przeobrażać kolczastą skorupę, ustaw liczbę iteracji i przełączaj palety.
3D · Silnik renderujący Three.js/WebGL · cel 60 FPS · działa w całości po stronie klienta, bez instalacji