Renderowanie wokselowe to metoda generowania obrazów 3D, w której przestrzeń jest reprezentowana przez siatkę regularnych sześcianów — wokseli (ang. voxels, skrót od volumetric pixels). W odróżnieniu od tradycyjnego rasteryzmu operującego na siatkach trójkątów, podejście wokselowe przechowuje dane o całej objętości sceny, co otwiera szereg możliwości niedostępnych w geometrii powierzchni.

Śledzenie promieni — raytracing w scenie 3D
Przykład renderowania śledzenia promieni (raytracing) — każdy piksel obliczany jest przez rzucenie promienia ze źródła kamery. Źródło: Wikimedia Commons (CC)

Ray Casting — podstawy renderowania wokselowego

Ray casting to najstarsza i koncepcyjnie najprostsza technika renderowania wokselowego. Dla każdego piksela obrazu wynikowego rzucany jest promień ze źródła kamery w kierunku sceny. Promień przesuwa się przez siatkę wokseli, próbkując wartości w regularnych odstępach lub w momentach wejścia do kolejnych komórek siatki.

Algorytm DDA (Digital Differential Analyzer) jest standardową metodą śledzenia promienia przez siatkę — efektywnie oblicza odległości do kolejnych granic komórek bez potrzeby kosztownych operacji trygonometrycznych. John Amanatides i Andrew Woo opisali tę metodę szczegółowo w artykule A Fast Voxel Traversal Algorithm for Ray Tracing (1987), który pozostaje podstawowym odniesieniem w implementacjach voxel ray castingu.

W klasycznej implementacji bez oświetlenia, renderowanie wokselowe przez ray casting ma złożoność O(n) w stosunku do długości osi siatki — co przy siatkach 512³ i wyżej staje się obliczeniowo intensywne. Stąd konieczność struktur przyspieszających.

Sparse Voxel Octree — hierarchia w przestrzeni

Pełna siatka wokseli ma kubiczną złożoność pamięciową: siatka 1024³ wokseli przy 4 bajtach na woksel wymaga 4 GB pamięci. Sparse Voxel Octree (SVO) rozwiązuje ten problem przez hierarchiczne dzielenie przestrzeni i przechowywanie tylko niezerowych liści drzewa.

W strukturze octree każdy węzeł może być podzielony na 8 dzieci (stąd nazwa). Puste obszary przestrzeni zajmują tylko jeden węzeł bez dzieci, niezależnie od głębokości hierarchii. Dla typowych scen, gdzie duże obszary są puste, SVO osiąga oszczędność pamięci rzędu 90–99% w porównaniu do pełnej siatki.

struct OctreeNode { uint32_t childMask; // 8 bitów — które dzieci istnieją uint32_t childPtr; // wskaźnik do pierwszego dziecka uint32_t leafData; // dane jeśli węzeł jest liściem };

NVIDIA opublikowała w 2010 roku artykuł Efficient Sparse Voxel Octrees (Laine, Karras), opisując implementację SVO zoptymalizowaną pod GPU z akceleracją CUDA. Implementacja ta pozwoliła na renderowanie scen wokselowych w czasie zbliżonym do rzeczywistego na ówczesnych kartach GTX 480.

Ray Marching i Signed Distance Fields

Ray marching to technika renderowania oparta na iteracyjnym przesuwaniu promienia wzdłuż jego kierunku. W odróżnieniu od ray castingu, krok przesunięcia nie jest stały — jest wyznaczany przez funkcję odległości (Signed Distance Field, SDF), która dla każdego punktu w przestrzeni zwraca odległość do najbliższej powierzchni.

Wartość SDF dodatnia oznacza, że punkt jest na zewnątrz obiektu, ujemna — wewnątrz, zerowa — na powierzchni. Promień może bezpiecznie przesunąć się o wartość SDF w danym punkcie bez ryzyka pominięcia powierzchni. Ta obserwacja — znana jako sphere tracing (John C. Hart, 1994) — czyni ray marching efektywnym dla złożonych i proceduralnie generowanych kształtów.

SDF jest podstawą renderowania w shaderach GLSL/HLSL bez tradycyjnej geometrii. Shadery opisujące sceny wyłącznie przez funkcje odległości są powszechne w demoscenie i na platformach jak Shadertoy (shadertoy.com).

Techniki hybrydowe

Nowoczesne silniki graficzne często łączą rendering wokselowy z rasteryzmem. NVIDIA Voxel Global Illumination (VXGI), wprowadzone w Unreal Engine 4, używa wokseli do symulacji oświetlenia globalnego — scena jest wokselizowana w czasie rzeczywistym, a następnie używana do obliczania cone tracing dla ambient occlusion i indirect lighting.

VXGI — schemat działania

  1. Scena jest renderowana rasteryzmem do G-buffera (pozycja, normalna, albedo)
  2. Geometria jest wokselizowana do siatki 3D (zwykle 128³ lub 256³)
  3. Woksele przechowują dane o radiancji i zasłonięciu
  4. Cone tracing przez strukturę wokselową aproksymuje oświetlenie pośrednie

Podejście hybrydowe pozwala zachować wydajność rasteryzmu dla geometrii przy jednoczesnym korzystaniu z fizycznie bardziej poprawnego oświetlenia globalnego z reprezentacji wokselowej.

Renderowanie wolumetryczne

Rendering wolumetryczny (ang. volume rendering) to technika wizualizacji trójwymiarowych danych skalaru — gęstości, temperatury, wilgotności. Stosowana w medycynie (wizualizacja CT i MRI), meteorologii i VFX.

Algorytm ray casting dla danych wolumetrycznych próbkuje wartości skalara wzdłuż promienia i akumuluje kolor oraz przezroczystość przez tzw. compositing. Dwie główne metody:

  • Maximum Intensity Projection (MIP): Wyświetla najwyższą wartość skalara wzdłuż każdego promienia. Używana w angiografii CT do wizualizacji naczyń krwionośnych.
  • Alpha compositing (front-to-back): Akumuluje kolor i przezroczystość od przodu do tyłu sceny, symulując semi-transparentne media jak dym czy mgła.

Format OpenVDB, opracowany przez DreamWorks Animation i udostępniony open-source w 2012 roku, stał się standardem branżowym do przechowywania danych wolumetrycznych VFX. Blender, Houdini i Nuke obsługują natywnie import i export .vdb.

Zastosowania renderowania wokselowego

Renderowanie wokselowe ma zastosowania w wielu dziedzinach:

  • Gry wideo: Minecraft używa renderowania wokselowego jako modelu rozgrywki (nie jako metody graficznej). Gry jak 7 Days to Die, Teardown i Space Engineers używają pełnych silników wokselowych umożliwiających destrukcję terenu.
  • VFX filmowe: Efekty ognia, dymu, chmur w filmach animowanych (Pixar, DreamWorks) są generowane jako wolumeny i renderowane przez silniki jak RenderMan (Pixar) lub Arnold (Autodesk).
  • Wizualizacja medyczna: Tomografia komputerowa i MRI produkują trójwymiarowe siatki wokseli. Programy ITK-SNAP i 3D Slicer pozwalają na wolumetryczną wizualizację danych klinicznych.
  • Architektura i GIS: Dane LiDAR z sensorów laserowych (drony, samochody LIDAR) są przechowywane i wizualizowane jako chmury punktów lub woksele w programach jak CloudCompare i QGIS.

Zasoby techniczne: Specyfikacja i kod źródłowy OpenVDB są dostępne pod adresem openvdb.org. Dokumentacja algorytmu Amanatidesa-Woo dostępna w IEEE Computer Graphics and Applications (Vol. 7, 1987).