Mandelbrotin 3D‑perilliset

Fraktaalimatkailijoille avautui joukoittain uusia maailmoja jokunen vuosi sitten, kun pitkään etsitty 3D-vastine vanhalle kunnon Mandelbrotin joukolle löytyi. Millaisia ovat Mandelbulb, Mandelbox ja niiden lukemattomat muunnelmat, ja kuinka niitä pääsisi itse tutkimaan?

Useimmat lukijat varmasti tunnistavat näöltä Mandelbrotin joukon — tuon kaksiulotteisen kuvion, jossa hieman lumiukkoa muistuttavasta keskuspallostosta erkanee joka suuntaan loputtomasti haarautuvia salamamaisia ulokkeita. Kyseessä lienee kaikkien aikojen suosituin fraktaali, joka on ehtinyt kiehtoa ihmismieliä jo kolme vuosikymmentä.

Mandelbrotin joukon löytäjinä voidaan pitää ranskalaisia Gaston Juliaa ja Pierre Fatouta, jotka tutkivat sen perustana olevaa matematiikkaa liki sata vuotta sitten. Kuvion muoto on kuitenkin turhan työläs laskea käsin, ja siitä saatiinkin aavistus vasta kun amerikanpuolalainen Benoît Mandelbrot ja muutamat muut matemaatikot ottivat avuksi tietokoneet 1970-luvun lopulla. Muutamien vuosien kuluttua Mandelbrotin ja Julian joukkojen kuvia päätyi myös kansantajuisiin tiedelehtiin ja sitä kautta myös tietokoneharrastajien ulottuville.

1980-luvun lopulla alkoi kotitietokoneille ilmestyä ohjelmia, joilla kuka tahansa pääsi itse kaivautumaan Mandelbrotin joukon uumeniin, eikä kuvien valmistumistakaan tarvinnut enää odottaa monta tuntia. Myös fraktaalikaavoja tuli ohjelmiin aina vain lisää pioneerihenkisimpien harrastajien kokeilujen tuloksena: suositussa Fractint-ilmaisohjelmassa oli 1990-luvun puolivälissä jo satakunta kaavaa lukemattomine säädettävine parametreineen. Fraktaali-innostus oli kuitenkin tuolloin jo hiipumassa, sillä fraktaalithan olivat vain jotain tylsää 2D-grafiikkaa, ja päivän sana oli kolmiulotteisuus!

Tokihan kolmiulotteista fraktaaligrafiikkaa oli ollut olemassa jo pitemmän aikaa. 2D-fraktaalit saattoi helposti piirtää korkeuskarttavuoristoiksi, ja Sierpinskin kolmiot muuntuivat hyvinkin kivuttomasti Sierpinskin pyramideiksi. Mandelbrotin joukon kaltaisille kompleksilukufraktaaleille ei sen sijaan tuntunut löytyvän tyydyttävän näköisiä, aitoja 3D-vastineita sitten millään. Vaikka esimerkiksi 4D-julioiden 3D-leikkausten muodonmuutokset olivatkin mielenkiintoista katsottavaa, eivät ne vedonneet inhimilliseen kauneudentajuun samalla tavoin kuin alkuperäisten 2D-julioiden pyörteet.

Marraskuussa 2007 päästiin vihdoin aidon 3D-Mandelbrotin jäljille, kun fraktaaliharrastaja Daniel White ehdotti fractalforums.com-sivustolla uudenlaista tapaa laajentaa Mandelbrotin kompleksilukumatematiikka kolmiulotteiseksi. Ensimmäiset uudella lähestymistavalla aikaansaadut kuvat olivat edelleen pienoinen pettymys, mutta uusi idea innosti silti monet muuntelemaan kaavaa. Vihdoin elokuussa 2009 matemaatikko Paul Nylander löysi jotain hätkähdyttävää: käyttämällä neliöönkorotuksen sijaan korkeampia potensseja alkoi kappaleeseen ilmestyä kasvimaisia ulokkeita, kiemurtelevia seittejä ja groteskeja suuaukkoja. Kahdeksannen potenssin kappale, jota voisi luonnehtia vaikkapa parsakaalin ja Giger-henkisen avaruusaluksen sekasikiöksi, sai nimekseen Mandelbulb.

