Rozszerzanie zbioru Mandelbrota do trzech wymiarów
Klasyczny zbiór Mandelbrota tworzy się na podstawie jednego reguły stosowanej do liczb zespolonych: powtarzane kwadratowanie punktu z i dodawanie punktu początkowego c, a następnie obserwacja, czy sekwencja pozostaje ograniczona lub ucieka w nieskończoność. Ta reguła istnieje naturalnie w dwóch wymiarach, ponieważ liczby zespolone tworzą dwuwymiarową system liczb. Nie ma trójwymiarowego systemu liczb o tak samych prostej algebraicznej własnościach, dlatego prosty rozszerzeni do trzech wymiarów nie istnieje — co jest dokładnie przyczyną, dla której pracowalna wersja 3D, Mandelbulb, nie została znaleziona aż do 2009 roku, odkryta przez Daniela White'a i Paula Nylander'a po latach poszukiwań w społeczności fraktalistycznej.
Triplekskie liczby i ogólne potęgowanie
Ich rozwiązanie traktuje punkt w przestrzeni trójwymiarowej jako liczbę triplexową w postaci sfericznej, a następnie definiuje na niej operację ogólnej potęgowania, która redukuje się do zwykłego kwadratowania zespolonego w przypadku ograniczenia do przekroju dwuwymiarowego. Dla punktu o promieniu sferycznym r, kącie polarnym θ i kącie azymutalnym φ, podnoszenie go do n-tej potęgi skali promień do r^n i pomnoży oba kąty przez n, a następnie przekształca je z powrotem do współrzędnych kartezjańskich:
potęgowanie triplexowe (postać sferyczna): r' = r^n θ' = n × θ φ' = n × φ temiz: z_next = (potęgowanie triplexowe z) + c, iterowane dokładnie tak jak w przypadku Mandelbrota dwuwymiarowego z → z² + c Dla n = 2 ta operacja nie jest identyczna z potęgowaniem kwaternionowym lub innymi historycznymi próbowaniami rozszerzenia na przestrzeń trójwymiarową — została ona konstruowana w celu wygenerowania struktury bogatej, bulbozawowej i samopodobnej. Standardowa, najbardziej znaną Mandelbulb używa n = 8, co prowadzi do owalnych, organicznych lobów, które większość obrazów tego typu pokazuje.
triplex power (spherical form): r' = r^n θ' = n × θ φ' = n × φ then: z_next = (triplex power of z) + c, iterated exactly like the 2D Mandelbrot's z → z² + c
Renderowanie: szacowanie odległości zamiast wielokątów
Nie można bezpośrednio siatkować granicy Mandelbulba — jest to niemal nieskończenie szczegółowy fraktal, dla którego nie ma prostej aproksymacji wielokątowej — zatem renderowany jest za pomocą raymarchingu szacowanego funkcji odległości zamiast rysowania trójkątów. Dla każdego piksela odbijany jest promień od kamery, a następnie powtarzane jest przesuwanie go o szacowana odległość do najbliższej powierzchni, co jest bezpieczne, ponieważ szacowanie jest granicznym ograniczeniem: krok o tą samą odległość nigdy nie może przekroczyć powierzchni. W przypadku Mandelbulba, ta szacowana odległość na piksel jest wyliczana analitycznie z iteracji czasu ucieczki:
de = 0.5 × log(r) × r / dr r = bieżący promień ucieczki |z| po pętli iteracji dr = bieżąca pochodna |z| akumulowana wraz z każdym krokiem iteracji przesuń promień o de; powtarzaj, aż odległość de będzie mniejsza niż próg (trafia) lub promień ucieczki Jest to taka sama technika jak sphere tracing używana do renderowania każdego innego fraktalu analitycznego i powierzchni niejawnych na tej stronie — konwertuje ona powierzchnię zdefiniowaną równaniem na obraz bez potrzeby wcześniejszego znalezienia kształtu powierzchni.
de = 0.5 × log(r) × r / dr r = current escaped radius |z| after the iteration loop dr = running derivative of |z| accumulated alongside each iteration step the ray forward by de; repeat until de is smaller than a threshold (hit) or the ray escapes
Co rzeczywiście zmienia przycisk mocy
Bo n progresywnie skaluje szybkość wzrostu promienia i obu kątów w każdej iteracji, zmiana n wpływa zarówno na liczbę łopatek wokół kształtu, jak i głębokość rekurencji szczegółów powierzchniowej przed ucieczką do nieskończoności. Niskie wartości n bliskie 2 tworzą mniej samospodobne, gładkie i bardziej kuliste kształty bliższe esencji sfery; klasyczna wartość n = 8 tworzy znany wielokątowy błąd. Podnoszenie wartości n dodaje więcej, skórzanych łopatek oraz szczegółowe, powtarzalne szczegóły powierzchniowe, co kosztuje się potrzebą większej liczby kroków raymarchingu i szerszego próg odległości do uzyskania czystego rozwiązania, ponieważ powierzchnia staje się w lokalnym zakresie ostrojsza w stosunku do tej samej liczby iteracji.
Często zadawane pytania
Dlaczego 3D zestaw Mandelbrota nie został znaleziony aż do 2009 roku, kilkaset lat po wersji 2D?
Złożone liczby dają naturalną strukturę algebraiczną zestawowi Mandelbrota 2D — mnożenie i dodawanie są dobrze zdefiniowanymi operacjami, które zachowują kąty i skali sensownie. Nie istnieje równoważna system liczbowy w trzech wymiarach z takimi samymi własnościami, dlatego proste 3D analogie nie wynikają z matematyki tak jak w przypadku 2D; Mandelbulb to zamiast tego zmyślonie uogólnione działanie potęgowania zaprojektowane do tworzenia porównywalnie bogatej fraktali, a nie bezpośrednia rozszerzenie algebraiczne.
Dlaczego Mandelbulb jest renderowany metodą raymarching zamiast budowania 3D siatki?
Granica jego powierzchni to nieskończenie szczegółowa fraktalna powierzchnia bez bezpośredniej aproksymacji wielokątowej, dlatego nie ma czegoś do meshingu. Metoda raymarching zamiast tego przesuwa każdy piksel o odległość wyznaczoną na podstawie iteracji czasu ucieczki, bezpiecznie zbliżając się do powierzchni stopniowo bez potrzeby listy wierzchołków.
Jak wpływa zmiana wartości n na kształt?
Zmienia ona szybkość wzrostu promienia i kątów podczas każdej iteracji, co wpływa zarówno na liczbę łopatek, jak i na ilość szczegółowej fraktalnej detali przed ucieczką. Canoniczny Mandelbulb używa wartości n = 8; niższe wartości wyglądają bardziej kuliste i mniej szczegółowe, a wyższe wartości zawierają więcej, skórzanych łopatek oraz lepszej szczegółowości powierzchni.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Mandelbulb 3D Fractal i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Mandelbulb 3D Fractal