Grafika wolumetryczna to dział grafiki komputerowej zajmujący się reprezentacją i renderowaniem trójwymiarowych danych zajmujących pewną objętość — w odróżnieniu od grafiki powierzchniowej operującej na siatce wielokątów. Fundamentem wolumetryki są struktury danych dostosowane do wydajnego przechowywania i przeszukiwania gęstych lub rzadkich danych przestrzennych.
Octree — hierarchiczny podział przestrzeni
Octree (drzewo ósemkowe) to podstawowa struktura danych dla trójwymiarowej przestrzeni rzadkiej. Przestrzeń jest rekurencyjnie dzielona na osiem równych sześcianów (oktantów), aż do osiągnięcia minimalnego rozmiaru voksela lub pustego obszaru, który nie wymaga dalszego podziału.
Warianty octree stosowane w grafice wokselowej:
- Region Octree: Standardowa wersja — każdy węzeł reprezentuje sześcian o połowę mniejszy od rodzica.
- Pointer-based Octree: Każdy węzeł zawiera wskaźniki do dzieci. Elastyczny, ale wolny w dostępie (cache miss).
- Implicit/Linear Octree: Węzły przechowywane w tablicy z indeksowaniem przez Z-order curve (Morton code). Przyjazny pamięci podręcznej GPU.
- Sparse Voxel DAG: Directed Acyclic Graph — identyczne poddrzewa są współdzielone, co daje kolejne redukcje pamięci dla scen z powtarzającymi się strukturami.
Bounding Volume Hierarchy (BVH)
BVH to struktura akceleracyjna dla ray tracingu — organizuje prymitywy geometryczne (trójkąty, woksele) w hierarchiczne pudełka obrysowe (AABB — Axis-Aligned Bounding Box). Promień jest testowany najpierw z pudełkami, a tylko w przypadku trafienia przechodzi do szczegółowego testu przecięcia z zawartością.
Jakość BVH zależy od strategii podziału. Najczęściej stosowane:
- SAH (Surface Area Heuristic): Minimalizuje koszt renderowania przez wybór podziału minimalizującego iloczyn prawdopodobieństwa trafienia i liczby prymitywów. Standard w rendererach offline (Embree Intel, OptiX NVIDIA).
- LBVH (Linear BVH): Sortuje prymitywy po kodach Mortona, co umożliwia budowę na GPU w czasie O(n log n). Szybka budowa kosztem nieco gorszej jakości.
NVIDIA RTX wprowadza sprzętowe wsparcie dla BVH traversal w GPU — jednostki RT Core obliczają przecięcia promień-AABB i promień-trójkąt sprzętowo, redukując obciążenie CUDA cores. Interfejsy DXR (DirectX 12 Ultimate) i Vulkan Ray Tracing eksponują tę funkcjonalność.
Signed Distance Fields (SDF)
Signed Distance Field to trójwymiarowa siatka przechowująca dla każdego punktu przestrzeni odległość do najbliższej powierzchni ze znakiem: dodatnim na zewnątrz, ujemnym wewnątrz obiektu. SDF pozwala na wydajne operacje logiczne na obiektach (Boolean: union, intersection, subtraction) przez proste operacje min/max na wartościach pola.
Zastosowania SDF:
- Ray marching: Renderowanie scen SDF przez sphere tracing bez jawnej geometrii
- Kolizje fizyczne: Detekcja i odpowiedź na kolizje przez próbkowanie SDF
- Morphing kształtów: Liniowa interpolacja dwóch SDF daje płynne przejście między kształtami
- Font rendering: Multi-Channel SDF (MSDF) od Viktora Chlumský'ego pozwala na skalowalne renderowanie fontów z jednej tekstury
Marching Cubes i ekstrakcja powierzchni
Marching Cubes to algorytm generowania siatki trójkątów (izopowierzchni) z trójwymiarowych danych skalarnych — w tym z siatek wokseli i SDF. Opracowany przez Williama Lorensena i Harvey'a Cline'a w Laboratorium General Electric Research w 1987 roku i opublikowany na konferencji SIGGRAPH.
Dla każdej komórki siatki (sześcianu o 8 wierzchołkach) algorytm określa, które wierzchołki są powyżej, a które poniżej progu izowartości. 256 możliwych konfiguracji (2^8) jest zredukowanych przez symetrie do 15 unikalnych wzorców. Dla każdego wzorca definiowana jest konfiguracja trójkątów aproksymujących przebieg izopowierzchni przez komórkę.
Algorytm ma pewne ograniczenia — w niektórych konfiguracjach generuje wieloznaczne topologie (tzw. ambiguous cases). Marching Tetrahedra rozwiązuje ten problem przez podział sześcianu na tetraedry, kosztem większej liczby trójkątów.
Zastosowania w wizualizacji medycznej
Tomografia komputerowa (CT) i rezonans magnetyczny (MRI) produkują serie dwuwymiarowych przekrojów tworzących trójwymiarową siatkę wokseli. Każdy woksel ma wartość odpowiadającą gęstości tkanki (CT: jednostki Hounsfielda; MRI: intensywność sygnału).
Programy do wizualizacji medycznej:
- 3D Slicer (slicer.org) — open-source, obsługuje DICOM, ITK, VTK, segmentację i rendering wolumetryczny
- ITK-SNAP — specjalizowany w segmentacji obrazów medycznych
- OsiriX / Horos — macOS, standard w radiologii klinicznej, obsługa DICOM
- ParaView — open-source, wizualizacja naukowa i inżynierska, obsługuje VTK
Segmentacja — podział wokseli na regiony odpowiadające różnym tkankom lub organom — może być ręczna, semi-automatyczna (seed-based region growing) lub automatyczna (sieci neuronowe U-Net). Wyodrębnione regiony mogą być eksportowane jako siatki (STL, OBJ) do druku 3D implantów lub planowania chirurgicznego.
Formaty wolumetrycznych danych
Grafika wolumetryczna korzysta z kilku wyspecjalizowanych formatów:
- OpenVDB (.vdb): Hierarchiczna siatka rzadka, standard VFX. Obsługa: Houdini, Blender, Nuke, Katana. Specyfikacja open-source: openvdb.org
- DICOM (.dcm): Standard medyczny — przechowuje dane obrazowania z metadanymi klinicznymi. Specyfikacja: dicomstandard.org
- NIfTI (.nii): Format neuroimagingu — prostsza alternatywa dla DICOM w badaniach akademickich
- VTK (.vtu, .vtp): Format biblioteki Visualization Toolkit, obsługuje siatki niestrukturalne i skalarne pola wolumetryczne
- HDF5 (.h5): Hierarchiczny format danych naukowych — stosowany w symulacjach CFD i badaniach klimatycznych
Open-source: Blender od wersji 3.0 obsługuje natywne importowanie plików .vdb przez wbudowaną obsługę OpenVDB. Dokumentacja: docs.blender.org
Symulacja fizyczna i dane wolumetryczne
Symulatory płynów i gazów pracują naturalnie w reprezentacji wolumetrycznej. Metoda SPH (Smoothed Particle Hydrodynamics) i metody oparte na siatce Eulera (FLIP, PIC) generują dane wolumetryczne opisujące prędkość, gęstość i temperaturę cieczy w każdym punkcie przestrzeni.
Houdini od SideFX jest standardem branżowym dla symulacji VFX — zawiera solwery do symulacji ognia (Pyro), płynów (FLIP Fluid) i cząstek. Wyniki symulacji są eksportowane jako sekwencje plików .vdb do renderowania w RenderMan, Arnold lub Redshift.