Todellinen kultaryntäys alkoi sen jälkeen, kun Daniel White julkaisi kotisivullaan Mandelbulbia käsittelevän artikkelin lukuisine mieltäkiehtovine kuvineen. Monet halusivat innokkaasti tutkimaan tätä uutta fraktaalikappaletta, mutta valmiita ohjelmia ei ollut, joten aiheesta innostuneet päätyivät kirjoittamaan omia renderöijiään ja samalla myös kokeilemaan niissä erilaisia vaihtoehtoisia kaavoja ja muunnelmia. Puolalainen Krzysztof Marczak kehitti ajan myötä omasta renderöijästään monipuolisen työkalun, jonka hän julkaisi nimellä Mandelbulber. Tämänkin jutun 3D-fraktaalikuvat on tuotettu Mandelbulberilla.

Kuinka se toimii?

Vaikka fraktaaleja pystyykin valmisohjelmilla tutkiskelemaan ymmärtämättä mitään niiden matematiikasta, on tutkimusmatkailu huomattavasti antoisampaa, jos kaavojen toimintaperiaatteesta on jonkinlainen käsitys. Varsinkin Mandelbulber-ohjelma on täynnä parametreja ja nippeleitä, joita voi yrittää räplätä summanmutikassakin, mutta arvailut johtavat parempiin tuloksiin, jos käyttäjällä on jonkinlainen käsitys siitä, mitä nappuloista tapahtuu.

Mandelbrot-tyyppisissä fraktaaleissa on pohjimmiltaan kyse sen tutkimisesta, mitä luvuille — esimerkiksi pisteen x- ja y-koordinaateille — tapahtuu, kun niihin sovelletaan toistuvasti samaa laskukaavaa. Monet kaavat ovat suhteellisen tylsiä, esimerkiksi neliöönkorotus. Luvusta tietää jo etukäteen, karkaako se itsellään toistuvasti kerrottaessa äärettömyyksiin vai ei. Benoît Mandelbrotin tutkima kaava on sen sijaan huomattavasti ennustamattomampi, ja siinä karkaamisraja muodostaa loputtomasti kiemurtelevan fraktaalimuodon, jonka löytämiseksi on kaavaa toistettava joissakin pisteissä jopa kymmeniä kertoja.

Mandelbrotin toistokaava on lyhykäisyydessään z ← z² + c, missä z ja c ovat yksiulotteisten reaalilukujen sijaan kaksiulotteisia kompleksilukuja. Vakio c sisältää pisteen koordinaatit, ja z on muuttuja, jonka arvo on alussa sama kuin c. Perinteiset 2D-fraktaaliohjelmat käyvät läpi kuva-alueen jokaisen pikselin ja soveltavat niiden koordinaateille tätä kaavaa. Pikselin väri määräytyy yleensä pakoajasta eli siitä, kuinka monta kertaa kaavaa ehditään käyttää, ennen kuin koordinaatit karkaavat kuvion ulkopuolelle eli täyttävät ns. bailout-ehdon. Jotta ohjelma ei juuttuisi ikuiseen silmukkaan, on kierros- eli iteraatiomäärälle asetettava yläraja. Mitä korkeammaksi tämä raja asetetaan, sitä pienempiä yksityiskohtia kuviosta saadaan esiin, ja sitä pitempään myös kuvan piirtäminen kestää.

Julian joukoiksi kutsutut muodot syntyvät, kun toistokaavaa käytetään vaihtoehtoisella tavalla, jossa c on koko kuvion alueella sama. Näin esimerkiksi jokaisesta Mandelbrotin joukon pisteestä käsin voidaan laskea oma Julian joukkonsa. Varsinkin vanhoissa ohjelmissa esiintyy fraktaalityyppi nimeltä ”Julia”, joka tarkoittaa nimenomaan Mandelbrotin joukon Julia-vastineita, mutta Julian joukkoja voidaan johtaa mille tahansa fraktaalille, jonka toistokaavaan kuuluu samantapainen vakionsummaus (“+c-osa”) kuin Mandelbrotin kaavaan.

