Pełny pipeline 3DGS: (1) Inicjalizacja - z chmury punktów SfM (Structure from Motion, np. z COLMAP) na wejściowych zdjęciach tworzone są początkowe 3D Gaussie - każdy punkt SfM staje się małym Gaussem izotropowym. (2) Optymalizacja - iteracyjny gradient descent: dla każdej iteracji losowane jest zdjęcie treningowe, renderowany jest widok przez różniczkowalną rasteryzację (projekcja Gaussów do 2D, sortowanie back-to-front, alpha blending), obliczana strata L1 + SSIM + LPIPS względem ground truth, gradient propagowany przez rasteryzator do parametrów Gaussów (pozycja, kowariancja, SH, opacity). (3) Densification - co N iteracji: Gaussie o dużym gradiencie pozycji są klonowane (split, jeśli duże) lub duplikowane (clone, jeśli małe) aby zwiększyć gęstość w regionach niedoreprezentowanych. (4) Pruning - Gaussie o opacity <threshold lub zbyt dużym rozmiarze są usuwane, co utrzymuje ich liczbę pod kontrolą (typowo końcowe modele mają 1-5 mln Gaussów dla sceny). (5) Rendering inferencyjny - dla nowego widoku: Gaussy projektowane, sortowane per-tile w GPU, alpha-blending w screen space - w pełni rasteryzacyjne, bez neural network w krytycznej ścieżce. Klucz do jakości: użycie Spherical Harmonics (typowo do 3 stopnia = 16 współczynników per kolor RGB = 48 na Gauss) daje kolor zależny od kierunku widzenia (view-dependent) - odtwarza refleksje i BRDF-podobne efekty.
NeRF (Mildenhall et al. 2020) ustanowił nowy standard fotorealizmu w novel view synthesis, ale miał krytyczną wadę: wolne renderowanie. Klasyczny NeRF wymagał wielu setek zapytań do neural network per piksel - rendering pojedynczej klatki 1080p zajmował sekundy do minut na consumer GPU. Optymalizacje (Instant NGP, Plenoxels, MobileNeRF) skróciły ten czas, ale nadal nie osiągały real-time 30+ FPS przy zachowaniu jakości SOTA. Klasyczne meshy 3D z teksturami dają real-time, ale reprodukcja skomplikowanych zjawisk (włosy, mgła, refleksje, przezroczystości) była trudna lub niemożliwa. Gaussian Splatting rozwiązuje ten trilemat jakość-prędkość-wyrazistość: reprezentacja explicit (jak mesh) daje real-time rendering, ale ciągłe Gaussie z SH kolorem odtwarzają zjawiska trudne dla meshy, jednocześnie osiągając PSNR równy lub lepszy od najlepszych NeRF-ów.
Podstawowy element reprezentacji: elipsoidalna 'plama' w przestrzeni 3D. Parametryzacja: μ ∈ ℝ³ (pozycja), Σ ∈ ℝ³ˣ³ (kowariancja rozłożona na rotację jako quaternion + skalę), c(d) jako Spherical Harmonics (kolor zależny od kierunku d), α ∈ [0,1] (opacity). Typowa scena zawiera 1-5 mln takich prymitywów.
Oficjalna
Kernel CUDA implementujący tile-based rasterization z back-to-front alpha blending. Kluczowa część - projekcja 3D Gaussów do przestrzeni ekranu (2D), sortowanie per-tile, akumulacja koloru. Wspiera propagację gradientów wstecz do parametrów Gaussów.
Baza funkcyjna do reprezentacji koloru zależnego od kierunku patrzenia. W 3DGS zwykle do 3 stopnia (16 współczynników per kanał, 48 per RGB Gauss). Umożliwia oddanie refleksji, BRDF-podobnych efektów i view-dependent shading.
Oficjalna
Heurystyczna procedura wykonywana okresowo w treningu: analizuje gradient pozycji dla każdego Gaussa i klonuje/dzieli go gdy jest za duży, pruning'uje gdy opacity <ε. Utrzymuje liczbę Gaussów w ryzach (1-5M) i zapewnia adaptacyjną gęstość.
Oficjalna
Structure from Motion pipeline (najczęściej COLMAP) generujący z zestawu zdjęć: pozycje kamer + rzadką chmurę punktów 3D. Chmura ta jest inicjalizacją Gaussów (każdy punkt SfM = jeden mały Gauss). Krytyczne dla zbieżności - random init nie działa.
Oficjalna
3DGS silnie zależy od jakości chmury punktów COLMAP. Sceny z małą teksturą (białe ściany), zbyt małą liczbą zdjęć lub złymi kątami dają mizerne SfM points i uniemożliwiają dobrą rekonstrukcję.
Bez ograniczenia densification, sceny mogą urosnąć do 50M+ Gaussów (kilkanaście GB VRAM), co spowalnia trening i uniemożliwia deployment.
Oryginalny 3DGS ma widoczne artefakty (dilation, migotanie) gdy widok znacząco odbiega od kamer treningowych - Gaussie renderowane w innej rozdzielczości niż trenowane.
Ekstrakcja triangle mesh z 3DGS jest trudna - Gaussie są objętościami, nie powierzchniami. Naive marching cubes na densities daje mesh niższej jakości niż z NeRF.
Klasyczny 3DGS to per-scene optimization - każda nowa scena wymaga oddzielnego treningu 30-40 min. Nie ma feed-forward inference z jednego obrazu.
ECCV 2020 - implicit reprezentacja sceny jako MLP, fotorealistyczne novel view synthesis, ale wolny rendering. Poprzednik Gaussian Splattingu.
SIGGRAPH 2022 Best Paper - trening NeRF w sekundach zamiast godzin. Nadal wolny rendering.
SIGGRAPH 2023 Best Paper (arXiv 2308.04079) - real-time 30+ FPS na consumer GPU przy SOTA jakości PSNR. Explicit representation zamiast neural field.
ICLR 2024 - 2-minutowa generacja 3D asset z tekstu przez zastosowanie Score Distillation Sampling do 3DGS.
3DV 2024 - rozszerzenie 3DGS na sceny zmienne w czasie (dynamiczne obiekty, ruch).
SIGGRAPH 2024 - 2D dyski zamiast 3D elipsoid dla lepszej rekonstrukcji powierzchni i normalnych.
CVPR 2024 - rozwiązanie artefaktów zoom-in/zoom-out w oryginalnym 3DGS przez pre-filtering Gaussów.
CVPR/ECCV 2024 - amortyzacja treningu przez transformer feed-forward, generacja Gaussów w <1s zamiast 30 min.
Gaussian SLAM (Yugay et al.), Photo-SLAM - użycie 3DGS jako mapy dla nawigacji robotów i autonomous vehicles (Wayve, Waymo, Tesla).
Redukcja rozmiaru scen z ~700 MB do 10-50 MB przez discretization, hierarchie i learnable neural offset - kluczowe dla web/mobile deployment.
Złożoność czasowa: O(N · P + T · N_pixels). Złożoność przestrzenna: O(#Gaussians · 59).
Główne wąskie gardło: back-to-front sortowanie Gaussów per-tile (parallel radix sort na GPU) oraz alpha compositing. Rośnie liniowo z liczbą Gaussów rzutowanych na piksel. Anti-aliasing (Mip-Splatting) dodaje koszt.
Kluczowy hiperparametr sceny. Kontrolowany przez thresholdy densification/pruning.
Kontroluje bogactwo view-dependent color. Wyższy stopień = więcej refleksji, ale też więcej pamięci per Gauss.
Wpływa na jakość final PSNR i długość treningu.
Kontroluje jak agresywnie Gaussy są klonowane/dzielone. Niższy próg = więcej Gaussów, gęstsza scena.
Podczas rendering'u pixel-level: wybierane są tylko Gaussie widoczne w danym tile (frustum culling + tile assignment) - to sparse w sensie systemu (nie wszystkie Gaussy na każdym pikselu), ale dense w sensie wag (żadne parametry nie są pomijane).
Brak routingu ekspertów. Każdy Gauss uczony niezależnie, wszystkie widoczne w renderze aktywne w każdym passie.
Trening i inferencja masywnie równoległe na GPU. Tile-based rendering wykorzystuje pełną szerokość SM pipeline.
3DGS jest zaprojektowany pod CUDA. Kluczowe operacje (rasteryzacja tile-based, radix sort, alpha blending, backprop) są zoptymalizowane pod nowoczesne GPU. RTX 3090+ / A100+ / H100 dają real-time 30-100+ FPS w 1080p.
AMD RDNA3+ i Intel Arc mogą uruchamiać 3DGS przez porty (rocm, vulkan) - performance ~30-50% niższy niż CUDA. Apple Metal - dostępne przez porty (Brush z WebGPU).
CPU rendering 3DGS jest 100-1000x wolniejszy niż GPU - nieużyteczne dla real-time, tylko dla headless offline rendering.