Rozdział 6 — Konfiguracja treningu

Typowy eksport presetu do JSON. Pola najwyższego poziomu: id (UUID), name, (classic | mcmc | sceneClass | custom), (wersja schematu), (znacznik czasu), (dowolny tekst). Zagnieżdżony -obiekt zawiera parametry krytyczne dla powtarzalności — podczas importu cały blok jest wczytywany do konfiguracji treningu, a wartości domyślne z wersji aplikacji wypełniają pola, których brakuje w JSON (np. po aktualizacji aplikacji). Kto przekazuje preset na inny Mac, po prostu wysyła ten plik JSON.
Konfiguracja treningu jest sercem każdego przebiegu treningu w RadianceKit. Gromadzi każdy parametr, który wpływa na trening — od maksymalnej liczby iteracji, przez osiem współczynników uczenia, aż po pola specjalne dla MCMC, Mip-Splatting, Curriculum i logiki scene-aware Cap. Edytujesz ją w panelu bocznym, w sekcji konfiguracji treningu (widok Expert View), zapisujesz jako Preset lub przekazujesz jako eksport JSON na inny Mac. Podczas treningu dokładnie ten obiekt zostaje zamrożony i przekazany do backendu GPU.
Ten rozdział jest materiałem referencyjnym dla zaawansowanych użytkowników. Zawiera listę 80 konfigurowalnych pól konfiguracji treningu, 9 dołączonych presetów oraz zależne od sceny rozwiązanie Gaussian-Cap. W razie wątpliwości obowiązuje wartość ustawiona przez wybrany Preset — widzisz ją w Inspectorze lub w eksporcie JSON presetu.
Spis treści:
+ Iteracja (T1–T2) + Współczynniki uczenia (T3–T10) + Densification — Classic (T11–T16) + Loss (T17–T20) + SH-Degree-Progression (T21) + Wydajność (T22–T24) + Diagnostyka i przygotowanie chmury punktów (T26–T30) + Regularyzacja (T31–T37) + Refinement (T38–T44) + Sky-Dome (T45–T48) + Adam + LR-Schedule (T49–T55) + Post-processing + Apple AI (T56–T60) + MCMC-Densification (T61–T73) + Mip-Splatting (T74–T76) + Adaptacyjna Densification (T77–T79) + Curriculum (T80–T81) + Statyczne Presety (TP1–TP9) + Jak aplikacja określa Gaussian-Cap + Które pole do czego? (Cheat-Sheet) + Niebezpieczne pola
Iteracja (T1–T2)
T1maxIterations
SZCZEGÓŁY
Domyślnie: 30 000 (Initializer), 35 000 (.full), 200 000 (.fullMCMC) Zakres: 1 000 – 500 000 (suwak UI), brak twardej górnej granicy w logice
TECHNICZNIE
Całkowita liczba iteracji treningowych, przez które przechodzi backend. Iteracja oznacza jedno renderowanie w przód (forward) pojedynczej kamery treningowej, jeden przebieg wsteczny (backward) przez wszystkie składowe funkcji straty (L1 + SSIM + opcjonalne regularyzacje + maska nieba) oraz jeden krok optymalizatora Adam. Ta liczba wpływa bezpośrednio na inne harmonogramy: tempo uczenia pozycji podąża za krzywą cosine-annealing od 0 do wartości T1 samej lub do T50 positionLRScheduleEndIteration; densyfikacja zatrzymuje się przy T2 densifyUntilIteration; zanik szumu MCMC (noise decay) kończy się przy T69 mcmcNoiseDecayEnd; podniesienia stopnia SH następują w trzech punktach zdefiniowanych w T21. Przy klasycznej densyfikacji sprawdzony zakres to 20 000–35 000 iteracji, przy MCMC 60 000–200 000. Drastyczne zwiększenie ponad wartości zapisane w presetach rzadko przynosi dodatkową jakość — moment Adama się nasyca, a bez zakończenia zaniku tempa uczenia (LR-decay) strata stagnuje. Odwrotnie, zejście poniżej ~5 000 prowadzi do niecałkowicie zbieżnych geometrii (kontrola gęstości ma zbyt mało czasu na klonowanie/dzielenie).
T2densifyUntilIteration
SZCZEGÓŁY
Domyślnie: 15 000 (Initializer), 5 000 (.full), 160 000 (.fullMCMC) Zakres: 0 – T1 maxIterations
TECHNICZNIE
Iteracja, po której densyfikacja się zatrzymuje. Do tego momentu Gaussiany są klonowane, dzielone i przycinane (pruning) według reguł parametryzowanych w T11–T16 (Classic) lub T67–T70 (MCMC); potem liczba Gaussianów pozostaje stała i optymalizowane są już tylko pozycje, rotacje, skale, nieprzezroczystości i współczynniki SH (faza dopracowywania — refinement). W oryginalnej pracy 3DGS wartość ta wynosi 50% wartości T1, w presecie .full RadianceKit tylko ~14% (5 000 z 35 000): po około 5 000 iteracjach dalsza densyfikacja raczej pogarsza wynik — więcej „floaterów", większe zapotrzebowanie na pamięć, brak zysku jakościowego. MCMC natomiast pozwala relokacji trwać do 80% wartości T1, ponieważ MCMC nie produkuje szkodliwych floaterów. Zbyt małe T2 (< 1 000) skutkuje zbyt małą liczbą Gaussianów; zbyt duże przy Classic (> 50% T1) prowadzi do nadmiernego rozrostu (overgrowth) i wartości odstających w nasyceniu RGB (patrz ustalenia dot. przetrenowania scen plenerowych).
Learning Rates (T3–T10)
T3positionLearningRate
SZCZEGÓŁY
Domyślnie: 0.00016 Zakres: 1e-7 – 1e-3 (zalecane)
TECHNICZNIE
Współczynnik uczenia Adam dla pozycji XYZ każdej Gaussian na początku treningu (iteracja 0). Podąża za krzywą cosine-annealing i spada w trakcie treningu do T4 positionLearningRateFinal. Domyślna wartość 0.00016 pochodzi z oryginalnej pracy 3DGS (Kerbl et al.~2023) i w RadianceKit nie należy jej skalować nawet przy zwiększeniu rozdzielczości obrazu — pozycja porusza się w świecie-współrzędnych, nie w przestrzeni pikseli. Wyraźne zwiększenie (> 0.0005) powoduje, że Gaussians przeskakują na duże odległości i loss staje się niestabilny; wartości znacznie niższe (< 0.00005) prowadzą do tego, że błędnie zainicjowane chmury punktów nigdy nie znajdują swojego miejsca. Dla zdecydowanej większości scen wartość domyślna jest więc właściwym wyborem. Uwaga: przy .fullMCMC celowo pozostawiamy tę wartość na domyślnej — MCMC potrzebuje stałych współczynników uczenia dla swojej logiki relokacji, więc tuning tutaj nic nie daje.
T4positionLearningRateFinal
SZCZEGÓŁY
Domyślnie: 0.0000016 (Initializer + praca), 0.000016 (.full, .fullMCMC — 10× wyższe) Zakres: 0 – T3 positionLearningRate
TECHNICZNIE
Wartość końcowa krzywej cosine-annealing LR pozycji. Osiągana jest albo przy T1 maxIterations, albo, jeśli ustawiono, przy T50 positionLRScheduleEndIteration. Preset .full RadianceKit używa 0.000016 — czyli 10× wyższej niż domyślna wartość z pracy 0.0000016. Zarówno wyraźnie mniejsza wartość końcowa, jak i wyraźnie większa wartość początkowa pogarszają wynik zauważalnie. Wysoka wartość końcowa nie jest kompromisem, lecz świadomym wyborem: przy zbyt silnym decay Gaussians tracą podczas fazy refinement zdolność do dostosowywania się do nowo dodanych kandydatów densyfikacji. Fazę harmonogramu można skrócić (T50 < T1), tak że T4 zostaje osiągnięte jeszcze przed końcem treningu, a reszta treningu przebiega przy stałym mini-LR — typowa konfiguracja: T50 = 20 000, T1 = 35 000, refinement więc przy 0.000016 przez 15 000 iteracji.
T5shDCLearningRate
SZCZEGÓŁY
Domyślnie: 0.0025 (Initializer + praca), 0.005 (.full i wszystkie presety MCMC — 2×) Zakres: 0.0001 – 0.05
TECHNICZNIE
Współczynnik uczenia Adam dla części DC (degree 0, czyli stałego albedo) koloru sferycznych harmonicznych. SH-DC odpowiada niezależnemu od kierunku podstawowemu tonowi Gaussian, poniekąd „kolorowi bazowemu". RadianceKit podwaja domyślną wartość z pracy w presetach jakości — to przyspiesza konwergencję koloru, co jest konieczne, ponieważ przy krótkim treningu (< 5 000 iteracji) SH-DC inaczej nie osiągnąłby właściwej formy. W przeciwieństwie do geometrycznych LR, SH-DC nie ma decay; współczynnik uczenia pozostaje stały przez wszystkie iteracje (lub podąża jedynie za opcjonalnym decay fazy rozszerzonej z T51). Jeszcze wyraźnie wyższe wartości (ok. 0.01) ponownie pogarszają wynik i sprawiają, że kolory stają się niestabilne.
T6shRestLearningRate
SZCZEGÓŁY
Domyślnie: 0.000125 (Initializer + praca), 0.00025 (.full i MCMC — 2×) Zakres: 0.000001 – 0.005
TECHNICZNIE
Współczynnik uczenia Adam dla współczynników SH wyższego rzędu (Degree 1, 2, 3 — czyli zależnych od kierunku patrzenia składowych koloru, które odpowiadają za odblaski, odbicia i łagodne cieniowanie). 20× mniejszy niż T5 zgodnie z konwencją pracy, ponieważ liczba tych współczynników rośnie kwadratowo (3 dla Degree 1, 5 dla Degree 2, 7 dla Degree 3 → łącznie 15 wartości float na każdą Gaussian) i bez mniejszego współczynnika uczenia przesyciłyby obraz. Odblokowywane w dwóch krokach — do pierwszej progowej wartości w T21 shDegreeUpgradeIterations aktywny jest tylko Degree 0 (czyli tylko T5), potem 1, później 2, wreszcie 3. Niskie wartości są tu szczególnie ważne w scenach z dużą ilością rozproszonego oświetlenia; przy bardzo błyszczących powierzchniach (lakier samochodowy, woda) nie opłaca się przy tym kręcić — sama reprezentacja SH jest ograniczona.
T7opacityLearningRate
SZCZEGÓŁY
Domyślnie: 0.05 (Initializer + praca), 0.1 (.full, MCMC — 2×) Zakres: 0.001 – 1.0
TECHNICZNIE
Współczynnik uczenia Adam dla logitowej nieprzezroczystości każdej Gaussian. Aplikacja przechowuje nieprzezroczystość jako nieograniczoną wartość float i transformuje ją sigmoidem do [0, 1]; LR działa w przestrzeni logit. Presety jakości podwajają domyślną wartość z pracy do 0.1; to sprawia, że pruning jest bardziej efektywny — martwe Gaussians szybciej spadają poniżej T14 pruneOpacityThreshold. To, która wartość działa najlepiej, zależy przy tym od konfiguracji Adam; wzajemne oddziaływanie tych dwóch nie jest trywialne. Niskie wartości (< 0.01) prowadzą do tego, że „martwe" Gaussians wiecznie zalegają i zużywają pamięć; zbyt wysokie wartości (> 0.5) mogą prowadzić do eksplozji opacity, dlatego optymalizator ogranicza wartość logit na sztywno do [-15, 3].
T8opacityLearningRateFinal
SZCZEGÓŁY
Domyślnie: 0.0 (= „brak decay") Zakres: 0 lub 0.001 – T7 opacityLearningRate
TECHNICZNIE
Opcjonalna wartość końcowa cosine-decay dla LR opacity. Przy 0.0 decay jest wyłączony, a LR opacity pozostaje przez cały trening na stałym poziomie T7. Decay z 0.1 do 0.01 pogarsza wynik wyraźnie; dlatego wartość domyślna to „wyłączone". Hipoteza stojąca za tym polem: w fazie refinement stały LR opacity mógłby prowadzić do oscylacji, tak że splaty, które osiągnęły już właściwy poziom przezroczystości, byłyby ponownie przesuwane przez losowe wahania gradientu. Empirycznie się to nie potwierdza — logika clampingu logit i tak to przechwytuje. Pole pozostaje dostępne dla przyszłych eksperymentów; również bardzo długie przebiegi MCMC (> 500K iteracji) mogłyby na tym skorzystać.
T9scaleLearningRate
SZCZEGÓŁY
Domyślnie: 0.005 (Initializer + praca), 0.01 (.full, MCMC — 2×) Zakres: 0.0001 – 0.1
TECHNICZNIE
Współczynnik uczenia Adam dla trzech składowych skali każdej Gaussian w przestrzeni logarytmicznej (RadianceKit przechowuje log(scale), żeby skale pozostawały dodatnie). Domyślna wartość z pracy 0.005, w RadianceKit podwojona do 0.01 dla lepszej konwergencji skali przy dostrojonych konfiguracjach współczynników uczenia. Jeśli wartość pozostanie w zestawieniu z pozostałymi LR jakości przy domyślnej wartości z pracy, powstaje zauważalnie zbyt mało Gaussians — kontrola gęstości nie może klonować, bo aktualizacje skali nadążają zbyt wolno. Skala kontroluje rozciągnięcie każdej Gaussian — zbyt szybkie uczenie prowadzi do „igiełkowatych" Gaussians (ekstremalnie długich, cienkich splatów, patrz T34 scaleRatioPruneThreshold), zbyt wolne uczenie sprawia, że splaty pozostają zbyt kompaktowe i kontrola gęstości musi zbyt często dzielić.
T10rotationLearningRate
SZCZEGÓŁY
Domyślnie: 0.001 (Initializer + praca), 0.002 (.full, MCMC — 2×) Zakres: 0.0001 – 0.05
TECHNICZNIE
Współczynnik uczenia Adam dla czterech składowych kwaternionu każdej Gaussian. Kwaternion jest w każdym kroku optymalizatora po aktualizacji Adam ponownie normalizowany (norma L2 = 1) — inaczej macierz kowariancji zdegenerowałaby się. RadianceKit podwaja domyślną wartość z pracy w presetach jakości, ponieważ rotacja w porównaniu do skali / pozycji ma mniejsze bezwzględne wielkości gradientu (na sferze jednostkowej każdy krok pozostaje krótki), a bez 2× rotacja byłaby w oknie 35 000 iteracji wyraźnie niedokonwergowana. W scenach NeRF-Blender (Lego, Chair) rotacja ma szczególny wpływ — krawędzie obiektów prawidłowo się ustawiają dopiero po 5 000–10 000 iteracjach.
Densification — Klasyczna (T11–T16)
T11densifyGradThreshold
SZCZEGÓŁY
Domyślnie: 0.000002 (Initializer, kalibrowane dla rozdzielczości 0.5×), 0.0000011 (.full, kalibrowane dla 1.0×), 0.000004 (.quickTest, kalibrowane dla 0.25×), 2e-7 (.fullClassicPaper) Zakres: 1e-8 – 1e-3 (zależny od rozdzielczości)
TECHNICZNIE
Próg dla normy L2 gradientu pozycji zrzutowanego w przestrzeni ekranu, powyżej którego dana Gaussian jest oznaczana do klonowania lub podziału. Wartość bezwzględna zależy bezpośrednio od rozdzielczości treningu — skaluje się w przybliżeniu jak 1/rozdzielczość² (więcej pikseli = mniejsze gradienty na piksel). Dlatego każdy poziom T22 trainingRenderScale wymaga skalibrowanego progu: 0.25× → 4e-6, 0.5× → 2e-6, 1.0× → 5e-8 … 1.1e-6 (.full). Domyślna wartość z paperu, 0.0002, jest znormalizowana w NDC i w świato-przestrzennym pipeline RadianceKit nie jest bezpośrednio porównywalna. Za pomocą flagi T52 adaptiveDensifyThreshold można wyliczyć wartość w czasie działania na podstawie p98 aktualnego rozkładu gradientów — na rzeczywistych scenach liczba Gaussianów przy tym jednak drastycznie spada (masowe przycinanie); flaga pozostaje wyłączona. T77–T79 dostarczają alternatywną logikę adaptacyjną opartą na medianie kroczącej. To pole nie jest bezpieczne — zmniejszenie o połowę powoduje 2–4× więcej Gaussianów (presja na pamięć, ryzyko OOM); podwojenie może doprowadzić do niedostatecznej densyfikacji sceny.
T12densifyFromIteration
SZCZEGÓŁY
Domyślnie: 500 Zakres: 100 – 5 000
TECHNICZNIE
Pierwsza iteracja, od której aktywuje się densyfikacja. Wcześniej zachodzi jedynie „gołe" uczenie na początkowej chmurze punktów SfM, bez tworzenia nowych Gaussianów. Domyślna wartość 500 pochodzi z paperu 3DGS i daje inicjalizacji czas na ustabilizowanie się — jeśli densyfikacja zaczęłaby się już od iteracji 0, błędnie ustawione punkty SfM klonowałyby się wielokrotnie, zanim w ogóle znajdą właściwe miejsce. Wyraźnie późniejszy start (np. 1 000) nieco pogarsza wynik; pozostań przy wartości domyślnej.
T13densifyInterval
SZCZEGÓŁY
Domyślnie: 100 (Initializer, MCMC), 200 (.full) Zakres: 50 – 1 000
TECHNICZNIE
Ile iteracji dzieli dwa kolejne kroki densyfikacji. W domyślnej wartości z paperu, 100 — co 100 iteracji oceniana jest lista kandydatów do densyfikacji, następuje klonowanie/podział, a jednocześnie usuwana jest lista kandydatów do przycięcia (sigmoid(opacity) < T14 pruneOpacityThreshold). Dla .full sprawdziła się wartość 200 — to odciąża GPU, bo przebiega mniej przebiegów reorganizacji, i daje każdemu Gaussianowi więcej czasu na ustabilizowanie się po akcji klonowania. Krótsze interwały prowadzą w konfiguracji Quality do nadmiernej densyfikacji: powstaje wyraźnie więcej Gaussianów, bez poprawy obrazu. Przy MCMC to samo pole jest interpretowane jako interwał relokacji; patrz T67 mcmcRelocationInterval dla logiki specyficznej dla MCMC.
T14pruneOpacityThreshold
SZCZEGÓŁY
Domyślnie: 0.005 (Initializer, Paper, MCMC), 0.001 (.full) Zakres: 0.0001 – 0.1
TECHNICZNIE
Próg krycia sigmoidalnego, poniżej którego Gaussian zostaje usunięty przy następnym kroku densyfikacji. Działa w powiązaniu z T7 opacityLearningRate i logiką ograniczenia logit w optymalizatorze. W .full wartość wynosi 0.001 zamiast 0.005 — splaty, które odgrywają rolę tylko przy egzotycznych kątach widzenia, dzięki temu dłużej się utrzymują i przyczyniają się do szczegółów SH. Jeszcze mniejsze wartości (np. 0.0001) nic już nie dają: przycina się zbyt mało i marnuje pamięć. Ważne: kontrola gęstości MUSI ZAWSZE przycinać, nawet jeśli pojemność bufora jest przez inne mechanizmy już wypełniona — inaczej martwe Gaussiany się akumulują a liczba zamraża się.
T15opacityResetInterval
SZCZEGÓŁY
Domyślnie: 3 000 (Initializer + Paper), 100 000 (.full = efektywnie wyłączone), 200 000 (.fullMCMC = wyłączone) Zakres: 1 000 – 100 000+
TECHNICZNIE
Co ile iteracji krycie wszystkich Gaussianów jest resetowane do niskiej wartości (~0.01) — środek zaczerpnięty z paperu 3DGS, mający na celu ponowną ocenę „zamrożonych" splatów. W połączeniu z rozgrzewką RadianceKit, stochastyczną konfiguracją treningu i podwojonymi wskaźnikami uczenia, reset krycia wyraźnie kosztuje jakość, a ograniczenie logit w optymalizatorze i tak już pokrywa jego funkcję. Dlatego w .full jest praktycznie wyłączony (100 000 > 35 000 = nigdy nie zostaje wyzwolony). W .fullClassicPaper (wariant wierny paperowi) jest celowo ustawiony z powrotem na 3 000 — tam chodzi o osiągnięcie budżetów Gaussianów z oryginalnego paperu.
T16maxScreenSize
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 (wył.) lub > 0
TECHNICZNIE
Maksymalny rozmiar w przestrzeni ekranu (w zrzutowanych pikselach), jaki może osiągnąć Gaussian, zanim zostanie wymuszony jego podział. Wartość jest ustawiona na 0 — kontrola gęstości RadianceKit używa zamiast tego progu skali w przestrzeni świata z tej samej logiki gradientowej. Pozostaje w katalogu pól, ponieważ przyszłe eksperymenty z Mip-Splatting (T74–T76) lub strategiami splattingu specyficznymi dla sceny mogłyby na tym skorzystać. Aktywacja (wartość > 0, np. 20) wymusiłaby na bardzo dużych splatach na ekranie podział — istotne przy dużych, gładkich powierzchniach ścian, gdzie pojedynczy ogromny splat oferuje zbyt mało szczegółów.
Loss (T17–T20)
T17ssimWeight
SZCZEGÓŁY
Domyślnie: 0.2 (Initializer + Paper + .full), 0.05 (wszystkie presety MCMC) Zakres: 0.0 – 1.0
TECHNICZNIE
Waga składnika D-SSIM w połączonej funkcji straty loss = (1 - λ) * L1 + λ * D-SSIM, gdzie λ = T17. Domyślna wartość 0.2 z 3DGS-Paper jest właściwym wyborem dla Classic-Densification — już 0.3 wyraźnie pogarsza wynik. Dla MCMC odpowiednia wartość wynosi natomiast 0.05, ponieważ MCMC dzięki swojej stochastycznej eksploracji potrzebuje silniejszego udziału sygnału L1 — wyższe wagi SSIM rozmyłyby decyzje relokacji. SSIM jest znacznie droższy obliczeniowo niż L1 (lokalne okna 11×11 na całym obrazie); RadianceKit korzysta z implementacji przyspieszonej przez MPS, która pozostaje poniżej 1 ms na obraz 1080p. Presety Scene-Class używają wartości specyficznych dla sceny między 0.082 (.outdoorPreset) a 0.171 (.indoorPreset).
T18ssimWeightRefinement
SZCZEGÓŁY
Domyślnie: 0.0 (= „brak zmiany, zachowaj ssimWeight") Zakres: 0 lub 0 – 1.0
TECHNICZNIE
Opcjonalna wartość SSIM dla fazy dopracowania po T2 densifyUntilIteration. Podniesienie z 0.2 do 0.3 w fazie dopracowania pogarsza wynik w obu miarach — zarówno L1, jak i SSIM; dlatego wartość domyślna wynosi 0.0. Hipoteza stojąca za tym polem zakładała, że po zakończeniu densyfikacji — gdy nie powstają już nowe Gaussians — silniejszy udział SSIM zmaksymalizowałby ostrość strukturalną. Empirycznie okazało się to błędne: zwiększenie wagi SSIM oznacza pośrednio obniżenie wagi L1, a L1 jest znacznie bardziej znaczącym sygnałem w finalnej fazie dopracowania. Pole pozostaje dostępne na potrzeby przyszłych eksperymentów z perceptualną stratą (T60) lub stratą krawędziową (T19), gdzie kompozycja straty specyficzna dla fazy dopracowania mogłaby mieć sens.
T19edgeLossWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.001 – 1.0
TECHNICZNIE
Eksperymentalny składnik straty: waga strat L1 w dziedzinie gradientu Sobela, która bezpośrednio porównuje krawędzie obrazu (Sobel obrazu wzorcowego vs Sobel renderu) jako dodatek do L1+SSIM. Hipoteza: informacja o krawędziach jest filarem percepcyjnej jakości obrazu, a jawny składnik powinien zachęcać Gaussians do lepszego trafiania w krawędzie. W praktyce nic to nie daje: zauważalna waga (0.1) pogarsza wynik, a mała (0.01) nie zmienia jakości, kosztuje jednak czas obliczeń. Przebieg Sobela kosztuje dodatkowy przebieg forward MPS na obrazie wzorcowym i renderze. Dlatego trwale wyłączony. Przyszłe zastosowanie: sceny z twardymi sztucznymi krawędziami (architektura, meble, rendery) mogłyby skorzystać — Jednak presety Scene-Class nie używają do tego tego składnika, tylko skalują wagę SSIM.
T20skyMaskingEnabled
SZCZEGÓŁY
Domyślnie: false (Initializer i wszystkie presety) Zakres: boolean
TECHNICZNIE
Włącza maskowanie nieba (Sky Masking). Przy tym w każdym obrazie za pomocą frameworka Apple Vision maskowany jest obszar nieba, a strata w tym obszarze jest ustawiana na zero. Sens: sceny plenerowe często cierpią na to, że niebieskie/szare/białe piksele nieba skłaniają aplikację do umieszczania Gaussians właśnie tam — co jest odbierane jako „floater" (unoszący się artefakt). Bez maski nieba strata w tym obszarze nigdy nie byłaby zerowa, ponieważ niebo na obrazie lekko się zmienia, a aplikacja bez końca próbuje to odtworzyć za pomocą splatów. Maska Vision jest obliczana raz na kamerę przed treningiem i przechowywana w pamięci RAM. Zwykle jest aktywowana razem z T45 skyDomeEnabled (logika UI w widoku ustawień). W scenach wnętrzarskich lub renderingach syntetycznych pozostaw wyłączone — maska błędnie rozpoznawałaby tam sufity lub ściany jako „niebo".
SH-Degree-Progression (T21)
T21shDegreeUpgradeIterations
SZCZEGÓŁY
Domyślnie: [1_000, 2_000, 3_000] (Initializer), [2_000, 5_000, 8_000] (.full, MCMC), [1_000, 2_000] (.preview — Degree 3 pominięty) Zakres: [Int], każda wartość w [0, maxIterations], rosnąco monotonicznie
TECHNICZNIE
Iteracje, przy których aktywny SH-Degree jest podnoszony z 0→1, 1→2, 2→3. Przed pierwszym progiem aktywne są tylko komponenty DC (czyli T5 shDCLearningRate), po pierwszym progu DC + 3 współczynniki Degree-1, po drugim progu + 5 współczynników Degree-2, po trzecim progu wszystkie 15 współczynników. Zapotrzebowanie na pamięć na Gaussian rośnie przy tym stopniowo — 4 Floaty → 16 Floatów → 36 Floatów → 64 Floaty. Presety jakości opóźniają podniesienia stopnia względem domyślnych wartości Initializera, ponieważ geometria ma się najpierw ustabilizować, zanim dojdą szczegóły koloru z ich wyższą częstotliwością. Wcześniejsze progi [1K, 2K, 3K] dają w .full zauważalnie gorszy wynik. .preview ogranicza się do Degree 2, ponieważ Degree 3 nie zdąży zbiec w 5 000 iteracjach i tylko zużywa pojemność optymalizatora. Curriculum (T80–T81) oferuje alternatywną logikę, która dynamicznie nadpisuje tę listę.
Wydajność (T22–T24)
T22trainingRenderScale
SZCZEGÓŁY
Domyślnie: 1.0 (Initializer, .full, MCMC, Scene-Class), 0.5 (.preview), 0.25 (.quickTest) Zakres: 0.05 – 2.0 (typowo 0.25, 0.5, 1.0)
TECHNICZNIE
Rozdzielczość renderowania podczas treningu w odniesieniu do oryginalnej rozdzielczości obrazów treningowych. Przy 0.5 każdy obraz zostaje przeskalowany w dół do 50 % szerokości × 50 % wysokości (czyli 25 % pikseli), a renderowanie Gaussian odbywa się w tej mniejszej rozdzielczości. Redukuje zarówno zużycie pamięci, jak i obciążenie obliczeniowe w sposób kwadratowy. Ważne: T11 densifyGradThreshold musi pasować do wybranej rozdzielczości — wartości gradientu skalują się z 1/rozdzielczość², dlatego .quickTest (0.25×) ma znacznie wyższy próg (4e-6) niż .full (1.0×, 1.1e-6). RadianceKit ostrzega przy bardzo dużych obrazach i dostosowuje się automatycznie — docelowa rozdzielczość 3 MP. Przy skrajnych obrazach wejściowych 4K sensowne byłoby 0.5 lub nawet 0.25, inaczej każdy Mac wpadnie tylko w kompaktowanie na CPU.
T23resolutionWarmupScale
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.1 –
TECHNICZNIE
Trenuj fazę densyfikacji (iteracje od 0 do T2) w niższej rozdzielczości niż faza dopracowywania (refinement). Dla .full jest to wyłączone, ponieważ przy T22 = 1.0 i cosine annealing zysk czasowy jest niewielki, a jakość nieco cierpi. Pozostaje w katalogu pól, ponieważ przy wejściach 4K i długich sesjach treningowych mogłaby ponownie okazać się przydatna — curriculum (T80) wykorzystuje podobną logikę, ale jest tam sprzężone z harmonogramem LR. Jeśli aktywne i T80 curriculumResolutionRamp również true, wygrywa curriculum i nadpisuje tę wartość.
T24tileSize
SZCZEGÓŁY
Domyślnie: 16 Zakres: 8, 16, 32
TECHNICZNIE
Rozmiar kafelków rasteryzacji w pikselach. Renderowanie Gaussian Splatting jest oparte na kafelkach: obraz jest dzielony na kafelki 16×16 pikseli, każdy kafelek zbiera odpowiednie dla niego Gaussiany, sortuje je według głębi i miesza. 16 to standard używany praktycznie przez wszystkie implementacje 3DGS, zakodowany na stałe w kernelach Metal RadianceKit; zmiana tej wartości wymagałaby ponownej kompilacji shaderów i w obecnym stanie nie jest efektywna. Pozostaje jako pole na wypadek, gdyby przyszła wersja silnika obsługiwała dynamiczny rozmiar kafelków.
Diagnostyka i przygotowanie chmury punktów (T26–T30)
T26depthDistortionWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.0001 – 0.05
TECHNICZNIE
Eksperymentalne: waga funkcji straty regularyzującej depth distortion. Karze Gaussians, które są rozmieszczone głęboko wzdłuż promienia renderowania, choć koncepcyjnie należą do tej samej powierzchni — to zachęca do skoncentrowanych rozkładów głębi i redukuje Floaters. Przy wszystkich testowanych wartościach wynik pogarsza się zamiast się poprawiać. Teoretyczna korzyść — poprawa spójności multi-view — nie przekłada się na L1-Loss, ponieważ hipoteza zakłada implicite, że geometria SfM jest poprawna i Gaussians trzeba jedynie „ułożyć w stos". W praktyce chmura punktów SfM jest zazwyczaj najsłabszym elementem, nie sposób ich rozmieszczenia. Pozostaje dostępne dla zbiorów danych multi-view z wyjątkowo czystymi pozami (Synthetic, Mip-NeRF 360 z Ground Truth).
T27singleViewOverfit
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
Flaga diagnostyczna: jeśli true, w każdej iteracji treningu wymuszane jest użycie kamery o indeksie 0 zamiast losowej z puli kamer. Sens: jeśli model nie potrafi przeuczyć się (overfit) nawet na jednym widoku (czyli strata dla widoku 0 nie zbliża się do zera nawet po 10 000 iteracjach), to w przebiegu forward/backward jest fundamentalny błąd. Ten przełącznik był intensywnie wykorzystywany podczas rozwoju shaderów Metal i jąder Differentiable Rasterizer. Dziś dostępny już tylko jako sanity-check, gdy ktoś zmienił coś w backendzie treningowym i chce to zweryfikować. W interfejsie nie ma dla niego przełącznika — to pole jest wyłączone we wszystkich Preset i takie pozostaje.
T28maxCameras
SZCZEGÓŁY
Domyślnie: 0 (= „użyj wszystkich kamer") Zakres: 0 lub 1 – N
TECHNICZNIE
Limit diagnostyczny: trenuj tylko z pierwszymi N kamerami, ignoruj wszystkie pozostałe. Pierwotny sens: przetestować hipotezę, że zbyt wiele kamer generuje konflikty gradientów (zbyt wiele sprzecznych sygnałów straty dla tej samej Gaussian). Sztuczne ograniczenie nie przynosi żadnej korzyści — więcej klatek niemal zawsze oznacza więcej jakości. W interfejsie nie ma dla tego żadnego elementu sterującego; to pole we wszystkich Presets ma wartość 0, czyli „wszystkie kamery".
T29maxInitialPoints
SZCZEGÓŁY
Domyślnie: 0 (= „użyj wszystkich punktów SfM") Zakres: 0 lub 1 000 – 200 000+
TECHNICZNIE
Zabezpieczenie: ogranicza liczbę początkowych punktów SfM, z którymi rozpoczyna się trening. Gęste rekonstrukcje COLMAP mogą wygenerować > 60 000 punktów, co przy dużych skalach początkowych prowadzi do 200–300 Gaussians na nakładający się piksel — tworzy to „pole mgły", w którym trening nie zbiega. Subsampling do ~16 000 punktów (logika hard-cap w silniku treningowym) sprowadza gęstość początkową do poziomu, jaki stosuje referencyjne 3DGS, i drastycznie redukuje nakładanie się. Aplikacja ustawia to sama przy bardzo gęstych rekonstrukcjach; nie ma dla tego elementu sterującego.
T30cameraClusterOutlierMultiplier
SZCZEGÓŁY
Domyślnie: 10.0 (wszystkie Presets — nigdy nie nadpisywane) Zakres: 1.0 – 100.0
TECHNICZNIE
Mnożnik dla filtra outlierów camera-cluster. Przed treningiem silnik treningowy oblicza centroid wszystkich pozycji kamer oraz maksymalną odległość kamery od centroidu. Punkty SfM, których odległość od centroidu przekracza multiplier × maxCameraDistance, są odrzucane jako outliery. Domyślna wartość 10× jest celowo przyjęta jako hojna. Subtelny efekt uboczny: ciaśniejsze SfM (kamery bliżej siebie) → mniejszy maxCameraDistance → mniejszy próg → więcej punktów zostaje odrzuconych jako outliery. Luźniejsze SfM → większy próg → mniej punktów odrzuconych. Wynika z tego zaskakujący efekt: ciaśniejsza i sama w sobie lepsza rekonstrukcja SfM może pogorszyć trening, ponieważ odrzucanych jest zbyt wiele punktów początkowych. Pole we wszystkich Presets ma wartość 10 i nie jest regulowalne w interfejsie. Wartości poniżej 5 są zazwyczaj zbyt restrykcyjne, powyżej 20 są bezskuteczne.
Regularyzacja (T31–T37)
T31coarseToFineBlurRadius
SZCZEGÓŁY
Domyślnie: 0 (= wyłączone) Zakres: 0 lub 1 – 10
TECHNICZNIE
Eksperymentalne: promień Box-Blur, który jest stosowany na początku fazy densyfikacji do obrazu ground-truth i liniowo redukowany do 0 aż do końca densyfikacji (T2). Hipoteza: trening coarse-to-fine — najpierw nauka grubych struktur, potem detali — powinien dawać stabilniejszą geometrię. We wszystkich testowanych promieniach wynik jest gorszy. Powód niepowodzenia: densyfikacja podejmuje decyzje na podstawie gradientów w domenie obrazu, a rozmycie zmniejsza dokładnie te sygnały, które są ważne dla „tu trzeba sklonować". Pozostaje w katalogu polowym dla przyszłych testów z innym schematem kontroli gęstości.
T32scaleRegWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.0001 – 0.05
TECHNICZNIE
Eksperymentalne: regularyzacja L1 na skalę w przestrzeni świata. Karze Gaussiany, które stają się zbyt duże — zapobiega „mega-splatom", które pokrywają całe powierzchnie ścian jedną Gaussianą. Po włączeniu liczba Gaussianów eksploduje do milionów, a wynik jest wielokrotnie gorszy. Powód: regularyzacja skali wchodzi w konflikt z kontrolą gęstości — mniejsze skale oznaczają, że potrzeba więcej Gaussianów, więc kontrola gęstości dzieli częściej, co z kolei oznacza więcej nakładu obliczeniowego na gradienty. Wyłączone, ale udokumentowane dla eksperymentów z Mip-Splatting (T74): w tym kontekście dolna granica skali mogłaby mieć sens.
T33anisotropyRegWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.0001 – 0.05
TECHNICZNIE
Eksperymentalne: kara za stosunek max(scale)/min(scale), ma zapobiegać skrajnie wydłużonym Gaussianom typu „needle", które są postrzegane jako floater. We wszystkich testowanych siłach wynik jest wyraźnie gorszy. Powód: regularyzacja wymusza na splatach kształt zbliżony do „okrągłego", co na płaskiej powierzchni (ściana, stół, podłoga) jest dokładnie odwrotnością tego, co trzeba — tam płaska, szeroka Gaussiana jest efektywniejsza niż kulista. Wyłączone. T34 scaleRatioPruneThreshold realizuje ten sam cel bardziej ukierunkowanie, ale też jest domyślnie wyłączony.
T34scaleRatioPruneThreshold
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 5.0 – 100.0 (typowo 10.0 – 30.0)
TECHNICZNIE
Eksperymentalne przycinanie po treningu, które usuwa każdą Gaussianę, której stosunek max(scale)/min(scale) przekracza tu ustawiony liniowy próg. Celuje w skrajnie wydłużone floatery typu „needle/disc", których sama regularyzacja nie potrafi wyeliminować. W teście przycinanie usunęło floatery zgodnie z oczekiwaniami, ale jednocześnie także sensowne płaskie splaty na ścianach i podłogach — obraz stał się bardziej dziurawy. Dlatego domyślnie wyłączone. Od wersji 1.8 istnieje do tego przełącznik Remove Needle/Disc Floaters w sekcji Inspektora „Training", pod linią pomocniczą „Runs automatically at the end of training". Po włączeniu działa świadomie konserwatywnie (tylko splaty, których najdłuższa oś przewyższa najkrótszą około 50×) i działa od następnego przebiegu treningu.
T35opacityRegWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.0001 – 0.05
TECHNICZNIE
Eksperymentalne: kara Binary-Cross-Entropy, która ciągnie krycie w stronę 0 lub 1 (a więc z dala od „półprzezroczystości"). Hipoteza: ostrzejszy rozkład krycia poprawiłby klarowność obrazu. Razem z T33 regularyzacja kosztuje jakość; oba są wyłączone. Uwaga: w wersji 1.4.3-Beta pojawił się błąd, który dotyczył dokładnie tego pola przy zmianie wartości domyślnej (inicjalizator = 0.01), co doprowadziło do masowego wymierania liczby Gaussianów (460 tys. → 5 w jednej iteracji). Od wersji 1.4.4 wartość domyślna jest na stałe zakotwiczona na 0.0.
T36opacityDecayFactor
SZCZEGÓŁY
Domyślnie: 0.0 (inicjalizator = wyłączone), 0.9995 (.full, .classicBalanced — standard HTGS) Zakres: 0 (wyłączone) lub 0.95 – 1.0
TECHNICZNIE
Implementacja schematu HTGS (Hierarchical Time-Gating, Eurographics 2025): co T37 opacityDecayInterval iteracji sigmoidalne krycie każdej Gaussiany jest mnożone przez ten współczynnik. 0.9995 × 100 zastosowań daje ok. 95% pozostałości na fazę densyfikacji — lekki, ale stały nacisk w dół na wszystkie wartości krycia, który niezawodnie sprowadza słabo przyczyniające się Gaussiany poniżej T14 pruneOpacityThreshold. Rezultatem jest wyraźnie lepszy wynik niż bez decay. Aktywne tylko podczas fazy densyfikacji (do T2), potem trening kontynuuje bez decay, aby wartości krycia ustalone podczas dopracowywania pozostały stabilne. Nieużywane w MCMC (MCMC ma własne mechanizmy poprzez T67 mcmcRelocationInterval + T68 mcmcDeadOpacityThreshold).
T37opacityDecayInterval
SZCZEGÓŁY
Domyślnie: 50 Zakres: 10 – 500
TECHNICZNIE
Interwał iteracji, w którym stosowany jest T36 opacityDecayFactor. Domyślna wartość z artykułu HTGS to 50, w .full pozostawiona. Długie interwały (>200) częściowo znoszą efekt, ponieważ między dwoma zastosowaniami zachodzi wystarczająco dużo aktualizacji gradientów, by krycie znów wzrosło. Krótsze interwały (<20) czynią decay zbyt agresywnym. Aktywne tylko w fazie densyfikacji.
Refinement (T38–T44)
T38gradientAccumulationSteps
SZCZEGÓŁY
Default: 1 (= „jeden Widok pojedynczo dla kroku Adam") Range: 1 – 8
TECHNICZNIE
Liczba Views, których gradienty są akumulowane, zanim zostanie wykonana aktualizacja Adam. Przy > 1 aplikacja działa na osobnej, „unfused" ścieżce backward-project, która sumuje gradienty w osobnym buforze; finalne zastosowanie skaluje wartość przez 1/N, aby utrzymać stałą magnitudę. Przy klasycznym treningu wartość 2 nie przynosi zysku jakościowego, ale kosztuje czas, ponieważ ścieżka unfused jest droższa niż fused. Przy MCMC natomiast accum = 2 wyraźnie zmniejsza różnicę jakości względem Classic — dlatego jest tam oferowany jako przełącznik. W presetach wartość wynosi 1. W interfejsie dostępny jest przez przełącznik MCMC Quality w sekcji Inspectora „Training": włączony akumuluje 2 Views na krok, wyłączony 1. Inne wartości niż 1 i 2 można ustawić tylko przez edytowany plik presetu.
T39testViewIndices
SZCZEGÓŁY
Default: [] (= puste, wszystkie Views są używane do treningu) Range: Set<Int>, dowolny podzbiór indeksów kamer
TECHNICZNIE
Zbiór indeksów kamer, które NIE są używane do treningu, tylko zapisywane jako holdout do oceny PSNR/SSIM/LPIPS. Wypełniany tylko w wewnętrznych przebiegach pomiarowych: wtedy co ósmy View, zaczynając od indeksu 0 (standard LLFF, identyczny z konwencjami z prac Mip-NeRF-360 i 3DGS). W stanie dostarczonym pole pozostaje puste — trening wykorzystuje wszystkie Views i nie ma w interfejsie żadnego elementu sterującego dla tego. Uwaga: ręczne ustawienie tego pola w pliku presetu bez zrozumienia indeksów czyni pomiar bezużytecznym (np. gdy wszystkie indeksy zostaną ustawione powyżej N, podczas gdy jest tylko N-50 Views → brak holdoutów → brak oceny). Przy eksporcie własnego presetu testViewIndices nie jest zapisywane, ponieważ zależy od sceny i w przeciwnym razie pozostawiałoby bezsensowne wartości między różnymi zbiorami danych.
T40refinementPruneInterval
SZCZEGÓŁY
Default: 0 (= wyłączone) Range: 0 lub 100 – 5 000
TECHNICZNIE
Co N iteracji podczas fazy Refinement (po T2) uruchamiany jest dodatkowy przebieg prune, który usuwa Gaussians z sigmoid(opacity) < T41 refinementPruneOpacityThreshold. Sens: podczas Densification odbywają się regularne wywołania Density-Control, potem już nie — Gaussians, których opacity nadal spada, pozostają jednak w buforze. W praktyce to dodatkowe przycinanie szkodzi: w połączeniu z drugą fazą Densification (T54) może całkowicie opróżnić populację Gaussians. We wszystkich presetach ustawione jest na 0 i w interfejsie nie da się go zmienić; jeśli mimo to ustawisz je przez edytowany plik presetu, sensowne wartości to 1 000 lub 2 000.
T41refinementPruneOpacityThreshold
SZCZEGÓŁY
Default: 0.0 (= „użyj T14") Range: 0 lub 0.001 – 0.1
TECHNICZNIE
Osobny próg opacity dla przycinania w Refinement. Po Densification większość Gaussians osiągnęła wyraźnie wyższą opacity (> 0.001), więc domyślny T14 pruneOpacityThreshold byłby zbyt łagodny. Gdy T40 jest aktywne, to pole określa własny próg. Przy 0.0 nadal używane jest T14. Istotne tylko gdy T40 > 0.
T42midTrainingCompactificationIterations
SZCZEGÓŁY
Default: [] (= wyłączone) Range: [Int], wartości w (densifyUntilIteration, maxIterations)
TECHNICZNIE
Jawne punkty iteracji podczas fazy Refinement, w których uruchamiany jest przebieg Compactification (usuwa sigmoid(opacity) < 0.01 + Gaussians ze skalą-odstającą, ta sama logika co T56 postTrainingCompactification). Sens: długie fazy Refinement mogą wykazywać akumulację confetti/floaterów, których SH następnie przetrenowuje się na artefakty specyficzne dla widoku. Typowa konfiguracja gdy aktywne: [10000, 20000, 30000] dla 40K Classic. ALE: dowolnie wybrane znaczniki sprzątania konsekwentnie pogarszają wynik końcowy — liczba Gaussians wprawdzie znacząco spada, ale błąd obrazu rośnie mocniej. Jako dowolnie ustalana lista iteracji pole pozostaje więc puste we wszystkich presetach. Sam efekt osiągasz w interfejsie przez przełącznik Floater Cleanup w sekcji Inspectora „Training": przy klasycznych przebiegach od 30 000 iteracji ustawia on dwa przebiegi sprzątania w środku treningu. Własne znaczniki można ustawić tylko przez edytowany plik presetu.
T43frustumCullEnabled
SZCZEGÓŁY
Default: false Range: boolean
TECHNICZNIE
Po treningu usuwane są wszystkie Gaussians, które znajdują się poza sumą wszystkich frusta kamer treningowych. Takie Gaussians nigdy nie były ograniczane przez sygnał loss i zawsze są floaterami. Szczególnie skuteczne w scenach, gdzie Novel-View znajduje się za lub obok ścieżki kamery (np. tylna strona liniowego lotu drona) — floatery tam znajdujące się nigdy nie stają się widoczne podczas fazy treningowej, ale bardzo dobrze widoczne przy późniejszym poruszaniu się w przeglądarce 3D. Przy lotach dronem daje to widocznie mniej floaterów, dlatego jest dostępne jako opcja opt-in. Domyślnie false, ponieważ przy przechwytywaniach obiektów z pełnym pokryciem orbitalnym suma frusta obejmuje całą scenę i funkcja niczego nie usuwa — jest oferowana w Settings pod „Floater Reduction". Preset Outdoor jej nie włącza, ponieważ kopuła nieba (sky-dome) rozwiązuje tam ten problem lepiej.
T44frustumCullExpansion
SZCZEGÓŁY
Default: 1.1 Range: 1.0 – 2.0
TECHNICZNIE
Margines NDC dla T43 frustumCullEnabled. 1.0 przycinałoby dokładnie na krawędzi obrazu, co zbyt mocno skracałoby chwiejne splaty na krawędzi obrazu. 1.1 = 10% dodatkowego marginesu ponad dokładny framing kamery — daje pewną tolerancję dla pikseli brzegowych, które mogłyby jednak stać się widoczne w lekko przesuniętym Novel-View. Wartości > 1.2 czynią cull praktycznie nieskutecznym, ponieważ rozszerzone frustum obejmuje dużo więcej przestrzeni.
Sky-Dome (T45–T48)
T45skyDomeEnabled
SZCZEGÓŁY
Domyślnie: false (Inicjalizator + wszystkie Presety oprócz P9 Outdoor) Zakres: boolean
TECHNICZNIE
Przed rozpoczęciem treningu generowana jest kulista chmura punktów (Fibonacci-sphere z T46 punktami próbkowania), umieszczana w promieniu T47 skyDomeRadiusMultiplier × scene_extent wokół środka sceny i inicjalizowana kolorami z pikseli zamaskowanych jako niebo ze wszystkich kamer treningowych (patrz T20 skyMaskingEnabled). Te sky-dome-Gaussians są wstawiane na początku bufora Gaussianów i podczas treningu „zamrożone" (gradienty pozycji/skali/rotacji = 0, tylko SH i nieprzezroczystość pozostają optymalizowalne). Efekt: zamiast czarnych obszarów „confetti" w oddali, użytkownik w widokach novel-view widzi prawdziwe niebo. Na scenach z dronów i krajobrazach działa to bardzo dobrze; w Presecie Outdoor (P9) jest domyślnie włączone. Przy scenach wnętrzowych zostaw wyłączone — sfera bezsensownie wisiałaby poza pomieszczeniem.
T46skyDomeSampleCount
SZCZEGÓŁY
Domyślnie: 5 000 Zakres: 1 000 – 50 000 (typowo 2 000 – 10 000)
TECHNICZNIE
Liczba punktów próbkowania Fibonacci-Sphere na sferze sky-dome. Wyższe wartości → gęstsza kopuła nieba (lepsza przy dużych rozdzielczościach i dużym widocznym niebie), ale większe zapotrzebowanie na pamięć. 5 000 to sweet spot dla renderowań 4K; przy niższych rozdzielczościach wystarcza 2 000–3 000. Punkty są inicjalizowane według cosine-distance do każdego wektora widoku kamery treningowej z odpowiednimi pikselami zamaskowanymi jako niebo — punkty próbkowania, których stożka widzenia nie widzi żadna kamera, pozostają z niską początkową wartością nieprzezroczystości z tyłu, ale nie są zmieniane podczas treningu (zamrożone).
T47skyDomeRadiusMultiplier
SZCZEGÓŁY
Domyślnie: 30.0 (Inicjalizator + większość Presetów), 59.0 (P9 Outdoor) Zakres: 5.0 – 200.0
TECHNICZNIE
Promień sfery sky-dome względem rozciągłości sceny (= średnia odległość między pozycjami kamer). 30 = kula ma 30-krotną średnicę chmury kamer. Zbyt mały (< 5) → sky-dome interferuje ze sceną samą w sobie (np. splat sky-dome ląduje na pierwszym planie); zbyt duży (> 100) → utrata precyzji float32 na pozycjach sky-dome, co powoduje glitche renderowania w oddali. Dla rozległych scen zewnętrznych właściwą wartością jest 59.0 — domyślne 30.0 jest zbyt małe dla głębokich krajobrazów, wtedy piksele sky-dome renderują się widocznie na krawędziach obrazu jako „ściana".
T48frozenGaussianCount
SZCZEGÓŁY
Domyślnie: 0 (= brak zamrożonych Gaussianów) Zakres: 0 lub 1 – T46
TECHNICZNIE
Liczba Gaussianów na początku bufora, których gradienty pozycji/skali/rotacji w optymalizatorze są ustawiane na zero — pozostają przestrzennie sztywne przez cały trening. Density-control nie może ich klonować, dzielić ani przycinać. Używane do wstrzykiwania sky-dome (patrz T45): gdy sky-dome jest włączone, to pole zostaje automatycznie ustawione na T46 skyDomeSampleCount. Ręczne ustawienie jest możliwe (np. aby zamrozić wcześniej umieszczoną chmurę punktów ze skanu LiDAR), ale nie jest bezpośrednio dostępne w UI. Ważne: pierwsze N Gaussianów w buforze zawsze są tymi zamrożonymi — o tym decyduje kolejność w buforze, a nie jawny indeks.
Adam + harmonogram LR (T49–T55)
T49adamResetIteration
SZCZEGÓŁY
Domyślnie: 0 (= wyłączone) Zakres: 0 lub 100 –
TECHNICZNIE
Iteracja, przy której akumulatory momentum optymalizatora Adam (m1, m2) są zerowane. Korekta obciążenia (bias correction) działa potem z (iter - adamResetIteration) zamiast z iter. Reset po zakończeniu Densification wyraźnie pogarsza wynik. Powód: momentum Adama, które zbudowało się podczas Densification, niesie informację o typowych wielkościach gradientu i przyspiesza fazę Refinement. Odrzucenie go kosztuje pierwsze ~500 iteracji Refinement pod względem zbieżności. Dlatego we wszystkich Presetach ustawione jest na 0 i nie da się tego zmienić w interfejsie.
T50positionLRScheduleEndIteration
SZCZEGÓŁY
Domyślnie: 0 (Initializer = „użyj maxIterations"), 20 000 (.full — Cosine kończy się na 20K mimo maxIter=35K), 30 000 (.fullClassicPaper) Zakres: 0 lub 1 000 –
TECHNICZNIE
Iteracja, przy której krzywa cosine annealing dla LR pozycji osiąga swoje minimum. Jeśli 0, jest to identyczne z T1 maxIterations. Jeśli > 0, harmonogram działa aż do tej wartości i potem pozostaje na stałym poziomie T4 positionLearningRateFinal. Pozwala to na „rozszerzoną fazę refinement" z minimalną, lecz stałą szybkością uczenia — pozycje są dopracowywane powoli, bez ponownego zaniku (decay). .full tak robi (koniec harmonogramu na 20K, trening trwa do 35K); w sąsiedztwie — od 15K do 25K — niemal nic się nie zmienia, 20K jest najlepszym kompromisem. Jest dalej wykorzystywane w połączeniu z T51, aby modyfikować także LR-y inne niż pozycja w rozszerzonej fazie.
T51extendedPhaseLRDecay
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone, stałe LR-y) Zakres: 0 lub 0.01 – 1.0
TECHNICZNIE
Minimalny mnożnik dla LR-ów innych niż pozycja (skala, rotacja, opacity, SH) w „rozszerzonej fazie" — czyli po osiągnięciu T50, gdy LR pozycji jest już na poziomie T4. Jeśli 0.1, skala/rotacja/opacity/SH są ze swojej strony poddawane cosine decay z 1.0 (= ich standardowy LR) do 0.1× ich standardu. Jeśli 0.0 (domyślnie), pozostają stałe. Pełny decay aż do zera daje ten sam wynik co brak decay w ogóle — z decay zachowanie wygląda „czyściej", ale nie da się zmierzyć poprawy. Dlatego we wszystkich Presetach ustawione jest na 0 i nie da się tego zmienić w interfejsie.
T52adaptiveDensifyThreshold
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
Eksperymentalne: jeśli true, aplikacja oblicza w każdym kroku Densification p98 aktualnego rozkładu gradientów i wykorzystuje je jako dynamiczny próg (ograniczony do co najmniej 0,5× skonfigurowanej wartości z T11, aby zbytnio nie odstawał). Hipoteza: automatyczne dostosowanie do aktualnej fazy sceny miałoby uczynić kontrolę gęstości bardziej odporną — np. na początku surowsze przycinanie, później luźniejsze, lub odwrotnie. W praktyce liczba Gaussianów drastycznie się zapada — masowe przycinanie, ponieważ p98 w pierwszych iteracjach jest ekstremalnie wysokie, a potem niemal nic już nie przekracza progu. Stały próg jest już dobrze skalibrowany, dynamiczne dostosowanie szkodzi bardziej, niż pomaga. T77 oferuje alternatywną logikę adaptacyjną przez rolling median, która omija ten problem.
T53mergeAfterDensification
SZCZEGÓŁY
Domyślnie: false (Initializer), true (.full, .classicBalanced, .fullClassicPaper) Zakres: boolean
TECHNICZNIE
Na końcu fazy Densification (iteracja T2) wykonywany jest jednorazowy przebieg łączenia (merge), który znajdujące się blisko siebie Gaussiany o podobnej skali i kolorze łączy ze sobą. Redukuje liczbę Gaussianów zazwyczaj o 5–15 % bez widocznej utraty jakości. Sens: po intensywnym klonowaniu powstają skupiska niemal identycznych Gaussianów, które nie wnoszą nic nowego — merging zwalnia pojemność optymalizatora dla innych obszarów. Standard w klasycznych Presetach jakości. Przy MCMC nie stosowane, ponieważ MCMC dzięki swojej logice relokacji w ogóle nie dopuszcza do powstania takich skupisk.
T54densifyPhase2FromIteration
SZCZEGÓŁY
Domyślnie: 0 (= wyłączone) Zakres: 0 lub T2 – T1
TECHNICZNIE
Eksperymentalne: umożliwia drugą fazę Densification, która po pauzie refinement zaczyna się przy tej iteracji i trwa do T55. Hipoteza: po fazie refinement akumulatory gradientu mają stabilniejsze wielkości i mogą dokładniej wskazać, które obszary wciąż potrzebują dodatkowych Gaussianów. W praktyce druga faza Densification kończy się kaskadą aż do zera Gaussianów — razem z przycinaniem refinement (T40) całkowicie opróżnia bufor. Dlatego we wszystkich Presetach ustawione jest na 0 i nie da się tego zmienić w interfejsie.
T55densifyPhase2UntilIteration
SZCZEGÓŁY
Domyślnie: 0 Zakres: 0 lub T54 – T1 Zdefiniowane w:
TECHNICZNIE
Koniec drugiej fazy Densification. Istotne tylko gdy T54 > 0. Oba pola razem są wyłączone.
Postprodukcja + Apple AI (T56–T60)
T56postTrainingCompactification
SZCZEGÓŁY
Domyślnie: true (we wszystkich presetach produkcyjnych), false (.quickTest, .preview) Zakres: boolean
TECHNICZNIE
Po zakończeniu treningu Gaussiany z sigmoid(opacity) < 0.01 są twardo usuwane (praktycznie nie wnoszą już nic do obrazu). Redukuje liczbę Gaussianów typowo o 58 % i rozmiar pliku eksportu o 55 % bez widocznej utraty jakości. Domyślnie aktywne w presetach produkcyjnych — końcowy rezultat powinien być dostarczany możliwie kompaktowo. W .quickTest wyłączone, ponieważ przebieg diagnostyczny i tak nie jest eksportowany. W przeciwieństwie do T42 midTrainingCompactificationIterations kompaktyfikacja odbywa się dopiero na końcu — do tego momentu refinement może korzystać ze wszystkich Gaussianów.
T57metalFXUpscaling
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
⚠ Od 2026-07-18 wyłączone i bez żadnego efektu. Pole należało do pickera „Viewport Scaling" (Off/MetalFX/Lanczos) w Inspectorze. Renderer nigdy go nie odczytywał: decyzja o blicie jest czysto geometryczna (przy renderowaniu z supersamplingiem ⇒ downsampling MPS-Lanczos w celu wygładzenia krawędzi, w przeciwnym razie bilinearnie), a dla ścieżki MetalFX w ogóle nie było miejsca wywołania. Picker i oba fałszywe komunikaty, które karmił, zostały usunięte; etykieta nakładki nazywa się teraz „Sampling", a nie „Scaling", i nigdzie w aplikacji nie skaluje się w górę za pomocą MetalFX. Samo pole pozostaje, ponieważ konfiguracja treningu jest zapisywana w całości — tkwi ono w każdej zapisanej scenie, w każdym presecie i w komentarzu ustawień już wyeksportowanych plików PLY; usunięcie spowodowałoby ciche pominięcie klucza przy ponownym zapisie i zepsucie tej wymiany danych. Z tego samego powodu pole jest wykluczone z porównania „Modified": stara scena może nosić true, i nie ma już żadnego sposobu, by zresetować to przez interfejs. Nikt tego nie odczytuje — nie podłączaj tego z powrotem.
T58mpsLanczosScaling
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
⚠ Od 2026-07-18 wyłączone i bez żadnego efektu — zobacz T57 metalFXUpscaling, tam też wyjaśniono, dlaczego to pole mimo wszystko musi pozostać zapisywane. Warto wyraźnie wskazać oczywiste mylne wrażenie: aplikacja faktycznie używa MPS-Lanczos w viewporcie, ale steruje tym wyłącznie geometria — obraz renderowany z supersamplingiem jest downsamplowany w celu wygładzenia krawędzi. To jest skalowanie w dół, a nie w górę, i to pole nigdy go nie wywoływało.
T59livePreviewInterval
SZCZEGÓŁY
Domyślnie: 50 (inicjalizator; presety nie ustawiają tego pola) Zakres: 0 (wył.), 50, 250 lub 1 000 w pickerze ustawień
TECHNICZNIE
Jak często podczas treningu podgląd 3D jest aktualizowany aktualnymi Gaussianami. 50 = nowy render co 50 iteracji — wystarczająco dobrze, by obserwować postęp, nie spowalniając treningu w odczuwalny sposób. 0 = viewport w ogóle nie jest aktualizowany (trening w tle, maksymalne tempo). Przy długich przebiegach MCMC opłaca się 250 lub 1 000, ponieważ narzut aktualizacji sumuje się do zauważalnej wartości. Rola szczególna: pole to należy wprawdzie do konfiguracji treningu, ale jest ustawieniem ogólnoaplikacyjnym (Ustawienia → Trening) a nie częścią receptury treningowej. Dlatego jest wykluczone z porównania „Modified", zachowuje się przy zmianie presetu i od 2026-07-18 nie jest już przejmowane z pliku przy otwieraniu sceny — wcześniej wczytana scena po cichu zastępowała częstotliwość odświeżania użytkownika tą autora sceny, wliczając „Wył.", i nie było żadnego drugiego miejsca, z którego dałoby się ją odzyskać.
T60perceptualLossWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone) Zakres: 0 lub 0.001 – 0.5
TECHNICZNIE
Waga percepcyjnego składnika funkcji straty (dopasowywanie cech metodą multi-scale-blur). Uchwytuje podobieństwo strukturalne i teksturalne na wyższym poziomie niż L1+SSIM — typowo tam, gdzie „piksel w piksel" jest mniej istotne niż „wygląda realistycznie". Wartość we wszystkich presetach wynosi 0.0 (wył.). W interfejsie ustawiasz to suwakiem Perceptual Loss w sekcji Inspectora „Training", zakres od 0 do 0,20 z krokiem 0,01; przy 0 aplikacja wyświetla „Off".
Densyfikacja MCMC (T61–T73)
T61densificationStrategy
SZCZEGÓŁY
Domyślnie: .classic (Initializer + presety Classic), .mcmc (wszystkie presety MCMC + Scene-Class) Zakres: .classic lub .mcmc
TECHNICZNIE
Wybiera między Classic-Densification (klonowanie/podział/przycinanie, Kerbl et al.~2023) a MCMC-Densification (Stochastic Gradient Langevin Dynamics z relokacją, Kheradmand et al.~NeurIPS 2024). Przy .classic stosowane są T11–T16, przy .mcmc T62–T73. Uwaga przy zmianie: wartości domyślne Classic i MCMC są kalibrowane zupełnie inaczej — kto przełączy pole wyboru w widoku eksperckim bez załadowania odpowiedniego presetu, ryzykuje masową ekstynkcję w stylu buga z 1.4.3 (460 K → 5 w jednej iteracji, ponieważ MCMC-OpacityReg na poziomie 0.01 zabija Classic-Opacities). Dlatego wartości domyślne inicjalizacji MCMC są celowo „złagodzone" (wszystkie wartości Reg wynoszą 0.0).
T62mcmcMaxGaussians
SZCZEGÓŁY
Domyślnie: 150 000 (Initializer + .fullMCMC + .mcmcBalanced), 100 000 (.mcmcPreview), 1 500 000 (.fullMCMCMip — wariant Mip-Splatting z 10× budżetem), 1.19 M (.renderPreset), 1.25 M (.outdoorPreset), 670 K (.indoorPreset) Zakres: 0 (= „użyj pojemności bufora") lub 10 000 – 5 000 000 Zdefiniowano w:
TECHNICZNIE
Twarda górna granica liczby Gaussianów przy strategii MCMC. Liczba rośnie stopniowo o T70 mcmcGrowthRate (typowo 5 %) na krok relokacji, aż do osiągnięcia tego limitu. 150 K to dobra wartość wyjściowa — znacznie powyżej jakość splatów się rozrzedza (zbyt wiele małych, zbędnych Gaussianów), znacznie poniżej scena pozostaje niedostatecznie zdensyfikowana. Przy bardzo dużych scenach (np. lot dronem z 1 545 zdjęciami i 158 K SfM-init) 150 K jest za mało — stąd rozszerzenie z 1.4.5, T72 mcmcCapMultiplier + T73 mcmcAutoScaleByScene. Presety Scene-Class używają wartości specyficznych dla sceny, między 670 K (Indoor) a 1.25 M (Outdoor). Przy wartości 0 silnik używa pełnej pojemności bufora jako limitu.
T63mcmcNoiseScale
SZCZEGÓŁY
Domyślnie: 0.00005 (5e-5 = wartość domyślna z artykułu) Zakres: 1e-6 – 1e-3
TECHNICZNIE
Mnożnik szumu Gaussa, który jest dodawany do pozycji każdego Gaussiana w każdej iteracji MCMC (logika SGLD). Wyższy = więcej eksploracji (Gaussiany bardziej się przemieszczają, potencjalnie znajdują lepsze miejsca), niższy = więcej eksploatacji (Gaussiany pozostają tam, gdzie już są dobre). 5e-5 to odpowiednia wartość — wyraźnie mniejsza oznacza za mało eksploracji, wyraźnie większa (1e-4) za dużo, wtedy splaty się rozmywają. Jest stopniowo redukowany przez czas treningu (cosine-decay) aż do T69 mcmcNoiseDecayEnd — pod koniec zakresu decay szum jest efektywnie równy 0 i Gaussiany się stabilizują.
T64mcmcOpacityRegWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone w domyślnych ustawieniach RadianceKit, artykuł: 0.01) Zakres: 0 lub 0.001 – 0.05
TECHNICZNIE
Specyficzna dla MCMC kara L1 na opacity. Domyślna wartość z artykułu 0.01 (dociska nieużywane Gaussiany do zera, czyniąc je dostępnymi do relokacji). W RadianceKit wynik bez tej regularyzacji jest wymiernie lepszy. Powód: kryterium przycinania zdefiniowane przez T68 mcmcDeadOpacityThreshold wystarcza samo w sobie — dodatkowa kara L1 zmusza do „śmierci" także wartościowe Gaussiany o niskiej opacity. Stąd wartość domyślna 0. Uwaga: w wersji beta 1.4.3 wartość domyślna w inicjalizatorze była błędnie ustawiona na 0.01, co skutkowało bugiem masowej ekstynkcji (patrz wyjaśnienie do T61); od 1.4.4 poprawiona na 0.0.
T65mcmcScaleRegWeight
SZCZEGÓŁY
Domyślnie: 0.0 (= wyłączone, artykuł: 0.01) Zakres: 0 lub 0.001 – 0.05
TECHNICZNIE
Specyficzna dla MCMC kara L1 na wartości własne skali. Domyślna wartość z artykułu 0.01. Także tutaj wynik bez regularyzacji jest lepszy, z tego samego powodu co przy T64. Wyłączone we wszystkich presetach MCMC RadianceKit. Uwaga jak przy T64: bug z 1.4.3.
T66mcmcRelocationInterval
SZCZEGÓŁY
Domyślnie: 100 (Initializer + wszystkie presety MCMC, standard z artykułu), 155 (P9 Outdoor) Zakres: 50 – 500
TECHNICZNIE
Interwał iteracji, w którym MCMC relokuje martwe Gaussiany (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold) do nowych pozycji. Krótsze interwały (np. 50) działają zbyt destrukcyjnie, funkcja strat waha się; wyraźnie dłuższe (np. 200) odbierają MCMC zdolność reakcji. 100 to właściwa wartość. Dla scen zewnętrznych jest ona nieco wyższa (155) — dłuższe interwały dają Adamowi więcej czasu na zintegrowanie nowo umieszczonych Gaussianów, zanim kolejne zdarzenie relokacji ponownie je obciąży.
T67mcmcWarmupIterations
SZCZEGÓŁY
Domyślnie: 500 Zakres: 100 – 5 000
TECHNICZNIE
Liczba iteracji początkowych, w których jeszcze nie zachodzi relokacja MCMC. Dopiero po tym rozgrzewaniu zaczyna się logika relokacji. Sens: w pierwszych iteracjach wartości opacity nie są jeszcze ustabilizowane — gdyby relokacja zaczynała się od razu, Gaussiany byłyby umieszczane w złych miejscach i musiałyby zaraz być ponownie przesunięte, co niszczy Adam-momentum. Domyślna wartość z artykułu to 500. RadianceKit przejmuje tę wartość, ponieważ okazała się solidna.
T68mcmcDeadOpacityThreshold
SZCZEGÓŁY
Domyślnie: 0.005 (Initializer, standard z artykułu), 0.01 (.fullMCMC i wszystkie presety MCMC) Zakres: 0.001 – 0.05
TECHNICZNIE
Próg sigmoid(Opacity), poniżej którego Gaussian uznawany jest za „martwy" i kwalifikuje się do relokacji. 0.01 to odpowiednia wartość — 0.005 zmienia niewiele, 0.02 jest gorsze. Wyższa wartość = bardziej agresywna relokacja (więcej Gaussianów jest przesuwanych), niższa = ostrożniejsza. 0.01 odpowiada w przybliżeniu „0.5% widoczności wizualnej". P10 Indoor używa 0.0142.
T69mcmcNoiseDecayEnd
SZCZEGÓŁY
Domyślnie: 0 (Initializer = „brak decay"), 160 000 (.fullMCMC = 80 % z 200K), 96 000 (.mcmcBalanced = 80 % z 120K), 40 000 (.mcmcPreview) Zakres: 0 lub 1 000 –
TECHNICZNIE
Iteracja, przy której szum T63 mcmcNoiseScale jest w pełni tłumiony do zera (cosine-decay od iteracji 0 do tego punktu). 80 % maxIterations to odpowiednia wartość — daje to MCMC wystarczająco czasu na eksplorację, ale pozostawia ostatnie 20 % na konwergencję bez szumu. 0 = stały szum przez wszystkie iteracje (rzadko sensowne, MCMC nie może wtedy zbiegać).
T70mcmcGrowthRate
SZCZEGÓŁY
Domyślnie: 0.05 (standard z artykułu = 5 %) Zakres: 0.01 – 0.2
TECHNICZNIE
Tempo wzrostu docelowej populacji MCMC na krok relokacji. Logika: przy każdym zdarzeniu relokacji docelowy rozmiar populacji zwiększany jest o (1 + growthRate), aż do osiągnięcia T62 mcmcMaxGaussians (lub wariantu przeskalowanego przez T72/T73). 0.05 to odpowiednia wartość — wyższe wartości prowadzą do zbyt szybkiego wzrostu (Gaussiany są wstawiane, zanim Adam-momentum zdąży je zintegrować), niższe do niedostatecznie zdensyfikowanych scen na końcu.
T71mcmcSigmoidK
SZCZEGÓŁY
Domyślnie: 100.0 Zakres: 10.0 – 500.0 Zdefiniowano w:
TECHNICZNIE
Parametr ostrości sigmoidy dla tłumienia szumu MCMC. W kroku SGLD szum dla poszczególnych Gaussianów jest tłumiony — wysoko-opakowe Gaussiany (których logit jest dodatni) otrzymują wykładniczo mniej szumu niż nisko-opakowe. K = 100 jest ostre, tzn. przejście od „pełnego szumu" do „braku szumu" następuje bardzo szybko w okolicach opacity 0.5. K = 100 to odpowiednia wartość — mniejsze wartości (10–50) pozwalają także wysoko-opakowym Gaussianom „drżeć" (niszczy to skonwergowane Gaussiany), większe (> 500) czynią przejście sztucznie twardym, a martwe Gaussiany w ogóle przestają się przesuwać.
T72mcmcCapMultiplier
SZCZEGÓŁY
Domyślnie: 3.0 (Initializer + .fullMCMC), 2.0 (.mcmcPreview), 2.5 (.mcmcBalanced), 2.98 (P8 Render), 5.32 (P9 Outdoor), 1.76 (P10 Indoor) Zakres: 0 (= wyłączone) lub 1.0 – 10.0
TECHNICZNIE
Funkcja z 1.4.5: adaptacyjne do sceny skalowanie limitu. Jeśli T73 mcmcAutoScaleByScene jest true, efektywny limit jest obliczany (przycięty do pojemności bufora). Tło: przy dużych scenach (np. lot dronem z 1 545 zdjęciami → 158 K SfM-init) T62 = 150 000 jest za niskie — kontrola gęstości w ogóle nie mogłaby rosnąć. Przy mnożniku 3.0 limit w tym przykładzie zostaje przeskalowany do 474 K (158 K × 3.0). Presety Scene-Class używają wartości specyficznych dla sceny: Outdoor korzysta z wysokiego mnożnika (5.32 → ~830 K limitu przy 156 K punktów początkowych), Indoor zadowala się 1.76 (ściany szybciej się nasycają). Pełne rozwiązanie limitu patrz metoda .
T73mcmcAutoScaleByScene
SZCZEGÓŁY
Domyślnie: true (Initializer + wszystkie presety MCMC) Zakres: boolean
TECHNICZNIE
Funkcja z 1.4.5: główny przełącznik dla logiki limitu uwzględniającej scenę (patrz T72 +). Jeśli false, jako limit używane jest wyłącznie T62 mcmcMaxGaussians (powrót do zachowania z 1.4.4). Domyślnie włączone, ponieważ w przeciwnym razie problemy z masową ekstynkcją przy dużych scenach z 1.4.3 by wracały. Wyłączaj ręcznie tylko wtedy, gdy chcesz wyraźnie ustawić twardy limit — np. by wytrenować wariant 150 K, którego rozmiar końcowy ma być przewidywalny.
Mip-Splatting (T74–T76)
Status: Mip-Splatting nie przyniósł w praktyce zysku jakościowego, a w niektórych scenach plenerowych wręcz zaszkodził. Pola pozostają opt-in do eksperymentów; we wszystkich dostarczanych presetach Mip-Splatting jest wyłączony.
T74useMipSplatting
SZCZEGÓŁY
Default: false (wszystkie presety produkcyjne), true (.fullMCMCMip — badawczy sibling) Range: boolean
TECHNICZNIE
Aktywuje Mip-Splatting (Yu et al.~CVPR 2024): filtr wygładzający 3D + filtr 2D + kompensacja α, który ogranicza częstotliwość per-Gaussian do granicy Nyquista najgęstszej częstości próbkowania kamer treningowych. Teoretyczny cel: eliminacja aliasingu przy renderowaniu w skalach poza treningową (0.5× lub 2× rozdzielczości treningowej). W shaderach preprocess i backward-projection jest aktywny i działa poprawnie. W praktyce jednak oczekiwany zysk jakościowy się nie pojawił: przy renderowaniu w rozdzielczości treningowej praktycznie nic się nie zmienia, a w scenach plenerowych obraz nawet się pogarsza. Jedno z wyjaśnień: wygładzanie 3D działa przeciwko relokacji MCMC, gdy w grze jest wiele Gaussianów. Pole pozostaje dostępne do własnych eksperymentów multi-scale.
T75mipSmoothing3DScale
SZCZEGÓŁY
Default: 0.2 (wartość domyślna z pracy naukowej) Range: 0.05 – 1.0
TECHNICZNIE
Parametr skali wygładzania 3D (Yu et al.~§3.3, domyślna wartość z pracy naukowej 0.2). Większa wartość = więcej wygładzania w przestrzeni świata na Gaussian (= więcej anti-aliasingu, ale też więcej rozmycia przy domyślnej skali), mniejsza = ostrzej, ale bardziej podatnie na aliasing. Jest brana pod uwagę tylko, gdy T74 useMipSplatting = true. Nie optymalizowana dalej — już przy domyślnej wartości z pracy naukowej 0.2 Mip-Splatting nie przynosi zysku.
T76mipFilter2DVariance
SZCZEGÓŁY
Default: 0.3 (= dokładnie dotychczasowe zachowanie) Range: 0.1 – 1.0
TECHNICZNIE
Wariancja filtra Mip 2D, dodawana do przekątnej Σ_2D (wariancja bezpośrednio, bez podnoszenia do kwadratu). 0.3 to dokładnie wartość, która przed Mip-Splatting była na stałe wpisana w kernelu. Gdy T74 useMipSplatting = false, kernel całkowicie ignoruje tę wartość i zapisuje zakodowane na stałe 0.3 — dzięki czemu dotychczasowe zachowanie z gwarancją się nie zmienia. Gdy jest włączony, używana jest wartość ustawiona tutaj. Pozostaje w katalogu pól do sweepów Mip.
Adaptive Densification (T77–T79)
T77adaptiveDensification
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
Rolling-Median-Tracker jako alternatywa dla stałego T11 densifyGradThreshold. Jeśli true, w każdym kroku Densify aktualny próg jest nadpisywany wartością median(ostatnie N próbek avgGrad) × T79 adaptiveDensifyMultiplier. N = T78 adaptiveWindow. Bardziej rygorystyczne niż wariant p98 z T52, który uruchamia tam Mass-Pruning: mediana razy 2 w stanie ustalonym mieści się mniej więcej w p70–p80 rozkładu gradientów. Samo w sobie, włączone osobno, pole to nie przynosi zysku jakościowego; w połączeniu z curriculum (patrz T80/T81) już tak — tam to curriculum niesie zysk, a to pole raczej stabilność. Nie ma dla niego elementu sterującego: pole jest wyłączone we wszystkich presetach i można je ustawić tylko poprzez edytowany plik presetu.
T78adaptiveWindow
SZCZEGÓŁY
Domyślnie: 1 000 Zakres: 100 – 10 000 Zdefiniowane w:
TECHNICZNIE
Rolling-Median-Window w zdarzeniach Densification (NIE iteracjach — każdy krok T13 densifyInterval dostarcza jedną próbkę). Domyślnie 1 000 — oznacza to, że ostatnie 100 000 iteracji treningu wpływa na medianę, czyli zazwyczaj cała historia treningu do tego momentu. Wczesna faza (przed osiągnięciem T78 próbek): tracker zwraca nil → powrót do stałego progu T11. Istotne tylko gdy.
T79adaptiveDensifyMultiplier
SZCZEGÓŁY
Domyślnie: 2.0 Zakres: 1.0 – 4.0
TECHNICZNIE
Mnożnik dla rolling median wyznaczający próg adaptacyjny. Domyślne 2.0 odpowiada mniej więcej p70–p80 typowego rozkładu gradientów. Niższa wartość = bardziej agresywny wzrost (więcej klonów), wyższa = bardziej rygorystycznie (mniej klonów). W zakresie 1.5–3.0 wartość 2.0 jest najlepsza. Istotne tylko gdy.
Curriculum (T80–T81)
T80curriculumResolutionRamp
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
Rozdzielczość treningowa zaczyna się od 0.5× i przełącza się przy T50 positionLRScheduleEndIteration / 2 (lub T1 maxIterations / 2, jeśli T50 nie jest ustawione) na T22 trainingRenderScale. Nadpisuje T23 resolutionWarmupScale, jeśli aktywne. Z dwóch adaptacyjnych dodatków (patrz T77) to właśnie ten program treningowy przynosi rzeczywisty zysk jakości — stopniowe zwiększanie rozdzielczości daje aplikacji czas na znalezienie zgrubnej geometrii w niższej rozdzielczości, zanim przejdzie do dopracowywania drobnych detali. Nie da się tego zmienić w interfejsie — tylko poprzez edytowany plik presetu, i wtedy sensownie razem z T81.
T81curriculumSHProgression
SZCZEGÓŁY
Domyślnie: false Zakres: boolean
TECHNICZNIE
Nadpisuje T21 shDegreeUpgradeIterations wartościami [maxIter/4, maxIter/2, maxIter*3/4], rozkładając więc podwyższenia stopnia SH równomiernie na cały czas treningu zamiast ładować je na początek. Hipoteza: stabilna geometria zostaje ustalona przed eksplozją szczegółów koloru, co precyzyjniej pozycjonuje efekty połysku zależne od kierunku patrzenia. W połączeniu z T77 przynosi to zysk w niektórych scenach; niesie go to pole, samo T77 nie wystarczy. Nie da się tego zmienić w interfejsie — tylko poprzez edytowany plik presetu.
Statyczne presety (TP1–TP9)
Tutaj tylko strukturalne różnice względem domyślnych wartości Initializera. Pełny opis marketingowy jedenastu presetów UI P1–P11 znajdziesz w rozdziale 7.
TP1.preview
SZCZEGÓŁY
Preset diagnostyczny/podglądowy dla systemów ≥ 10 GB RAM. Zmiany względem Initializera:
maxIterations30 000 → 5 000densifyUntilIteration15 000 → 3 500 (70 % maxIter)positionLearningRateFinal1.6e-6 → 1.6e-5 (10× wyższe, mniej agresywny zanik)shDCLearningRate,shRestLearningRate,opacityLearningRate,scaleLearningRate,rotationLearningRatekażdorazowo 2×opacityResetInterval3 000 → 100 000 (efektywnie wyłączone — reset niszczyłby krótkie treningi)shDegreeUpgradeIterations[1K, 2K, 3K]→[1K, 2K](stopień 3 nie zdąży się zbiec w tak krótkim przebiegu)trainingRenderScale1.0 → 0.5
TP2.full
SZCZEGÓŁY
Klasyczny preset produkcyjny najwyższej jakości. Zmiany:
maxIterations30 000 → 35 000 (powyżej grozi przetrenowanie: więcej Gaussianów bez zysku jakościowego)densifyUntilIteration15 000 → 5 000 (sprawdzona wartość; późniejsze zatrzymanie daje gorsze wyniki)- Wszystkie LR ×2
positionLearningRateFinal1.6e-6 → 1.6e-5 (10× wyższe niż domyślna wartość z papieru)densifyGradThreshold2e-6 → 1.1e-6 (skalibrowane dla rozdzielczości 1.0×)densifyInterval100 → 200pruneOpacityThreshold0.005 → 0.001opacityResetInterval3 000 → 100 000 (efektywnie wyłączone)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K](opóźnione podwyższanie stopnia)opacityDecayFactor0.0 → 0.9995 (schemat HTGS, wyraźny zysk jakościowy)opacityDecayInterval50 (bez zmian)mergeAfterDensificationfalse → truepositionLRScheduleEndIteration0 → 20 000postTrainingCompactificationtrue (już domyślnie w Initializerze dla.full)
TP3.fullClassicPaper
SZCZEGÓŁY
Wariant TP2 wierny oryginalnemu papierowi, klasyczny. Zmiany względem TP2:
maxIterations35 000 → 30 000 (standard z papieru)densifyUntilIteration5 000 → 15 000 (papier: 50 % maxIter)positionLearningRateFinal1.6e-5 → 1.6e-6 (wartość domyślna z papieru)opacityLearningRate,scaleLearningRate,rotationLearningRatez powrotem na wartości domyślne z papieru (0.05, 0.005, 0.001)densifyGradThreshold1.1e-6 → 2e-7 (skalibrowane dla ~1–2 M Gs na scenie Bicycle)densifyInterval200 → 100 (papier)pruneOpacityThreshold0.001 → 0.005 (wartość domyślna z papieru)opacityResetInterval100 000 → 3 000 (papier §5.2, ryzykowne — w konfiguracji RadianceKit kosztuje to jakość)opacityDecayFactor0.9995 → 0.0 (papier nie stosuje zaniku)positionLRScheduleEndIteration20 000 → 30 000 (cosine przebiega przez 100 % maxIter)
TP4.fullMCMC
SZCZEGÓŁY
Produkcyjny preset MCMC najwyższej jakości. Zmiany względem Initializera:
maxIterations30 000 → 200 000 (MCMC potrzebuje około 5× więcej iteracji niż Classic)densifyUntilIteration15 000 → 160 000 (80 % maxIter)positionLearningRateFinal1.6e-6 → 1.6e-5- Harmonogram LR jak w TP2 (wszystkie ×2)
ssimWeight0.2 → 0.05 (MCMC potrzebuje silniejszego sygnału L1)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K]densificationStrategy.classic→.mcmcmcmcMaxGaussians150 000 (już w Initializerze, potwierdzone w presecie)mcmcNoiseScale5e-5 (wartość z papieru, sprawdzona)mcmcDeadOpacityThreshold0.005 → 0.01mcmcNoiseDecayEnd0 → 160 000 (80 % maxIter)mcmcCapMultiplier3.0 (już w Initializerze)mcmcAutoScaleByScenetrue (już w Initializerze)opacityResetInterval3 000 → 200 000 (efektywnie wyłączone, MCMC używa Reloc zamiast resetu)
TP5.fullMCMCMip
SZCZEGÓŁY
Wariant TP4 z Mip-Splatting i budżetem Gaussianów z oryginalnego papieru. Zmiany względem TP4:
mcmcMaxGaussians150 000 → 1 500 000 (10×, rząd wielkości z papieru)useMipSplattingfalse → true (Mip włączony)
TP6.classicBalanced
SZCZEGÓŁY
Klasyczny preset średniej klasy. Zmiany względem TP2:
maxIterations35 000 → 20 000 (daje praktycznie taki sam efekt jak 30 000, przy zauważalnie krótszym czasie oczekiwania)positionLRScheduleEndIteration20 000 → 0 (cosine przebiega do maxIter = 20K, bez wydłużonej fazy)
TP7.mcmcPreview
SZCZEGÓŁY
Diagnostyka MCMC. Zmiany względem TP4:
maxIterations200 000 → 60 000densifyUntilIteration160 000 → 48 000 (80 %)mcmcMaxGaussians150 000 → 100 000mcmcNoiseDecayEnd160 000 → 40 000mcmcCapMultiplier3.0 → 2.0 (podgląd skaluje bardziej powściągliwie)
TP8.mcmcBalanced
SZCZEGÓŁY
MCMC średniej klasy. Zmiany względem TP4:
maxIterations200 000 → 120 000densifyUntilIteration160 000 → 96 000 (80 %)mcmcNoiseDecayEnd160 000 → 96 000 (80 %)mcmcCapMultiplier3.0 → 2.5 (pomiędzy 2.0 z Preview a 3.0 z Full)
TP9.quickTest
SZCZEGÓŁY
Czysty test funkcjonalny. Zmiany względem Initializera:
maxIterations30 000 → 1 000densifyUntilIteration15 000 → 500densifyGradThreshold2e-6 → 4e-6 (skalibrowane dla rozdzielczości 0.25×)densifyInterval100 → 50opacityResetInterval3 000 → 100 000 (wyłączone, bo czas trwania jest zbyt krótki)trainingRenderScale1.0 → 0.25
Jak aplikacja wyznacza limit Gaussianów
Wiążąca odpowiedź na pytanie „ile Gaussianów maksymalnie może wygenerować MCMC?". Wchodzą tu w grę trzy wielkości: ustawiona wartość z T62 mcmcMaxGaussians, liczba punktów startowych SfM twojej sceny oraz wcześniej zarezerwowana pojemność bufora. Aplikacja liczy w następującej kolejności:
+ Wartością wyjściową jest T62. Jeśli wynosi 0, aplikacja wstawia 150 000 — to bezpieczne minimum zapobiega incydentowi masowego wymierania z 1.4.3. + Jeśli T73 mcmcAutoScaleByScene jest włączone i T72 mcmcCapMultiplier większy niż 0, aplikacja porównuje wartość wyjściową z „punkty startowe × T72" i przyjmuje większą z tych dwóch wartości. + Na koniec ogranicza wynik do pojemności bufora.
Przykład: Bicycle (Mip-NeRF 360, 194 klatki zdjęciowe) → inicjalizacja SfM ~156 tys. punktów, T62 = 150 000, T72 = 5.32, auto-skalowanie włączone, pojemność bufora 8 mln. 156 tys. × 5,32 daje 830 tys., czyli więcej niż 150 000 i mniej niż 8 mln — efektywny limit wynosi więc 830 tys. Tej granicy trzyma się relokacja MCMC.
Oblicza rzeczywistą maksymalną liczbę splatów przy MCMC. Aplikacja bierze twoje ustawienie „Max Gaussians", sprawdza, ile punktów ma twoja scena na początku, i skaluje to mnożnikiem, jeśli włączone jest „Auto-scale by scene". Dzięki temu limit dostosowuje się do sceny, zamiast wymuszać tę samą wartość dla małej i ogromnej sceny. Nie musisz nic robić — aplikacja sama to wylicza na starcie treningu.
Które pole do czego? (ściąga)
| Cel | Pola do regulacji |
|---|---|
| Więcej szczegółów w oddali | T62 mcmcMaxGaussians w górę, T72 mcmcCapMultiplier 5+ |
| Więcej szczegółów ogólnie (Classic) | T1 maxIterations w górę (≤ 40K), T2 densifyUntilIteration ≤ 14 % wartości T1 |
| Redukcja unoszących się artefaktów w nagraniach z drona | T43 frustumCullEnabled wł., T20 skyMaskingEnabled wł., T45 skyDomeEnabled wł. |
| Ładne niebo w scenach plenerowych | T45 skyDomeEnabled wł., T47 skyDomeRadiusMultiplier 30–60 |
| Mniejszy plik eksportu | strategia .mcmc (T61), T56 postTrainingCompactification wł., T62 mcmcMaxGaussians ≤ 200K |
| Szybszy trening | T22 trainingRenderScale 0.5, T1 maxIterations o połowę mniej — ale nie oba naraz! |
| Lepsze rozbłyski światła | T21 shDegreeUpgradeIterations z [2K, 5K, 8K] (bez wczesnego przeciążenia), MCMC + 200K iteracji |
| Częstszy podgląd na żywo | T59 livePreviewInterval na 50 — najgęstsza wartość oferowana przez Ustawienia → Trening |
| Łagodniejsze przejścia przy cieniach | T17 ssimWeight nieco wyższe (0.15–0.25), ale nie ponad 0.3 |
| Utrzymanie kompaktowości wnętrz | Preset P10 Wnętrza (, T72 = 1.76) |
Niebezpieczne pola
Te pola mogą przy błędnej konfiguracji prowadzić do OOM, awarii aplikacji, masowego wymierania Gaussians lub bezużytecznych danych benchmarkowych. Do traktowania z ostrożnością:
- T11 densifyGradThreshold — zmniejszenie o połowę może wygenerować 2–4× tyle Gaussians, co szybko wysadza pamięć GPU. Trzeba też uważać: musi pasować do T22 trainingRenderScale (1.0× → 1e-6, 0.5× → 2e-6, 0.25× → 4e-6). - T72 mcmcCapMultiplier — przy dużych scenach z > 200 K punktów inicjalizacyjnych SfM i mnożnikiem > 5 powstaje rozwiązany limit (Resolved-Cap) rzędu milionów Gaussians. Na Makach z 36 GB RAM możliwy jest OOM. Wartość 5.32 dla scen plenerowych działa tylko dlatego, że powiązana scena referencyjna ma około 156 K punktów inicjalizacyjnych → limit 830 K. - T39 testViewIndices — ręczne ustawienie w pliku Preset może uczynić pomiar jakości bezużytecznym (wszystkie indeksy > N → brak danych wstrzymanych/holdouts). Zostaw listę pustą. - T64 mcmcOpacityRegWeight i T65 mcmcScaleRegWeight — W wersji 1.4.3-beta ustawione na 0.01, co prowadziło do masowego wymierania (460 K → 5 Gaussians w jednej iteracji). Od wersji 1.4.4 na stałe ustawione na 0.0, ale ręczne zwiększenie może odtworzyć ten problem. - T15 opacityResetInterval — jeśli nie wynosi 100 000+ (czyli efektywnie wyłączone), a trening trwa krócej niż 10 000 iteracji, reset niszczy zbieżność. Dlatego .preview ma ustawione 100 000 mimo maxIterations = 5 000. - T54/T55 densifyPhase2* — Druga faza densyfikacji kończy się kaskadą aż do zera Gaussians. Zostaw oba na 0. - T74 useMipSplatting — nie daje przyrostu jakości, a w niektórych scenach plenerowych może wręcz pogorszyć jakość obrazu. Domyślnie wyłączone, opt-in tylko do eksperymentów.
Jeśli jakieś pole znajduje się na tej liście, a chcesz je zmienić, zrób najpierw kopię zapasową swojego aktualnego Presetu (eksport jako JSON) i zastanów się, czy będziesz w stanie odtwarzalnie zmierzyć wynik — w przeciwnym razie później nie będziesz wiedzieć, czy doprowadziłeś do poprawy, czy pogorszenia.