GPU Renderovanie Fraktálov: Apollonian, Pseudo-Kleinian a Amazing Surface 3D
GPU Fractal Rendering: Apollonian, Pseudo-Kleinian and Amazing Surface 3D
Naša fraktálová aplikácia prešla zásadnou technologickou transformáciou. Celé renderovanie fraktálov sme presunuli na GPU pomocou Three.js a GLSL shaderov, čo prinieslo dramatický nárast výkonu a umožnilo pridanie troch nových fascinujúcich 3D fraktálov: Apollonian 3D, Pseudo-Kleinian 3D a Amazing Surface 3D.
Prečo GPU?
Pôvodná implementácia fraktálov bežala na CPU pomocou Rust/WebAssembly s multi-threadingom cez Web Workers. Hoci to poskytovalo slušný výkon, GPU prináša úplne inú úroveň paralelizmu. Moderná grafická karta dokáže vykonávať tisíce výpočtov súčasne – každý pixel sa počíta nezávisle na fragment shaderi.
Výsledok: Ray marching na GPU beží v reálnom čase aj pri vysokom rozlíšení. Rotácia, zoom a zmena parametrov sú okamžité – bez čakania na prepočet celého snímku.
Architektúra GPU renderera
GPU renderer je postavený na Three.js s custom GLSL fragment shadermi. Architektúra pozostáva z niekoľkých kľúčových komponentov:
- Three.js scéna – full-screen quad s ShaderMaterial, ktorý pokrýva celý viewport
- GLSL Fragment Shader – ray marching algoritmus bežiaci na každom pixeli paralelne
- SDF (Signed Distance Functions) – matematické funkcie definujúce povrch fraktálov implicitne
- Uniforms – parametre ako rotácia kamery, zoom, iterácie a farebné schémy prenášané z JavaScriptu do shaderu
Podporované fraktály na GPU
GPU renderer podporuje všetky typy fraktálov v aplikácii – 2D aj 3D:
- 2D: Mandelbrot, Julia, Multibrot, Tricorn, Burning Ship, Mandala
- 3D: Mandelbulb, Mandelbox, Quaternion Julia, Menger Sponge, Sierpinski 3D, Mandala 3D
- Nové 3D: Apollonian 3D, Pseudo-Kleinian 3D, Amazing Surface 3D
Nové 3D Fraktály
🔮 Apollonian 3D
Apolloniovská 3D gasketa je trojrozmerná verzia klasického Apolloniovho usporiadania kruhov. V 3D priestore sa rekurzívne balí nekonečné množstvo sfér do seba, pričom každá nová sféra sa dotýka predchádzajúcich. Výsledkom je hypnotická štruktúra pripomínajúca mimozemskú penu alebo kozmickú mriežku.
Parameter Depth (hĺbka) ovláda počet rekurzívnych úrovní – vyššie hodnoty vytvárajú hustejšie a detailnejšie balenie sfér. SDF pre Apollonian 3D využíva opakované inverzie a škálovania v priestore.
⛪ Pseudo-Kleinian 3D
Pseudo-Kleinianske fraktály sú inšpirované Kleinianskými grupami z hyperbolickej geometrie. Vytvárajú katedrálne tunely a nekonečné chodby s detailnými stenami plnými fraktálnych vzorcov. Je to ako prechádzka cez nekonečnú gotickú katedrálu.
Dva kľúčové parametre:
- Cage Size – veľkosť rekurzívnych komôr, ovláda šírku a výšku tunelov
- Drift – posúva štruktúru hlbšie, vytvára dramatickejšie perspektívy
🌊 Amazing Surface 3D
Amazing Surface je fraktál vytvorený opakovaným skladaním priestoru (box folding) a škálovaním. Výsledkom sú organické štruktúry pripomínajúce geologické útvary, morské koraly alebo mimozemské krajiny s nekonečnými detailmi.
Parametre:
- Fold Scale – ovláda hustotu rekurzívneho skladania; vyššie hodnoty vytvárajú komplexnejšie povrchy
- Surface Warp – ohýba zložené vrstvy do škrupinových a katedrálnych tvarov
Technológia v detaile
Ray Marching na GPU
Ray marching je renderovacia technika, pri ktorej sa z kamery vysiela lúč pre každý pixel obrazovky. Lúč „kráča" priestorom v krokoch, pričom veľkosť kroku je určená SDF (Signed Distance Function) – funkciou, ktorá vracia vzdialenosť k najbližšiemu povrchu. Keď vzdialenosť klesne pod prah, lúč „narazil" na povrch.
Na GPU beží tento algoritmus paralelne pre všetky pixely súčasne. To je zásadný rozdiel oproti CPU, kde sa pixely počítajú sekvenčne (aj pri multi-threadingu sú obmedzené na niekoľko jadier).
GLSL Shadery
Každý typ fraktálu má vlastnú SDF funkciu implementovanú v GLSL (OpenGL Shading Language). Fragment shader prijíma uniforms z JavaScriptu (pozícia kamery, rotácia, parametre fraktálu) a pre každý pixel vypočíta farbu na základe:
- Počtu ray marching krokov
- Vzdialenosti dopadu
- Normálového vektoru povrchu (pre osvetlenie)
- Zvolenej farebnej schémy
Výkonnostný skok
Prechod z CPU na GPU priniesol rádovo vyšší výkon:
- CPU (Rust/WASM): ~2-10 FPS pri 3D fraktáloch, závisí od rozlíšenia a zložitosti
- GPU (Three.js/GLSL): ~30-60 FPS pri rovnakých parametroch, plynulá interakcia
GPU renderer je teraz predvolený pre všetky podporované fraktály. Prepínač „Use GPU Renderer" umožňuje kedykoľvek prepnúť medzi CPU a GPU režimom.
Farebné schémy a efekty
Všetky farebné schémy fungujú aj na GPU vrátane:
- Relief (3D Light) – realistické Phong osvetlenie s difúznym a spekulárnym svetlom
- Rainbow – spektrálny gradient podľa iterácií
- Orbit Trap – neónové žiariace efekty s RGB slidrami
- Custom (6 farieb) – vlastná paleta s randomizáciou
- Animate Colors – plynulá animácia farieb v reálnom čase
Ovládanie 3D fraktálov
- Ľavé tlačidlo myši + ťahanie – rotácia 3D objektu
- Koliesko myši – priblíženie/oddialenie
- F11 – fullscreen režim
- 🔮 MYSTIFY ME – automaticky vygeneruje krásny fraktál
- Save Screenshot – uloženie ako PNG
- Record – nahrávanie videa animácie
Our fractal application has undergone a fundamental technological transformation. We moved the entire fractal rendering to the GPU using Three.js and GLSL shaders, bringing a dramatic performance increase and enabling three new fascinating 3D fractals: Apollonian 3D, Pseudo-Kleinian 3D and Amazing Surface 3D.
Why GPU?
The original fractal implementation ran on the CPU using Rust/WebAssembly with multi-threading via Web Workers. While this provided decent performance, the GPU brings an entirely different level of parallelism. A modern graphics card can perform thousands of calculations simultaneously – each pixel is computed independently on a fragment shader.
Result: Ray marching on the GPU runs in real-time even at high resolution. Rotation, zoom and parameter changes are instant – no waiting for full frame recalculation.
GPU Renderer Architecture
The GPU renderer is built on Three.js with custom GLSL fragment shaders. The architecture consists of several key components:
- Three.js scene – full-screen quad with ShaderMaterial covering the entire viewport
- GLSL Fragment Shader – ray marching algorithm running on each pixel in parallel
- SDF (Signed Distance Functions) – mathematical functions defining fractal surfaces implicitly
- Uniforms – parameters like camera rotation, zoom, iterations and color schemes transferred from JavaScript to the shader
Supported GPU Fractals
The GPU renderer supports all fractal types in the application – both 2D and 3D:
- 2D: Mandelbrot, Julia, Multibrot, Tricorn, Burning Ship, Mandala
- 3D: Mandelbulb, Mandelbox, Quaternion Julia, Menger Sponge, Sierpinski 3D, Mandala 3D
- New 3D: Apollonian 3D, Pseudo-Kleinian 3D, Amazing Surface 3D
New 3D Fractals
🔮 Apollonian 3D
The Apollonian 3D gasket is a three-dimensional version of the classic Apollonian circle packing. In 3D space, an infinite number of spheres are recursively packed into each other, with each new sphere touching the previous ones. The result is a hypnotic structure resembling alien foam or a cosmic lattice.
The Depth parameter controls the number of recursive levels – higher values create denser and more detailed sphere packing. The SDF for Apollonian 3D uses repeated inversions and scalings in space.
⛪ Pseudo-Kleinian 3D
Pseudo-Kleinian fractals are inspired by Kleinian groups from hyperbolic geometry. They create cathedral-like tunnels and infinite corridors with detailed walls full of fractal patterns. It's like walking through an infinite Gothic cathedral.
Two key parameters:
- Cage Size – size of recursive chambers, controls tunnel width and height
- Drift – pushes the structure deeper, creating more dramatic perspectives
🌊 Amazing Surface 3D
Amazing Surface is a fractal created by repeated space folding (box folding) and scaling. The result is organic structures resembling geological formations, sea corals or alien landscapes with infinite detail.
Parameters:
- Fold Scale – controls the density of recursive folding; higher values create more complex surfaces
- Surface Warp – bends folded layers into shell-like and cathedral shapes
Technology in Detail
Ray Marching on GPU
Ray marching is a rendering technique where a ray is cast from the camera for each pixel on the screen. The ray "marches" through space in steps, where the step size is determined by the SDF (Signed Distance Function) – a function that returns the distance to the nearest surface. When the distance drops below a threshold, the ray has "hit" a surface.
On the GPU, this algorithm runs in parallel for all pixels simultaneously. This is the fundamental difference from the CPU, where pixels are computed sequentially (even with multi-threading, they're limited to a few cores).
GLSL Shaders
Each fractal type has its own SDF function implemented in GLSL (OpenGL Shading Language). The fragment shader receives uniforms from JavaScript (camera position, rotation, fractal parameters) and for each pixel computes the color based on:
- Number of ray marching steps
- Hit distance
- Surface normal vector (for lighting)
- Selected color scheme
Performance Leap
The transition from CPU to GPU brought an order-of-magnitude performance increase:
- CPU (Rust/WASM): ~2-10 FPS for 3D fractals, depending on resolution and complexity
- GPU (Three.js/GLSL): ~30-60 FPS at the same parameters, smooth interaction
The GPU renderer is now the default for all supported fractals. The "Use GPU Renderer" toggle allows switching between CPU and GPU modes at any time.
Color Schemes and Effects
All color schemes work on the GPU including:
- Relief (3D Light) – realistic Phong lighting with diffuse and specular light
- Rainbow – spectral gradient based on iterations
- Orbit Trap – neon glowing effects with RGB sliders
- Custom (6 colors) – custom palette with randomization
- Animate Colors – smooth real-time color animation
3D Fractal Controls
- Left mouse button + drag – rotate 3D object
- Mouse wheel – zoom in/out
- F11 – fullscreen mode
- 🔮 MYSTIFY ME – automatically generate a beautiful fractal
- Save Screenshot – save as PNG
- Record – record animation video