Useimmat ohjelmointikielet eivät tue kompleksilukuja suoraan, ja useimmille ihmisillekin kaava on helpompi ymmärtää, jos se kirjoitetaan auki x- ja y-koordinaateilla tapahtuviksi laskutoimituksiksi. Kun kaavaan z ← z² + c sijoitetaan z:n paikalle x + yi ja c:n paikalle x₀ + y₀i, missä i on kompleksilukujen määritelmän mukainen -1:n neliöjuuri, saadaan välivaiheiden jälkeen:

x ← x² – y² + x₀
y ← 2xy + y₀

Yksi syy, miksi Mandelbrotin joukon 3D-vastine oli niin vaikea löytää, oli se, että kompleksiluvuille ei ole aitoa kolmiulotteista vastinetta. Kompleksiluvut piti siis korvata jollain, joka tekisi samantapaiset laskutoimitukset kolmella koordinaatilla. Useimmat tätä yrittäneet lähestyivät ongelmaa turhan aritmeettisesti, kunnes Daniel White keksi ajatella asiaa enemmän geometrian kannalta. Kun kompleksiluku kerrotaan itsellään, se nimittäin kiertää nollapistettä siten, että luvun ja nollan välinen kulma kaksinkertaistuu. Samalla myös luvun etäisyys nollasta korottuu toiseen potenssiin. Whiten käyttämässä napakoordinaattiratkaisussa muotoa z ← zⁿ + c olevat toistokaavat kääntyvät muotoon

x ← rⁿsin(na)cos(nb) + x₀
y ← rⁿsin(na)sin(nb) + y₀
z ← rⁿcos(na) + z₀

missä (r, a, b) on edellisen kierroksen (x, y, z):n napakoordinaattiesitys.

Kuvat Mandelbrot-tyyppisistä 3D-fraktaaleista tuotetaan yleensä raymarching-menetelmällä, joka on erikoistapaus raytracingista eli säteenseurannasta. Menetelmässä kuva-alan kullekin pisteelle lasketaan kuvitteellinen valonsäteen saapumislinja ja edetään sitä pitkin askel kerrallaan poispäin, kunnes toistokaavan käyttö osoittaa, että ollaan törmätty fraktaalin seinämään. Tarvittavien askelten pituuksien arvioimiseksi on toistokaavasta yleensä johdettu sopiva etäisyydenarvioimiskaava, ja törmäyskohdassa lasketaan yleensä vielä pinnan normaalivektori varjostuksia ja heijastuksia varten. Ohjelmoinnillisista yksityiskohdista ja optimointitempuista kiinnostuneiden kannattaa tutustua 3D-fraktaalien kanssa paljon puuhailleen demo-ohjelmoija Iñigo Quilezin kotisivuihin.

Mandelbox ja muut muunnelmat

Mandelbulb on melkoisen raskas fraktaali laskettavaksi runsaan koordinaattien edestakaisin muuntelun vuoksi. Mandelbulbin löydyttyä monet grafiikkaohjelmoijat ryhtyivätkin etsimään laskennallisesti kevyempiä kaavoja, jotka tuottaisivat yhtä mielenkiintoista jälkeä. Menestyksekäs löytö oli fraktaaliharrastaja Tom ”Tglad” Lowen Mandelbox, jolla saa aikaan etenkin teknisen, futuristisen ja rakennustaiteellisen oloisia näkymiä.

Mandelboxin toistokaavassa tärkeä käsite on koordinaattien taittaminen eli folding, jossa koordinaatit ikään kuin pyritään pitämään origokeskisen kappaleen sisällä mutta sen verran bugisesti, että riittävän kauaksi joutunut piste karkaa kaikesta huolimatta ulos. Toistokaavaan kuuluu kaikkiaan kolme vaihetta: kuutiotaittovaiheessa pistettä sovitetaan kuution sisään, pallotaittovaiheessa pallon sisään, ja skaalausvaiheessa sen koordinaatit kerrotaan vakiolla ja niihin summataan alkuperäisen testattavan pisteen koordinaatit. Mitään standardimuotoa ei Mandelboxilla ole, mutta erilaisia vakioita käyttämällä kappaleen saa näyttämään niin borg-kuutiolta, futuristiselta kaupungilta kuin epämääräiseltä silpultakin.

