Zobrazovanie viacrozmerných fraktálov

Bakalárska práca

Autor: Adrián Kocifaj

Kontakt: kocifaj3@uniba.sk

Školiteľ: Mgr. Andrej Mihálik, PhD.

Zadanie

Nie je jednoduché zobraziť objekty v priestore s dimenziou viac ako 3. Keď však uvážime pevný 3D objekt, tak okrem rozmerov v 3D priestore, vykazuje jeho vzhľad aj ďalšie atribúty ako je napríklad farba alebo priehľadnosť. S použitím volumetrického zobrazovania by sa takto dal priestor rozšíriť za hranicu 3D.

Cieľ

Vytvoriť rozhranie na vizualizáciu viacrozmerného fraktálu pomocou volumetrického zobrazovania.

Denník

Týždeň 1: 19.02. - 23.02.

Zoznamovanie sa s prácou a optimalizáciou jej implementácie, študovanie materiálov a vhodných techník zobrazovania fraktálov.


Týždeň 2: 26.02. - 01.03.

Práca a učenie sa so shadermi, vizualizácia 2D a 3D fraktálov.


2D Julia množina, 32 a 256 iterácií:

2D Julia set with 32 iterations 2D Julia set with 256 iterations

3D Mandelbulb, umocnené na 2, 4, a 8:

3D Mandelbulb, power of 2 3D Mandelbulb, power of 4 3D Mandelbulb, power of 8

Týždeň 3: 04.03. - 08.03.

Stretnutie so zadávateľom. Začiatok práce na webovej stránke ktorá bude urobená pomocou WebGL, v ktorej bude možná interakcia s fraktálmi, pohyb zbližovanie a podobne.


Týždeň 4: 11.03. - 15.03.

Pokračovaná práca so shadermi, zobrazenie fraktálu pomocou dlžky lúča nachádzaného sa vo fraktáli / celkový interval v ktorom je fraktál zobrazený, prevedené raymarchingom.

Black and white fractal based on volume inside fractal / the whole space

Raymarchingom zobrazený 4D fraktál, štvrtá dimenzia je v tomto prípade čas, môžeme vidieť na videu ako sa vyvýja, keď robíme 3D rezy v 4D priestore.



Týždeň 5: 18.03. - 22.03.

Práca na WebGL stránke, pridávanie kamery a pohybu na interakciu s fraktálom, integrácia knižnice Dear ImGui, uživateľské rozhranie pre používateľa, kde si môže vyberať parametre fraktálu.


Týždeň 4: 25.03. - 29.03.

Práca nakoniec urobená vo Visual Studio 2022 ako aplikácia, WebGL neposkytuje niektoré možnosti, preto toto rozhodnutie.


Týždeň 4: 01.04. - 05.04.

Implementovaný 3D priestor ako kocka interval <-1, 1> na ktorom zobrazujeme fraktál, teda všetko mimo tohto priestoru nemusíme počítať, veľká optimatlizácia zbytočných výpočtov, výber ľubovoľného intervalu na zobrazenie, umožňuje nám zbližovať si časti fraktálu a pozrieť sa na jeho detaily a nekonečne rozvíjajúcu sa štruktúru.


Týždeň 4: 08.04. - 12.04.

Namiesto neustáleho počítania priestoru pre každý jeden bod si najprv predpočítame všetky body a uložíme do pamäte, z ktorej potom tieto hodnoty vyberáme, hodnoty reprezentujeme ako voxely, ale iba ako dáta, ktoré nemajú žiadnu geometriu, index voxelu sa určuje podľa jeho miesta v zozname dát.


Týždeň 4: 15.04. - 19.04.

Efektívne prehľadávanie voxelového priestoru pomocou FAST VOXEL TRAVERSAL ALGORITHM, postupujeme po pixeloch a nie po malých hodnotách.


Týždeň 4: 22.04. - 26.04.

Implementácia používateľského rozhrania pomocou knižnice ImGUI, umožnená realtime zmena parametrov fraktálu, implementácia otáčania a zoom kamery pomocou FOV a YAW, PITCH uhlov.

UI of application, Julia set displayed

Týždeň 4: 29.04. - 03.05.

Prepisovanie kódu do novšej verzie OpenGL, pretože stará verzia nepodporuje compute shadre, na ktorých počítame hodnoty fraktálu (voxelov), namiesto CPU výpočty posielame na GPU, ktorá niekoľkonásobne zrýchli výpočet. Písanie prvých 10 strán bakalárskej práce.


Týždeň 4: 06.05. - 10.05.

Písanie bakalárskej práce, ešte doprepisovanie kódu na rozumné objekty a komunikáciu v OpenGL pipeline, efektívne vytváranie shader programu, vytvorenie vhodného objektu (textu), ktorý sa pošle ako .glsl kód na spracovanie, toto zabezpečí efektívnu prácu na tvorbu výpočtových súborov, ktoré sa pošlú na GPU, výhoda je nemusíme kopírovať rovnaký kód do rôznych súborov, pretože .glsl nepodporuje include alebo import, preto jednotlivé súbory vytvárame zlučovaním stringov ktoré obsahujú .glsl kód.




Zdroje