Pian Mandelboxin löydyttyä Mandelbulberin kehittäjä Krzysztof Marczak huomasi, että Mandelbox-kaavan taittovaiheiden yhdistäminen Mandelbulb-kaavaan tuottaa mielenkiintoisia yhdistelmäfraktaaleja, joissa molempien fraktaalien ominaispiirteet yhdistyvät. Muodoista, joissa Mandelboxin pallotaittovaihe on korvattu Mandelbulbin toistokaavalla, on joskus käytetty nimitystä BulbBox.

Marczak on kehittänyt Mandelboxista myös pyöreämpimuotoisen muunnelman, joka löytyy Mandelbulber-ohjelmasta nimellä Smooth Mandelbox. Siinä Mandelboxin joko–tai-tyyppiset tiukat vertailut on korvattu pehmeämmillä siirtymillä, jotka tuovat kaavaan vielä muutaman säädettävän parametrin lisää.

Mandelbrotin lisäksi myös monia muita kaksiulotteisia pakoaikafraktaaleja on kokeiltu kolmiulotteistaa Whiten kaavalla. Kaikkiin se ei toimi kovin hyvin, mutta esimerkiksi vuonna 1992 löydetty Burning Ship muuntuu varsin mielenkiintoisen näköiseksi temppelikaupungiksi.

Mandelbrotin perillisiä on myös ristiinsiitetty aivan toisenlaisten matemaattisten muotojen, IFS-fraktaalien kanssa. Esimerkiksi Sierpinskin pyramidista saa hieman vähemmän tylsän näköisen, kun sen yhdistää Mandelboxin pallotaittoon.

Mandelbulber-ohjelman käyttö

Mandelbulber-ohjelman voi noutaa sen omalta kotisivulta osoitteesta mandelbulber.com. Se on tarjolla paitsi lähdekoodimuodossa, myös valmiiksi käännettyinä versioina Windowsille, Linuxille ja Macille. Tässä jutussa käsiteltävä versio 1.12.1 suorittaa kaiken laskentansa pääprosessoreilla, joten käytettävän näytönohjaimen suorituskyky ei sen toimintaa nopeuta. Vaihtoehtoinen ohjelmisto on Mandelbulb3d, joka on saatavilla ainostaan Windowsille.

Mandelbulberin käyttöliittymä on ohjelman kokeellisesta luonteesta johtuen melkoisen sekava, ja koska ohjelma on suunnattu uteliaille fraktaaliharrastajille, ei tarve parantaa sen ymmärrettävyyttä liene ollut niin suuri kuin tarve lisätä uusien kikkojen ja yhdistelymahdollisuuksien määrää. Pelkkä pintapuolinen kokeilu on kuitenkin melko helppoa.

Ohjelmaan latautuvat käynnistettäessä parametrit, joilla saadaan aikaan kokonäkymä Mandelbulbista. Kuva piirtyy renderöinti-ikkunaan, kun ohjelman käynnistämisen jälkeen napsauttaa käyttöliittymäikkunan ylänurkassa olevaa render-painiketta. Yksityiskohtia pääsee katsomaan lähempää klikkailemalla mielenkiintoisia kohtia renderöinti-ikkunasta. Takaisin kokokuvaan pääsee view-välilehden reset view -painikkeella.

Ohjelman mukana tulee myös lukuisia esimerkkejä, joiden parametrit voi ladata käyttöliittymäikkunan alareunan load example -painikkeella. Parametritiedoston lataamisen jälkeen on kuva vielä erikseen renderöitävä render-painikkeella. Esimerkkejä voi ja usein kannattaakin käyttää pohjana omille kokeiluilleen — esimerkiksi mielekkäiden IFS-parametrien keksiminen on melkoista lottoa, jos sen takana oleva matematiikka ei ole hallussa.

Fraktaalityyppi ja sen perusparametrit valitaan Fractal-välilehdeltä. Useilla tyypeillä on myös omia lisäparametrejaan, jotka löytyvät fraktaalin nimen mukaiselta välilehdeltä. Fractal-välilehden Folding-otsikon alta voi myös yhdistää Mandelbox-taittokaavat mihin tahansa fraktaaliin — esimerkiksi aiemmin mainittu BulbBox saadaan aikaan valitsemalla fraktaalityypiksi Mandelbulb ja kytkemällä kuutiotaitto eli ”Tglad’s folding mode” päälle. Jos kamerakulma jää fraktaalityypin vaihtamisen jälkeen huonoksi, sen saa melko usein palautettua tolkulliseksi reset view -toiminnolla.

Etenkin erilaisia parametreja kokeiltaessa ja sopivia kamerakulmia etsittäessä on kuvan koko hyvä vaihtaa Image-välilehden alta pienemmäksi, jottei vastetta tarvitse odottaa turhan pitkään. Renderöinti-ikkunan alalaidasta voi myös valita postimerkinkokoiselle kuvalle isomman skaalauskertoimen. Esimerkiksi 200×200-pikselisestä kuvasta skaalauskertoimella 4 saa jo varsin hyvän käsityksen siitä, onko näkymä kiinnostava ja kamerakulma kohdillaan.

Renderöinnin yhteydessä kuvasta tuotetaan myös pikselikohtaista varjostusdataa, minkä ansiosta kuvan värejä, tehosteita, heijastusten ja varjostusten voimakkuuksia ja joitakin muita parametrejä pystyy säätämään tarvitsematta tuottaa koko kuvaa uusiksi. Nämä säädöt löytyvät Shaders– ja Post effects -välilehdiltä. Monet esimerkeistä käyttävät syväterävyystehostetta (depth of field), joten jos kuva näyttää turhan sumealta, kannattaa käydä kytkemässä se pois päältä Post effects -välilehdeltä.

Tämä oli siis hyvin pikainen ja pintapuolinen katsaus Mandelbulberin käyttöön — esimerkiksi valaistus- ja animaatio-ominaisuudet jätettiin kokonaan käsittelemättä. 3D-fraktaalimaailmojen tutkiskeluun pääsee kyllä varsin hyvin uppoutumaan varsin perusteellisesti ilmankin.

Onnistuu se reaaliajassakin!

Samalla tavoin kuin reaaliaikaiset Mandelbrot-zoomaajat olivat valttia 1990-luvun puolenvälin demoskenessä, on nyt 2010-luvulla esiintynyt varsinkin pienikokoisissa PC-demoissa reaaliaikaista lentelyä laskennallisesti vaativissa 3D-fraktaaleissa. Nämä on käytännössä poikkeuksetta toteutettu shader-ohjelmointina, ja sulava näytönpäivitys vaatii näytönohjaimelta kovaa numeronmurskauskapasiteettia. Meille kohtuullisemman laitteiston käyttäjille on näistä demoista onneksi tarjolla myös videoversiot esimerkiksi YouTubessa.

Akronyme Analogiker: HARTVERDRAHTET (4K, Win32)

3D-fraktaalilentelyjä oli nähty jo ennen tätä Revision 2012 -tapahtuman 4K-demokilpailun voittanutta saksalaistuotosta, mutta ne tuntuivat vielä etsiskelevän tekniikkaa. Hartverdrahtet sen sijaan esittää fraktaalimaisemansa poikkeuksellisen tunnelmallisella ja mielikuvitusta kiehtovalla tavalla. Itse fraktaalikaava on Theli-At-tyyppinen hybridi, jonka parametrit muuttuvat kohtausten välillä.

TDA: EMBERS (1K, OSX)

The Digital Artists -ryhmän Embers osoittaa varsin selkeästi, että yksi kilotavu riittää Mandelbox-lentelylle Mac OS:llä, sillä fraktaalityyppi on helposti tunnistettavissa, eikä edes sen parametreja muunnella lentelyn aikana. Embers voitti Assembly 2012 -tapahtuman 1K-demokilpailun.

TBC: TRACELESS (1K, Win32)

1K-demon kakkossijalle päässyt TBC:n Traceless käyttää kilotavun tilan huomattavasti edistyneemmin kuin voittaja ja on yleisestikin parempi esitys. Demo sisältää varsin monipuolisen oloisen fraktaaliraytracerin ja tunnelmallisen ääniraidan, ja sen lentoradat ja valokontrastit miellyttävät silmää. Fraktaali muuntuu kaiken aikaa, ja siinä on havaittavissa eri vaiheissa sekä Sierpinski-tyyppisiä että orgaanisempia rakenteita.

Teksti: Ville-Matias Heikkilä
Kuvat: Ville-Matias Heikkilä, Tapio Berschewsky