Användarguide

Kapitel 6 — Träningskonfiguration

Förhandsgranskningspreset exporterat som JSON + visat i TextEdit — fälten id/name/category/version/createdAt/description, trainingConfig med alla relevanta parametrar (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, sex Bool-toggles)
Förhandsgranskningspreset exporterat som JSON + visat i TextEdit — fälten id/name/category/version/createdAt/description, trainingConfig med alla relevanta parametrar (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, sex Bool-toggles)

En typisk preset-JSON-export. Toppnivåfält: id (UUID), name, (classic | mcmc | sceneClass | custom), (schemaversion), (tidsstämpel), (fritext). Det inbäddade -objektet innehåller de parametrar som är kritiska för reproducerbarhet — vid import läses hela blocket in i träningskonfigurationen, och standardvärden från app-versionen fyller i de fält som saknas i JSON:en (t. ex. efter en app-uppdatering). Den som skickar ett preset till en annan Mac skickar helt enkelt bara vidare denna JSON-fil.

Träningskonfigurationen är kärnan i varje träningskörning i RadianceKit. Den samlar varje parameter som påverkar träningen — från det maximala antalet iterationer via de åtta inlärningshastigheterna till specialfälten för MCMC, Mip-Splatting, curriculum och den scenmedvetna cap-logiken. Du redigerar den i sidofältet i avsnittet Träningskonfigurations-sektion (Expert View), sparar den som ett preset eller lämnar den vidare som JSON-export till en annan Mac. Vid träning fryses precis detta objekt och skickas till GPU-backend:en.

Det här kapitlet är referensmaterial för avancerade användare. Det listar de 80 inställningsbara fälten i träningskonfigurationen, de 9 medföljande presetsen och den scenberoende upplösningen av Gaussian-cap:en. I tveksamma fall gäller det värde som det valda presetet sätter — du ser det i Inspector eller i presetets JSON-export.

Innehållsförteckning:

+ Iteration (T1–T2) + Learning Rates (T3–T10) + Densification — Classic (T11–T16) + Loss (T17–T20) + SH-Degree-Progression (T21) + Prestanda (T22–T24) + Diagnostik och förberedelse av punktmoln (T26–T30) + Regularisering (T31–T37) + Refinement (T38–T44) + Sky-Dome (T45–T48) + Adam + LR-Schedule (T49–T55) + Efterbehandling + Apple AI (T56–T60) + MCMC-Densification (T61–T73) + Mip-Splatting (T74–T76) + Adaptive Densification (T77–T79) + Curriculum (T80–T81) + Statiska presets (TP1–TP9) + Hur appen bestämmer Gaussian-cap:en + Vilket fält gör vad? (Cheat-sheet) + Farliga fält

Iteration (T1–T2)

T1maxIterations

DETALJER

Standard: 30 000 (Initializer), 35 000 (.full), 200 000 (.fullMCMC) Intervall: 1 000 – 500 000 (UI-slider), ingen hård övre gräns i logiken

TEKNISKT

Det totala antalet träningsiterationer som backend går igenom. En iteration avser en forward-rendering av en enskild träningskamera, en backward-pass över alla loss-komponenter (L1 + SSIM + eventuella regulariseringar + sky-mask) och ett Adam-optimerarsteg. Detta tal påverkar direkt de andra scheman: Position-inlärningshastigheten följer en cosine-annealing-kurva från 0 till antingen T1 själv eller till T50 positionLRScheduleEndIteration; Densification stoppar vid T2 densifyUntilIteration; MCMC-brusavklingningen slutar vid T69 mcmcNoiseDecayEnd; SH-degree-uppgraderingar sker vid de tre markeringar som definieras i T21. Vid klassisk densification ligger det beprövade intervallet på 20 000–35 000 iterationer, vid MCMC på 60 000–200 000. En drastisk ökning utöver de i förinställningen lagrade värdena ger sällan extra kvalitet — Adam-momentum mättas, och utan ett slut på LR-avklingningen stagnerar loss. Omvänt leder ett värde under ~5 000 till ofullständigt konvergerade geometrier (density control har för lite tid att klona/splitta).

T2densifyUntilIteration

DETALJER

Standard: 15 000 (Initializer), 5 000 (.full), 160 000 (.fullMCMC) Intervall: 0 – T1 maxIterations

TEKNISKT

Iterationen vid vilken densification upphör. Fram till denna punkt klonas, splittas och beskärs (prunas) Gaussianer enligt de regler som parametriseras i T11–T16 (Classic) eller T67–T70 (MCMC); därefter förblir antalet Gaussianer konstant och endast positioner, rotationer, skalor, opaciteter och SH-koefficienter optimeras vidare (förfiningsfas). I 3DGS-originalpapperet ligger värdet på 50 % av T1, i RadianceKits .full-förinställning på endast ~14 % (5 000 av 35 000): Efter cirka 5 000 iterationer försämrar ytterligare densifiering snarare resultatet — fler floaters, större minnesbehov, ingen kvalitetsvinst. MCMC däremot låter relokaliseringen köra till 80 % av T1, eftersom MCMC inte producerar skadliga floaters. Väljs T2 för litet (< 1 000), uppstår för få Gaussianer; för stort vid Classic (> 50 % av T1) leder till overgrowth och RGB-saturation-outliers (se resultaten om overtraining utomhus).

Learning Rates (T3–T10)

T3positionLearningRate

DETALJER

Standard: 0.00016 Intervall: 1e-7 – 1e-3 (rekommenderat)

TEKNISKT

Adam-inlärningshastighet för XYZ-positionen för varje Gaussian vid träningens start (iteration 0). Följer en cosine-annealing-kurva och sjunker under träningens gång till T4 positionLearningRateFinal. Standardvärdet 0.00016 kommer från 3DGS-originalpapperet (Kerbl et al.~2023) och ska i RadianceKit inte skalas ens vid ökad bildupplösning — positionen rör sig i världskoordinatsystemet, inte i pixelrymden. En tydlig höjning (> 0.0005) gör att Gaussians hoppar över långa avstånd och att förlusten blir instabil; värden klart under (< 0.00005) leder till att felaktigt initierade punktmoln aldrig hittar sin plats. För de allra flesta scener är standardvärdet därför rätt val. Observera: vid .fullMCMC lämnar vi medvetet detta värde vid standard — MCMC behöver konstanta inlärningshastigheter för sin relocation-logik, så att finjustera här ger inget.

T4positionLearningRateFinal

DETALJER

Standard: 0.0000016 (Initializer + papper), 0.000016 (.full, .fullMCMC — 10× högre) Intervall: 0 – T3 positionLearningRate

TEKNISKT

Slutvärde för positionens LR-cosine-annealing-kurva. Nås antingen vid T1 maxIterations eller, om satt, vid T50 positionLRScheduleEndIteration. RadianceKits .full-preset använder 0.000016 — alltså 10× högre än papprets standard 0.0000016. Både ett betydligt mindre slutvärde och ett betydligt större startvärde försämrar resultatet märkbart. Det höga slutvärdet är inget avvägning utan ett medvetet val: vid för stark decay förlorar Gaussians under förfiningsfasen sin förmåga att anpassa sig till nytillkomna densifieringskandidater. Schemafasen kan förkortas (T50 < T1), så att T4 nås redan innan träningen avslutas och resten av träningen körs vid konstant mini-LR — typisk konfiguration: T50 = 20 000, T1 = 35 000, förfining alltså vid 0.000016 i 15 000 iterationer.

T5shDCLearningRate

DETALJER

Standard: 0.0025 (Initializer + papper), 0.005 (.full och alla MCMC-presets — 2×) Intervall: 0.0001 – 0.05

TEKNISKT

Adam-inlärningshastighet för DC-andelen (grad 0, alltså konstant albedo) av den sfäriska övertonsfärgen. SH-DC motsvarar den riktningsoberoende grundtonen för en Gaussian, så att säga "basfärgen". RadianceKit fördubblar papprets standard i quality-presets — det påskyndar färgkonvergensen, vilket behövs eftersom SH-DC vid kort träning (< 5 000 iterationer) annars inte hinner formas. Till skillnad från de geometriska LR:erna har SH-DC ingen decay; inlärningshastigheten förblir konstant över alla iterationer (eller följer bara den valfria extended-phase-decay från T51). Ännu klart högre värden (kring 0.01) försämrar resultatet igen och gör färgerna instabila.

T6shRestLearningRate

DETALJER

Standard: 0.000125 (Initializer + papper), 0.00025 (.full och MCMC — 2×) Intervall: 0.000001 – 0.005

TEKNISKT

Adam-inlärningshastighet för SH-koefficienterna av högre ordning (grad 1, 2, 3 — alltså de riktningsberoende färgandelarna som ger glansdagrar, reflektioner och mjuk skuggning). 20× mindre än T5 enligt pappersskonvention, eftersom dessa koefficienter växer kvadratiskt i antal (3 för grad 1, 5 för grad 2, 7 för grad 3 → totalt 15 flyttal per Gaussian) och utan lägre inlärningshastighet skulle mätta bilden. Låses upp i två steg — fram till första gränsen i T21 shDegreeUpgradeIterations är endast grad 0 aktiv (alltså bara T5), sedan 1, senare 2, slutligen 3. Låga värden här är särskilt viktiga i scener med mycket diffust ljus; för mycket glänsande ytor (billack, vatten) lönar sig ingen justering — själva SH-representationen är begränsad.

T7opacityLearningRate

DETALJER

Standard: 0.05 (Initializer + papper), 0.1 (.full, MCMC — 2×) Intervall: 0.001 – 1.0

TEKNISKT

Adam-inlärningshastighet för logit-opaciteten för varje Gaussian. Appen lagrar opacitet som ett obegränsat flyttalsvärde och transformerar det med sigmoid till [0, 1]; LR verkar i logit-rymden. Quality-presets fördubblar papprets standard till 0.1; det gör pruning mer effektiv — döda Gaussians faller snabbare under T14 pruneOpacityThreshold. Vilket värde som fungerar bäst beror på Adam-konfigurationen; samspelet mellan de två är inte trivialt. Låga värden (< 0.01) leder till att "döda" Gaussians ligger kvar för evigt och förbrukar minne; för höga värden (> 0.5) kan leda till opacitetsexplosion, därför begränsar optimeraren logit-värdet strikt till [-15, 3].

T8opacityLearningRateFinal

DETALJER

Standard: 0.0 (= "ingen decay") Intervall: 0 eller 0.001 – T7 opacityLearningRate

TEKNISKT

Valfritt cosine-decay-slutvärde för opacitets-LR. Om 0.0 är decay avaktiverad och opacitets-LR förblir konstant på T7 under hela träningen. En decay från 0.1 till 0.01 försämrar resultatet markant; därför står standarden på "av". Hypotesen bakom fältet: i förfiningsfasen skulle konstant opacitets-LR kunna leda till oscillation, så att splats som redan nått rätt grad av transparens förskjuts igen av slumpmässiga gradientvariationer. Empiriskt bekräftas inte detta — logit-klampningslogiken fångar upp det ändå. Fältet förblir tillgängligt för framtida experiment; även mycket långa MCMC-körningar (> 500K iterationer) skulle kunna dra nytta av det.

T9scaleLearningRate

DETALJER

Standard: 0.005 (Initializer + papper), 0.01 (.full, MCMC — 2×) Intervall: 0.0001 – 0.1

TEKNISKT

Adam-inlärningshastighet för de tre skalkomponenterna för varje Gaussian i log-rymden (RadianceKit lagrar log(scale), så att skalan förblir positiv). Papprets standard 0.005, i RadianceKit fördubblad till 0.01 för bättre skalkonvergens vid de avstämda inlärningshastighetskonfigurationerna. Om värdet i kombination med de övriga quality-inlärningshastigheterna hålls vid papprets standard uppstår märkbart för få Gaussians — density-control kan inte klona, eftersom skaluppdateringarna hänger med för långsamt. Skalan styr utbredningen av varje Gaussian — för snabb inlärning leder till "needle"-Gaussians (extremt långa tunna splats, se T34 scaleRatioPruneThreshold), för långsam inlärning gör att splats förblir för kompakta och density-control måste dela för ofta.

T10rotationLearningRate

DETALJER

Standard: 0.001 (Initializer + papper), 0.002 (.full, MCMC — 2×) Intervall: 0.0001 – 0.05

TEKNISKT

Adam-inlärningshastighet för de fyra kvaternionkomponenterna för varje Gaussian. Kvaternionen normaliseras vid varje optimerarsteg efter Adam-uppdateringen igen (L2-norm = 1) — annars skulle kovariansmatrisen degenerera. RadianceKit fördubblar papprets standard i quality-presets, eftersom rotation jämfört med skala/position har mindre absoluta gradientmagnituder (på enhetssfären förblir varje steg kort) och utan 2× skulle rotationen inom 35 000-iterationsfönstret bli klart underkonvergerad. På NeRF-Blender-scener (Lego, Chair) märks rotationens effekt särskilt — objektens kanter riktar in sig ordentligt först efter 5 000–10 000 iterationer.

Densification — Klassisk (T11–T16)

T11densifyGradThreshold

DETALJER

Standard: 0.000002 (Initializer, kalibrerad för 0.5× upplösning), 0.0000011 (.full, kalibrerad för 1.0×), 0.000004 (.quickTest, kalibrerad för 0.25×), 2e-7 (.fullClassicPaper) Intervall: 1e-8 – 1e-3 (upplösningsberoende)

TEKNISKT

Tröskelvärde för L2-normen av den skärmrymdsprojicerade positionsgradienten, ovanför vilket en Gaussian markeras för kloning eller splittning. Det absoluta värdet beror direkt på träningsupplösningen — det skalar ungefär som 1/upplösning² (fler pixlar = mindre gradienter per pixel). Därför behöver varje T22 trainingRenderScale-nivå ett kalibrerat tröskelvärde: 0.25× → 4e-6, 0.5× → 2e-6, 1.0× → 5e-8 … 1.1e-6 (.full). Paper-standarden 0.0002 är NDC-normaliserad och inte direkt jämförbar i RadianceKits världsrymd-pipeline. Med flaggan T52 adaptiveDensifyThreshold kan värdet beräknas vid körning utifrån p98 av den aktuella gradientfördelningen — på verkliga scener kollapsar dock antalet Gaussians dramatiskt (massiv gallring); flaggan förblir avstängd. T77–T79 erbjuder en alternativ adaptiv logik via rullande median. Det här fältet är inte riskfritt — halvering ger 2–4× fler Gaussians (minnestryck, OOM-risk); fördubbling kan under-densifiera scenen.

T12densifyFromIteration

DETALJER

Standard: 500 Intervall: 100 – 5 000

TEKNISKT

Första iterationen från vilken densifiering blir aktiv. Innan dess sker bara "ren" inlärning på det initiala SfM-punktmolnet, utan att nya Gaussians skapas. Standardvärdet 500 kommer från 3DGS-artikeln och ger initialiseringen tid att stabiliseras — om densifiering redan börjar vid iteration 0, klonas felplacerade SfM-punkter många gånger innan de ens hittat sin rätta plats. En betydligt senare start (till exempel 1 000) försämrar resultatet något; håll dig till standardvärdet.

T13densifyInterval

DETALJER

Standard: 100 (Initializer, MCMC), 200 (.full) Intervall: 50 – 1 000

TEKNISKT

Hur många iterationer som ligger mellan två densifieringssteg. I paper-standarden 100 — var 100:e iteration utvärderas listan över densifieringskandidater, klonas/splittas, och samtidigt tas listan över gallringskandidater (sigmoid(opacity) < T14 pruneOpacityThreshold) bort. För .full har 200 visat sig fungera bra — det avlastar GPU:n, eftersom färre omorganiseringspass körs, och ger varje Gaussian mer tid att lägga sig till rätta efter en klon-åtgärd. Kortare intervall leder i quality-uppsättningen till överdensifiering: det uppstår betydligt fler Gaussians, utan att bilden blir bättre. Vid MCMC tolkas samma fält som relocation-intervall; se T67 mcmcRelocationInterval för den MCMC-specifika logiken.

T14pruneOpacityThreshold

DETALJER

Standard: 0.005 (Initializer, Paper, MCMC), 0.001 (.full) Intervall: 0.0001 – 0.1

TEKNISKT

Sigmoid-opacitetströskel, under vilken en Gaussian tas bort vid nästa densifieringssteg. Verkar tillsammans med T7 opacityLearningRate och logit-clamp-logiken i optimeraren. I .full ligger värdet på 0.001 i stället för 0.005 — splats som bara spelar en roll under exotiska betraktningsvinklar bevaras därmed längre och bidrar till SH-detaljer. Ännu mindre värden (till exempel 0.0001) ger inget mervärde: det gallras för lite och minne slösas bort. Viktigt: densitetskontrollen måste ALLTID gallra, även om buffertkapaciteten redan är full genom andra åtgärder — annars ackumuleras döda Gaussians och antalet fryser fast.

T15opacityResetInterval

DETALJER

Standard: 3 000 (Initializer + Paper), 100 000 (.full = i praktiken avaktiverad), 200 000 (.fullMCMC = avaktiverad) Intervall: 1 000 – 100 000+

TEKNISKT

Var/vart hur många iterationer opaciteten hos alla Gaussians återställs till ett lågt värde (~0.01) — en åtgärd från 3DGS-artikeln för att omvärdera "infrusna" splats. Tillsammans med RadianceKits uppvärmning, den stokastiska träningsuppsättningen och de fördubblade inlärningstakterna kostar opacitetsåterställningen märkbar kvalitet, och logit-clamp:en i optimeraren täcker ändå redan dess funktion. Därför är den i .full praktiskt taget avaktiverad (100 000 > 35 000 = utlöses aldrig). Vid .fullClassicPaper (paper-trogen variant) är den medvetet återställd till 3 000 — där handlar det om att uppnå originalartikelns Gaussian-budgetar.

T16maxScreenSize

DETALJER

Standard: 0.0 (= avaktiverad) Intervall: 0 (av) eller > 0

TEKNISKT

Maximal skärmrymdsstorlek (i projicerade pixlar) som en Gaussian får uppnå innan den tvångsmässigt splittas. Värdet är satt till 0 — RadianceKits densitetskontroll använder i stället världsrymd-skaltröskelvärdet från samma gradientlogik. Finns kvar i fältkatalogen eftersom framtida experiment med mip-splatting (T74–T76) eller scenspecifika splattingstrategier skulle kunna dra nytta av det. Aktivering (värde > 0, t.ex. 20) skulle tvinga splats som blivit mycket stora på skärmen att delas upp — relevant vid stora, jämna väggytor, där en enda jättesplat ger för lite detalj.

Loss (T17–T20)

T17ssimWeight

DETALJER

Standard: 0.2 (Initializer + Paper + .full), 0.05 (alla MCMC-presets) Intervall: 0.0 – 1.0

TEKNISKT

Vikten för D-SSIM-andelen i den kombinerade Loss-funktionen loss = (1 - λ) * L1 + λ * D-SSIM, där λ = T17. 3DGS-paperets standardvärde 0.2 är rätt val för Classic-densifiering — redan 0.3 försämrar resultatet märkbart. För MCMC ligger det lämpliga värdet däremot på 0.05, eftersom MCMC genom sin stokastiska utforskning behöver en starkare L1-signalandel — högre SSIM-vikter skulle urvattna relokaliseringsbesluten. SSIM är betydligt dyrare att beräkna än L1 (lokala 11×11-fönster över hela bilden); RadianceKit använder en MPS-accelererad implementation som håller sig under 1 ms per 1080p-bild. Scene-class-presets använder scenspecifika värden mellan 0.082 (.outdoorPreset) och 0.171 (.indoorPreset).

T18ssimWeightRefinement

DETALJER

Standard: 0.0 (= "ingen ändring, behåll ssimWeight") Intervall: 0 eller 0 – 1.0

TEKNISKT

Valfritt SSIM-värde för finjusteringsfasen efter T2 densifyUntilIteration. Att höja 0.2 till 0.3 i finjusteringsfasen försämrar resultatet i båda måtten — L1 såväl som SSIM; därför står standardvärdet på 0.0. Hypotesen bakom fältet var att efter densifieringen — när inga nya Gaussians längre uppstår — skulle en starkare SSIM-andel maximera den strukturella skärpan. Empiriskt fel: att höja SSIM-vikten innebär indirekt att sänka L1-vikten, och L1 är den betydligt mer talande signalen i den slutliga finjusteringsfasen. Fältet förblir tillgängligt för framtida experiment med perceptuell loss (T60) eller edge-loss (T19), där en finjusteringsspecifik loss-komposition kan vara meningsfull.

T19edgeLossWeight

DETALJER

Standard: 0.0 (= inaktiverad) Intervall: 0 eller 0.001 – 1.0

TEKNISKT

Experimentell loss-term: vikten för en Sobel-gradient-domän-L1-loss som jämför bildkanterna direkt (ground-truth-Sobel vs render-Sobel) utöver L1+SSIM. Hypotes: kantinformation är en perceptuell hörnsten för bildkvalitet och en explicit term borde uppmuntra Gaussians att träffa kanter bättre. I praktiken ger det ingenting: en märkbar vikt (0.1) försämrar resultatet, en liten (0.01) förändrar inte kvaliteten, men kostar beräkningstid. Sobel-passet kostar en extra MPS-forward på ground-truth och render. Därför permanent inaktiverad. Framtida användningsfall: scener med hårda konstgjorda kanter (arkitektur, möbler, renderingar) skulle kunna gynnas — Scene-class-presets använder dock inte denna term för det, utan skalar SSIM-vikten.

T20skyMaskingEnabled

DETALJER

Standard: false (Initializer och alla presets) Intervall: boolean

TEKNISKT

Slår på Sky Masking. Därigenom maskeras himmelsregionen i varje bild bort med hjälp av Apple Vision-ramverket, och lossen i detta område sätts till noll. Syfte: utomhusscener lider ofta av att blå/gråa/vita himmel-pixlar får appen att placera Gaussians precis där — vilket uppfattas som "floaters". Utan sky-mask skulle lossen i detta område aldrig bli noll, eftersom himlen i bilden varierar lite och appen försöker för evigt återskapa detta med splats. Vision-masken beräknas en gång per kamera innan träningen och hålls i RAM. Aktiveras typiskt tillsammans med T45 skyDomeEnabled (UI-logik i Settings-vyn). Lämna avstängd vid inomhusscener eller syntetiska renderingar — masken skulle där felaktigt identifiera tak eller väggar som "himmel".

SH-Degree-Progression (T21)

T21shDegreeUpgradeIterations

DETALJER

Standard: [1_000, 2_000, 3_000] (Initializer), [2_000, 5_000, 8_000] (.full, MCMC), [1_000, 2_000] (.preview — Grad 3 hoppas över) Intervall: [Int], varje värde inom [0, maxIterations], monotont stigande

TEKNISKT

Iterationer vid vilka den aktiva SH-graden växlas upp från 0→1, 1→2, 2→3. Före den första markeringen är endast DC-komponenterna aktiva (alltså T5 shDCLearningRate), efter den första markeringen DC + 3 grad-1-koefficienter, efter den andra markeringen + 5 grad-2-koefficienter, efter den tredje markeringen alla 15 koefficienter. Minnesbehovet per Gaussian växer därmed stegvis — 4 Floats → 16 Floats → 36 Floats → 64 Floats. Kvalitetspresetsen fördröjer uppgraderingarna jämfört med Initializer-standardvärdena, eftersom geometrin ska stabiliseras först innan färgdetaljerna med sin högre frekvens läggs på. De tidigare markeringarna [1K, 2K, 3K] ger i .full ett märkbart sämre resultat. .preview stoppar vid grad 2, eftersom grad 3 inte konvergerar inom 5 000 iterationer och bara förbrukar optimeringskapacitet. Curriculumet (T80–T81) erbjuder en alternativ logik som dynamiskt skriver över denna lista.

Performance (T22–T24)

T22trainingRenderScale

DETALJER

Default: 1.0 (Initializer, .full, MCMC, Scene-Class), 0.5 (.preview), 0.25 (.quickTest) Range: 0.05 – 2.0 (typisk 0.25, 0.5, 1.0)

TEKNISKT

Renderupplösning under träningen i förhållande till originalupplösningen på träningsbilderna. Vid 0.5 skalas varje bild ner till 50 % bredd × 50 % höjd (alltså 25 % av pixlarna) och Gaussian-renderingen sker i denna mindre upplösning. Minskar både minnes- och beräkningsbehov kvadratiskt. Viktigt: T11 densifyGradThreshold måste matcha den valda upplösningen — gradientmagnituderna skalar med 1/upplösning², därför har .quickTest (0.25×) ett mycket högre tröskelvärde (4e-6) än .full (1.0×, 1.1e-6). RadianceKit varnar vid mycket stora bilder och anpassar sig automatiskt — 3-MP-målupplösning. Vid extrema 4K-inbilder skulle 0.5 eller till och med 0.25 vara lämpligt, annars kör varje Mac bara i CPU-kompaktering.

T23resolutionWarmupScale

DETALJER

Default: 0.0 (= inaktiverad) Range: 0 eller 0.1 –

TEKNISKT

Träna densifieringsfasen (iter 0 till T2) i en lägre upplösning än förfiningsfasen. För .full är detta avstängt, eftersom vinsten i tid vid T22 = 1.0 och cosine-annealing blir liten och kvaliteten lider något. Finns kvar i fältkatalogen, eftersom den vid 4K-inbilder och långa träningskörningar återigen kan bli meningsfull — curriculumet (T80) tar upp en liknande logik, men där är den kopplad till LR-schemat. Om aktiverad och T80 curriculumResolutionRamp också är true, vinner curriculumet och skriver över detta värde.

T24tileSize

DETALJER

Default: 16 Range: 8, 16, 32

TEKNISKT

Storlek på rasteriseringskaklarna i pixlar. Gaussian-Splatting-renderingen är kakelbaserad: bilden delas upp i 16×16-pixel-kakel, varje kakel samlar in de för den relevanta Gaussians, sorterar dem efter djup och blendar in dem. 16 är standarden som används av praktiskt taget alla 3DGS-implementationer och är hårdkodad i RadianceKit-Metal-kernlarna; en ändring av detta värde skulle kräva omkompilering av shaders och är i nuvarande läge inte effektiv. Finns kvar som fält om en framtida motorversion skulle stödja tile-size dynamiskt.

Diagnostik och förberedelse av punktmoln (T26–T30)

T26depthDistortionWeight

DETALJER

Standard: 0.0 (= inaktiverad) Intervall: 0 eller 0.0001 – 0.05

TEKNISKT

Experimentellt: vikt för en depth-distortion-regulariserings-loss. Straffar Gaussians som visserligen är djupt staplade längs en render-stråle men som konceptuellt tillhör samma yta — det uppmuntrar koncentrerade djupfördelningar och minskar floaters. Vid alla testade styrkor blir resultatet sämre snarare än bättre. Den teoretiska fördelen — att förbättra multi-view-konsistens — slår inte igenom i L1-loss, eftersom hypotesen implicit antar att SfM-geometrin är korrekt och att Gaussians bara behöver "staplas". I praktiken är SfM-punktmolnet oftast den svagaste komponenten, inte staplingen. Förblir tillgängligt för multi-view-dataset med särskilt rena poser (Synthetic, Mip-NeRF 360 med ground truth).

T27singleViewOverfit

DETALJER

Standard: false Intervall: boolean

TEKNISKT

Diagnostikflagga: om true används tvingande kamera-index 0 i varje träningsiteration istället för ett slumpmässigt urval från kamera-poolen. Syfte: Om modellen inte ens kan overfitta en enda vy (det vill säga, loss för vy 0 går inte mot noll efter 10 000 iterationer), finns det en grundläggande bugg i forward/backward-passet. Denna brytare användes intensivt under utvecklingen av Metal-shaders och de differentierbara rasterizer-kärnorna. Idag finns den bara kvar som en sanity-check om någon har ändrat något i tränings-backend och vill kontrollräkna. I gränssnittet finns ingen brytare för detta — fältet är avstängt i alla presets och förblir så.

T28maxCameras

DETALJER

Standard: 0 (= "använd alla kameror") Intervall: 0 eller 1 – N

TEKNISKT

Diagnostikgräns: träna endast med de första N kamerorna, ignorera alla övriga. Syftet var ursprungligen att testa hypotesen att för många kameror skapar gradientkonflikter (för många motstridiga loss-signaler för samma Gaussian). En konstgjord begränsning ger ingen fördel — fler bilder ger praktiskt taget alltid högre kvalitet. I gränssnittet finns ingen kontroll för detta; fältet står på 0 i alla presets, alltså "alla kameror".

T29maxInitialPoints

DETALJER

Standard: 0 (= "använd alla SfM-punkter") Intervall: 0 eller 1 000 – 200 000+

TEKNISKT

Säkerhetsspärr: begränsar antalet initiala SfM-punkter som träningen startar med. Täta COLMAP-rekonstruktioner kan producera > 60 000 punkter, vilket vid stora initial-skalor leder till 200–300 Gaussians per pixel-överlapp — det skapar ett "dimfält" där träningen inte konvergerar. Subsampling till ~16 000 punkter (hard-cap-logik i tränings-motorn) för initial-tätheten till samma nivå som referens-3DGS använder, och minskar överlapp dramatiskt. Appen ställer in detta själv vid mycket täta rekonstruktioner; det finns ingen kontroll för detta.

T30cameraClusterOutlierMultiplier

DETALJER

Standard: 10.0 (alla presets — åsidosätts aldrig) Intervall: 1.0 – 100.0

TEKNISKT

Multiplikator för camera-cluster-outlier-filtret. Före träningen beräknar tränings-motorn centroiden för alla kamerapositioner och den maximala distansen för en kamera från centroiden. SfM-punkter vars distans från centroiden överskrider multiplier × maxCameraDistance kasseras som outliers. Standardvärdet 10× är medvetet valt generöst. En subtil bieffekt: tightare SfM (kameror närmare varandra) → mindre → lägre tröskelvärde → fler punkter kasseras som outliers. Lösare SfM → högre tröskelvärde → färre punkter kasseras. Det leder till en överraskande effekt: en tightare och i sig bättre SfM-rekonstruktion kan försämra träningen, eftersom för många initialpunkter kasseras. Fältet står på 10 i alla presets och kan inte ändras i gränssnittet. Värden under 5 är i regel för restriktiva, över 20 verkningslösa.

Regularisering (T31–T37)

T31coarseToFineBlurRadius

DETALJER

Default: 0 (= inaktiverad) Range: 0 eller 1 – 10

TEKNISKT

Experimentellt: Box-blur-radie som appliceras på grundsanningsbilden i början av densification-fasen och linjärt reduceras till 0 fram till slutet av densification (T2). Hypotes: Coarse-to-fine-träning — först lära sig grova strukturer, sedan detaljer — borde ge stabilare geometri. Vid alla testade radier blir resultatet sämre. Anledningen till att det misslyckas: densification fattar beslut baserat på bilddomän-gradienter, och blurring reducerar just de signaler som är viktiga för att avgöra var kloning behövs. Kvarstår i fältkatalogen för framtida tester med annat density-control-schema.

T32scaleRegWeight

DETALJER

Default: 0.0 (= inaktiverad) Range: 0 eller 0.0001 – 0.05

TEKNISKT

Experimentellt: L1-regularisering på skala i världsrymden. Bestraffar Gaussians som blir för stora — förhindrar "mega-splattar" som täcker hela väggytor med en enda Gaussian. Aktiverad exploderar antalet Gaussians till miljoner och resultatet blir avsevärt sämre. Anledningen: skalregularisering kommer i konflikt med density-control — mindre skalor innebär att fler Gaussians behövs, så density-control splittar oftare, vilket i sin tur innebär mer gradient-beräkning. Inaktiverad, men dokumenterad för mip-splatting-experiment (T74): i det sammanhanget kan en skal-undergräns vara meningsfull.

T33anisotropyRegWeight

DETALJER

Default: 0.0 (= inaktiverad) Range: 0 eller 0.0001 – 0.05

TEKNISKT

Experimentellt: bestraffning på förhållandet max(scale)/min(scale), ska förhindra extremt utdragna "nål"-Gaussians som uppfattas som floaters. Vid alla testade styrkor blir resultatet betydligt sämre. Anledningen: regulariseringen tvingar splattar mot "rund" form, vilket på en plan yta (vägg, bord, golv) är precis fel — där är en flack, bred Gaussian effektivare än en klotformad. Inaktiverad. T34 scaleRatioPruneThreshold följer samma syfte mer riktat, men är också avstängd som standard.

T34scaleRatioPruneThreshold

DETALJER

Default: 0.0 (= inaktiverad) Range: 0 eller 5.0 – 100.0 (typiskt 10.0 – 30.0)

TEKNISKT

Experimentell post-training-pruning som raderar varje Gaussian vars förhållande max(scale)/min(scale) överskrider det här inställda linjära tröskelvärdet. Riktar sig mot extremt utdragna "nål/skiv"-floaters som inte kan elimineras genom regularisering ensam. I testet tog pruningen bort floaters som hoppats, men samtidigt även meningsfulla flacka splattar på väggar och golv — bilden blev mer hålig. Därför av som standard. Sedan version 1.8 finns brytaren Remove Needle/Disc Floaters i inspektorns avsnitt "Training", under underraden "Runs automatically at the end of training". Aktiverad arbetar den medvetet konservativt (endast splattar vars längsta axel överstiger den kortaste med ungefär 50×) och träder i kraft från nästa träningsomgång.

T35opacityRegWeight

DETALJER

Default: 0.0 (= inaktiverad) Range: 0 eller 0.0001 – 0.05

TEKNISKT

Experimentellt: binär cross-entropy-bestraffning som drar opaciteten mot 0 eller 1 (alltså bort från "halvtransparent"). Hypotes: en skarpare opacitetsfördelning skulle förbättra bildklarheten. Tillsammans med T33 kostar regulariseringen kvalitet; båda är inaktiverade. Observera: i 1.4.3-beta dök en bugg upp som ändrade just det här fältets standardvärde (initializer = 0.01), vilket ledde till massutrotning av Gaussian-antalet (460 K → 5 på en iteration). Sedan 1.4.4 är standardvärdet fast förankrat till 0.0.

T36opacityDecayFactor

DETALJER

Default: 0.0 (initializer = inaktiverad), 0.9995 (.full, .classicBalanced — HTGS-standard) Range: 0 (av) eller 0.95 – 1.0

TEKNISKT

Implementation av HTGS-schemat (Hierarchical Time-Gating, Eurographics 2025): var T37 opacityDecayInterval iteration multipliceras sigmoid-opaciteten för varje Gaussian med denna faktor. 0,9995 × 100 tillämpningar ger ~95 % kvarvarande per densification-fas — ett lätt men stadigt neråtriktat tryck på alla opaciteter, som tillförlitligt låter svagt bidragande Gaussians sjunka under T14 pruneOpacityThreshold. Resultatet är ett betydligt bättre resultat än utan decay. Endast aktiv under densification-fasen (fram till T2), därefter fortsätter träningen utan decay, så att de i finjusteringen etablerade opaciteterna förblir stabila. Används inte vid MCMC (MCMC har egna mekanismer via T67 mcmcRelocationInterval + T68 mcmcDeadOpacityThreshold).

T37opacityDecayInterval

DETALJER

Default: 50 Range: 10 – 500

TEKNISKT

Iterationsintervall inom vilket T36 opacityDecayFactor tillämpas. HTGS-artikelns standard är 50, kvarstår i .full. Långa intervall (>200) upphäver effekten delvis, eftersom tillräckligt många gradient-uppdateringar hinner ske mellan två tillämpningar för att opaciteten stiger igen. Kortare intervall (<20) gör decay för aggressiv. Endast aktiv under densification-fasen.

Förfining (T38–T44)

T38gradientAccumulationSteps

DETALJER

Default: 1 (= "en vy per Adam-steg") Range: 1 – 8

TEKNISKT

Antalet vyer vars gradienter ackumuleras innan en Adam-uppdatering utförs. Vid > 1 körs appen på en separat, "unfused" backward-project-väg som summerar gradienterna i en separat buffert; den slutliga tillämpningen skalar med 1/N för att hålla magnituden konstant. Vid klassisk träning ger värdet 2 ingen kvalitetsvinst men kostar tid, eftersom den unfused-vägen är dyrare än den fused. Vid MCMC däremot minskar accum = 2 kvalitetsskillnaden mot Classic märkbart — därför erbjuds den där som en switch. I presetsen står värdet på 1. I gränssnittet når du det via switchen MCMC Quality i Inspector-avsnittet "Training": påslagen ackumulerar appen 2 vyer per steg, avslagen 1. Andra värden än 1 och 2 kan bara ställas in via en redigerad preset-fil.

T39testViewIndices

DETALJER

Default: [] (= tom, alla vyer används för träning) Range: Set<Int>, valfri delmängd av Camera-indexen

TEKNISKT

Mängd av camera-index som INTE används för träning utan sparas som holdout för PSNR/SSIM/LPIPS-utvärdering. Fylls bara i de interna mätkörningarna: då varannan åttonde vy, med start vid index 0 (LLFF-standard, identisk med Mip-NeRF-360- och 3DGS-pappers-konventionerna). I leveranstillståndet förblir fältet tomt — träningen använder alla vyer, och det finns inget kontrollelement för detta i gränssnittet. Varning: att manuellt sätta detta fält i en preset-fil utan att förstå indexen gör en mätning oanvändbar (t.ex. om alla index sätts över N medan det bara finns N-50 vyer → inga holdouts → ingen utvärdering). Vid egen preset-export skrivs testViewIndices inte med, eftersom det är scenberoende och annars skulle lämna meningslösa värden mellan olika dataset.

T40refinementPruneInterval

DETALJER

Default: 0 (= inaktiverad) Range: 0 eller 100 – 5 000

TEKNISKT

Var N:e iteration under förfiningsfasen (efter T2) körs ett extra prune-pass som tar bort Gaussians med sigmoid(opacity) < T41 refinementPruneOpacityThreshold. Syfte: under densifiering finns regelbundna density-control-anrop, därefter inte längre — men Gaussians vars opacity fortsätter sjunka blir kvar i buffern. I praktiken skadar denna extra pruning: tillsammans med den andra densifieringsfasen (T54) kan den tömma Gaussian-beståndet helt. Står på 0 i alla presets och kan inte ändras i gränssnittet; om man ändå ställer in det via en redigerad preset-fil är 1 000 eller 2 000 rimliga värden.

T41refinementPruneOpacityThreshold

DETALJER

Default: 0.0 (= "använd T14") Range: 0 eller 0.001 – 0.1

TEKNISKT

Separat opacity-tröskelvärde för refinement-pruning. Efter densifiering har de flesta Gaussians nått en betydligt högre opacity (> 0.001), så att standard-T14 pruneOpacityThreshold skulle vara för slapp. Om T40 är aktivt, bestämmer detta fält det egna tröskelvärdet. Vid 0.0 används T14 fortsatt. Bara relevant om T40 > 0.

T42midTrainingCompactificationIterations

DETALJER

Default: [] (= inaktiverad) Range: [Int], värden i (densifyUntilIteration, maxIterations)

TEKNISKT

Explicita iterationspunkter under förfiningsfasen där ett compactification-pass körs (tar bort sigmoid(opacity) < 0.01 + outlier-scale-Gaussians, samma logik som T56 postTrainingCompactification). Syfte: långa förfiningsfaser kan visa konfetti-/floater-ackumulering vars SH sedan overfittar på vyspecifika artefakter. Typisk konfiguration om aktiverad: [10000, 20000, 30000] för 40K Classic. MEN: fritt valda städmarkeringar försämrar slutresultatet genomgående — Gaussian-antalet sjunker visserligen tydligt, men bildfelet ökar mer. Som fritt valbar iterationslista förblir fältet därför tomt i alla presets. Effekten själv når du i gränssnittet via switchen Floater Cleanup i Inspector-avsnittet "Training": vid klassiska körningar från 30 000 iterationer lägger den in två städomgångar mitt i träningen. Egna markeringar kan bara ställas in via en redigerad preset-fil.

T43frustumCullEnabled

DETALJER

Default: false Range: boolean

TEKNISKT

Efter träningen tas alla Gaussians bort som ligger utanför unionen av alla tränings-kamera-frustum. Sådana Gaussians har aldrig begränsats av loss-signalen och är alltid floaters. Särskilt effektivt för scener där novel-view ligger bakom eller vid sidan av kamerabanan (t.ex. baksidan av en linjär drönarflygning) — floaterna där syns aldrig under träningsfasen, men mycket väl vid senare rörelse i 3D-visaren. På drönarflygningar ger detta märkbart färre floaters, därför tillgängligt som opt-in. Default false, eftersom frustum-unionen vid object-captures med full orbit-coverage omfattar hela scenen och funktionen inte tar bort något — erbjuds i Settings under "Floater Reduction". Outdoor-presetet aktiverar det inte, eftersom sky-domen där löser samma problem bättre.

T44frustumCullExpansion

DETALJER

Default: 1.1 Range: 1.0 – 2.0

TEKNISKT

NDC-marginal för T43 frustumCullEnabled. 1.0 skulle skära exakt vid bildkanten, vilket skulle beskära vinglande splattar vid bildkanten för mycket. 1.1 = 10 % padding utöver den exakta kamera-inramningen — ger lite tolerans för kantpixlar som ändå kan bli synliga i en lätt förskjuten novel-view. Värden > 1.2 gör cull-funktionen praktiskt taget verkningslös, eftersom det utökade frustumet omfattar mycket mer utrymme.

Sky-Dome (T45–T48)

T45skyDomeEnabled

DETALJER

Default: false (Initializer + alla presets utom P9 Outdoor) Range: boolean

TEKNISKT

Innan träningen startar genereras ett klotformat punktmoln (Fibonacci-sphere med T46 sample-punkter), placerat på ett avstånd av T47 skyDomeRadiusMultiplier × scene_extent runt scenens mittpunkt och initierat med färgerna från de sky-maskerade pixlarna från alla träningskameror (se T20 skyMaskingEnabled). Dessa sky-dome-gaussianer läggs in i början av gaussian-buffern och "fryses" under träningen (position/skala/rotation-gradienter = 0, endast SH och opacitet förblir optimerbara). Effekt: istället för svarta "confetti"-områden i fjärran ser användaren en riktig himmel i novel views. På drönar- och landskapsscener fungerar detta mycket bra; i Outdoor-presetet (P9) är det aktiverat som standard. Låt det vara avstängt för inomhusscener — klotet skulle bara hänga meningslöst utanför rummet.

T46skyDomeSampleCount

DETALJER

Default: 5 000 Range: 1 000 – 50 000 (typiskt 2 000 – 10 000)

TEKNISKT

Antal Fibonacci-sphere-sample-punkter på sky-dome-klotet. Högre värden → tätare sky-dome (bättre vid stora upplösningar och mycket synlig himmel), men högre minnesbehov. 5 000 är sweet spot för 4K-renderingar; vid lägre upplösningar räcker 2 000– 3 000. Punkterna initieras efter cosine-distance till varje träningskameras view-vektor med motsvarande sky-maskerade pixlar — sample-punkter vars view-cone ingen kamera ser förblir längst bak med lågt initialt opacitetsvärde, men ändras inte under träningen (fryst).

T47skyDomeRadiusMultiplier

DETALJER

Default: 30.0 (Initializer + de flesta presets), 59.0 (P9 Outdoor) Range: 5.0 – 200.0

TEKNISKT

Radien för sky-dome-klotet relativt till scenens utsträckning (= medelavståndet mellan kamerapositionerna). 30 = klotet har 30 gånger diametern hos kameramolnet. För litet (< 5) → sky-dome interfererar med själva scenen (t.ex. hamnar en sky-dome-splatt i förgrunden); för stort (> 100) → float32-precisionsförlust vid sky-dome-positionerna, vilket utlöser render-glitchar i fjärran. För vidsträckta utomhusscener är 59.0 rätt värde — standardvärdet 30.0 är för litet för djupa landskap, då renderas sky-dome-pixlarna synligt som en "vägg" vid bildkanterna.

T48frozenGaussianCount

DETALJER

Default: 0 (= inga frysta gaussianer) Range: 0 eller 1 – T46

TEKNISKT

Antal gaussianer i början av buffern vars position/skala/rotation-gradienter sätts till noll i optimeraren — de förblir rumsligt orörliga under hela träningen. Density-control får inte klona, dela eller beskära dem. Används för sky-dome-injektion (se T45): när sky-dome är aktiverat sätts detta fält automatiskt till T46 skyDomeSampleCount. Manuell inställning är möjlig (t.ex. för att frysa ett förplacerat punktmoln från en LiDAR-scan), men är inte direkt tillgänglig i UI:t. Viktigt: de första N gaussianerna i buffern är alltid de som är frysta — ordningen i buffern avgör, inte något explicit index.

Adam + LR-schema (T49–T55)

T49adamResetIteration

DETALJER

Default: 0 (= inaktiverad) Range: 0 eller 100 –

TEKNISKT

Iteration vid vilken Adam-optimerarens momentum-ackumulatorer (m1, m2) återställs till noll. Bias-korrigeringen körs därefter med (iter - adamResetIteration) istället för med iter. En återställning efter densification-slutet försämrar resultatet avsevärt. Anledning: det Adam-momentum som byggts upp under densification bär information om de typiska gradientmagnituderna och påskyndar refinement-fasen. Att kasta bort det kostar de första ~500 iterationerna refinement i konvergens. Står därför i alla presets på 0 och kan inte ändras i gränssnittet.

T50positionLRScheduleEndIteration

DETALJER

Default: 0 (Initializer = "använd maxIterations"), 20 000 (.full — Cosine slutar vid 20K trots maxIter=35K), 30 000 (.fullClassicPaper) Range: 0 eller 1 000 –

TEKNISKT

Iteration vid vilken cosine-annealing-kurvan för position-LR når sitt minimum. Om 0, är det identiskt med T1 maxIterations. Om > 0, körs schemat fram till detta värde och förblir därefter konstant på T4 positionLearningRateFinal. Det tillåter en "extended refinement phase" med minimal men konstant lärhastighet — förfinar positioner långsamt utan förnyad decay. .full gör detta (schema-slut vid 20K, träning körs till 35K); i grannskapet — 15K till 25K — förändras nästan ingenting, 20K är den bästa kompromissen. Används i kombination med T51 för att även modifiera icke-position-LR:erna i den utökade fasen.

T51extendedPhaseLRDecay

DETALJER

Default: 0.0 (= inaktiverad, konstanta LR:er) Range: 0 eller 0.01 – 1.0

TEKNISKT

Minimal multiplikator för icke-position-LR:erna (skala, rotation, opacitet, SH) i den "extended phase" — alltså: efter att T50 har uppnåtts och position-LR redan är vid T4. Om 0.1, decayas skala/rotation/opacitet/SH i sin tur cosine-vis från 1.0 (= deras standard-LR) till 0.1× av sin standard. Om 0.0 (default), förblir de konstanta. Full decay ner till noll ger samma resultat som ingen decay alls — beteendet ser renare ut med decay, men är inte mätbart bättre. Står därför i alla presets på 0 och kan inte ändras i gränssnittet.

T52adaptiveDensifyThreshold

DETALJER

Default: false Range: boolean

TEKNISKT

Experimentellt: om true, beräknar appen i varje densification-steg p98 av den aktuella gradientfördelningen och använder det som ett dynamiskt tröskelvärde (klämt till minst 0.5× av det konfigurerade värdet från T11, så att det inte avviker för mycket). Hypotes: Automatisk anpassning till aktuell scenfas skulle göra density-control robustare — t.ex. strängare pruning i början, mer avslappnad senare, eller tvärtom. I praktiken kollapsar antalet gaussianer dramatiskt — massiv pruning, eftersom p98 är extremt högt under de första iterationerna och därefter nästan ingenting längre överskrider tröskelvärdet. Den fasta tröskeln är redan väl kalibrerad, dynamisk anpassning skadar mer än den hjälper. T77 erbjuder en alternativ adaptiv logik via rolling median, som kringgår problemet.

T53mergeAfterDensification

DETALJER

Default: false (Initializer), true (.full, .classicBalanced, .fullClassicPaper) Range: boolean

TEKNISKT

I slutet av densification-fasen (iter T2) utförs en enstaka merge-pass som slår samman gaussianer som ligger nära varandra med liknande skala och färg till en. Reducerar antalet gaussianer med typiskt 5–15 % utan synlig kvalitetsförlust. Syfte: efter intensiv kloning uppstår kluster av kvasi-identiska gaussianer som inte bidrar med något nytt — sammanslagningen frigör optimerarkapacitet för andra områden. Standard i Classic-quality-presets. Används inte vid MCMC, eftersom MCMC genom sin relocation-logik inte alls låter sådana kluster uppstå.

T54densifyPhase2FromIteration

DETALJER

Default: 0 (= inaktiverad) Range: 0 eller T2T1

TEKNISKT

Experimentellt: möjliggör en andra densification-fas som efter refinement-pausen vid denna iteration startar och körs fram till T55. Hypotes: efter en refinement-fas har gradient-ackumulatorerna stabilare magnituder och kan mer exakt avgöra vilka områden som fortfarande behöver ytterligare gaussianer. I praktiken slutar den andra densification-fasen i en kaskad ner till noll gaussianer — tillsammans med refinement-pruning (T40) tömmer den bufferten helt. Står därför i alla presets på 0 och kan inte ändras i gränssnittet.

T55densifyPhase2UntilIteration

DETALJER

Default: 0 Range: 0 eller T54T1 Defined in:

TEKNISKT

Slutet på den andra densification-fasen. Endast relevant när T54 > 0. Båda fälten tillsammans avaktiverade.

Efterbehandling + Apple AI (T56–T60)

T56postTrainingCompactification

DETALJER

Default: true (i alla produktions-presets), false (.quickTest, .preview) Range: boolean

TEKNISKT

Efter avslutad träning tas Gaussians med sigmoid(opacity) < 0.01 hårt bort (de bidrar i praktiken inte längre till bilden). Minskar Gaussian-antalet med typiskt 58 % och exportfilstorleken med 55 % utan synbar kvalitetsförlust. Aktivt som standard i produktions-presets — slutresultatet ska kunna levereras så kompakt som möjligt. Avstängt i .quickTest, eftersom en diagnoskörning ändå inte exporteras. Till skillnad från T42 midTrainingCompactificationIterations sker compactification först på slutet — refinement kan fram tills dess använda alla Gaussians.

T57metalFXUpscaling

DETALJER

Default: false Range: boolean

TEKNISKT

⚠ Avvecklad sedan 2026-07-18 och utan någon verkan. Fältet hörde till väljaren „Viewport Scaling" (Off/MetalFX/Lanczos) i Inspector. Renderaren har aldrig läst det: blit-beslutet är rent geometriskt (supersamplad rendering ⇒ MPS-Lanczos-nedskalning för kantutjämning, annars bilinjär), och för MetalFX-vägen fanns det överhuvudtaget ingen anropspunkt. Väljaren och de två felaktiga uppgifterna den matade var, är borttagna; overlay-etiketten heter nu „Sampling", inte „Scaling", och ingenstans i appen skalas något upp via MetalFX. Själva fältet finns kvar eftersom träningskonfigurationen sparas i sin helhet — det sitter i varje sparad scen, i varje preset och i inställningskommentaren för redan exporterade PLY-filer; en borttagning skulle tyst släppa nyckeln vid ny skrivning och bryta detta utbyte. Av samma skäl är fältet undantaget från „Modified"-jämförelsen: en gammal scen kan bära true, och det finns inget sätt längre att återställa detta via gränssnittet. Ingenting läser det — koppla inte in det igen.

T58mpsLanczosScaling

DETALJER

Default: false Range: boolean

TEKNISKT

⚠ Avvecklad sedan 2026-07-18 och utan någon verkan — se T57 metalFXUpscaling, där står också varför fältet ändå måste sparas med. En närliggande missuppfattning ska uttryckligen nämnas: appen använder visst MPS-Lanczos i viewporten, men det styrs enbart av geometrin — en supersamplad renderad bild räknas ned för kantutjämning. Det är en nedskalning, inte en uppskalning, och detta fält har aldrig utlöst den.

T59livePreviewInterval

DETALJER

Default: 50 (initierare; presets sätter inte fältet) Range: 0 (av), 50, 250 eller 1 000 i inställningsväljaren

TEKNISKT

Hur ofta 3D-visaren uppdateras med de aktuella Gaussians under träningen. 50 = en ny rendering var 50:e iteration — gott nog för att följa förloppet utan att sakta ner träningen märkbart. 0 = visaren uppdateras inte alls (bakgrundsträning, maximal hastighet). Vid långa MCMC-körningar lönar sig 250 eller 1 000, eftersom uppdateringskostnaden totalt sett gör sig märkbar. Specialroll: fältet hör visserligen till träningskonfigurationen, men är en appövergripande inställning (Inställningar → Träning) och inte en del av träningsreceptet. Det är därför undantaget från „Modified"-jämförelsen, bevaras vid presetbyte och tas sedan 2026-07-18 inte längre över från filen när en scen öppnas — tidigare ersatte en inläst scen tyst användarens bildfrekvens med scenskaparens, „av" inkluderat, och det fanns ingen annan plats den kunde hämtas tillbaka från.

T60perceptualLossWeight

DETALJER

Default: 0.0 (= inaktiverad) Range: 0 eller 0.001 – 0.5

TEKNISKT

Vikt för en perceptuell loss-term (multi-skalig blur-feature-matchning). Fångar strukturell och texturell likhet på en högre nivå än L1+SSIM — typiskt där „pixelperfekt" är mindre viktigt än „ser realistiskt ut". Värdet ligger i alla presets på 0.0 (av). I gränssnittet ställer du in det via reglaget Perceptual Loss i Inspector-avsnittet „Training", intervall 0 till 0,20 i steg om 0,01; vid 0 visar appen „Off".

MCMC-densifiering (T61–T73)

T61densificationStrategy

DETALJER

Standard: .classic (Initializer + Classic-presets), .mcmc (alla MCMC-presets + Scene-Class) Intervall: .classic eller .mcmc

TEKNISKT

Väljer mellan Classic-densifiering (klon/split/prune, Kerbl et al.~2023) och MCMC-densifiering (Stochastic Gradient Langevin Dynamics med relokering, Kheradmand et al.~NeurIPS 2024). Vid .classic utvärderas T11–T16, vid .mcmc T62–T73. Var uppmärksam vid byte: Classic-standardvärden och MCMC-standardvärden är helt olika kalibrerade — den som växlar väljaren i Expert View utan att ladda ett passande preset riskerar 1.4.3-bugg-liknande massutrotning (460 K → 5 på en iteration, eftersom MCMC-OpacityReg på 0.01 dödar Classic-opaciteterna). Därför är MCMC-init-standardvärdena medvetet "mjukgjorda" (alla reg-värden 0.0).

T62mcmcMaxGaussians

DETALJER

Standard: 150 000 (Initializer + .fullMCMC + .mcmcBalanced), 100 000 (.mcmcPreview), 1 500 000 (.fullMCMCMip — Mip-Splatting-variant med 10× budget), 1,19 M (.renderPreset), 1,25 M (.outdoorPreset), 670 K (.indoorPreset) Intervall: 0 (= "använd buffertkapacitet") eller 10 000 – 5 000 000 Definieras i:

TEKNISKT

Hård övre gräns för antalet Gaussians vid MCMC-strategi. Antalet växer gradvis med T70 mcmcGrowthRate (typiskt 5 %) per relokeringssteg upp till detta tak. 150 K är ett bra utgångsvärde — betydligt över det späds splattkvaliteten ut (för många små, redundanta Gaussians), betydligt under förblir scenen underdensifierad. I mycket stora scener (t.ex. en dronflygning med 1 545 foton och 158 K SfM-init) är 150 K för lågt — därför 1.4.5-utökningen T72 mcmcCapMultiplier + T73 mcmcAutoScaleByScene. Scene-Class-presets använder scenspecifika värden mellan 670 K (inomhus) och 1,25 M (utomhus). Vid värdet 0 använder motorn hela buffertkapaciteten som tak.

T63mcmcNoiseScale

DETALJER

Standard: 0,00005 (5e-5 = paperets standardvärde) Intervall: 1e-6 – 1e-3

TEKNISKT

Multiplikator för det gaussiska bruset som i varje MCMC-iteration adderas till varje Gaussians position (SGLD-logik). Högre = mer utforskning (Gaussians rör sig mer, hittar potentiellt bättre platser), lägre = mer exploatering (Gaussians stannar där de redan är bra). 5e-5 är rätt värde — betydligt mindre innebär för lite utforskning, betydligt större (1e-4) för mycket, då flyter splattarna isär. Dämpas med kosinusavtagning över träningstiden fram till T69 mcmcNoiseDecayEnd — vid slutet av avtagningsintervallet är bruset i praktiken 0 och Gaussians konvergerar.

T64mcmcOpacityRegWeight

DETALJER

Standard: 0.0 (= inaktiverad i RadianceKits standardvärden, paper: 0.01) Intervall: 0 eller 0,001 – 0,05

TEKNISKT

MCMC-specifik L1-straffterm på opacitet. Paperets standardvärde 0.01 (trycker oanvända Gaussians mot noll, gör dem tillgängliga för relokering). I RadianceKit är resultatet mätbart bättre utan denna regularisering. Anledning: pruning-kriteriet som definieras med T68 mcmcDeadOpacityThreshold räcker ensamt — ett extra L1-straff tvingar även värdefulla Gaussians med låg opacitet att dö. Därför är standardvärdet 0. Observera: i 1.4.3-betabygget var Initializer-standardvärdet felaktigt satt till 0.01, vilket resulterade i massutrotnings-buggen (se förklaringen till T61); fixat till 0.0 sedan 1.4.4.

T65mcmcScaleRegWeight

DETALJER

Standard: 0.0 (= inaktiverad, paper: 0.01) Intervall: 0 eller 0,001 – 0,05

TEKNISKT

MCMC-specifik L1-straffterm på skalornas egenvärden. Paperets standardvärde 0.01. Även här är resultatet bättre utan regularisering, av samma anledning som vid T64. Inaktiverad i alla RadianceKit-MCMC-presets. Observera samma sak som T64: 1.4.3-buggen.

T66mcmcRelocationInterval

DETALJER

Standard: 100 (Initializer + alla MCMC-presets, paperets standard), 155 (P9 Utomhus) Intervall: 50 – 500

TEKNISKT

Iterationsintervall inom vilket MCMC relokerar döda Gaussians (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold) till nya positioner. Kortare intervall (ungefär 50) verkar för störande, förlusten svänger; betydligt längre (ungefär 200) tar bort MCMC:s reaktionsförmåga. 100 är rätt värde. För utomhusscener ligger det något högre, 155 — de längre intervallen ger Adam mer tid att integrera nyplacerade Gaussians innan nästa relokeringshändelse sätter dem under press.

T67mcmcWarmupIterations

DETALJER

Standard: 500 Intervall: 100 – 5 000

TEKNISKT

Antal initiala iterationer under vilka ingen MCMC-relokering sker ännu. Först efter denna uppvärmning börjar relokeringslogiken. Syfte: under de första iterationerna har opacitetsvärdena ännu inte stabiliserats — om relokering startade direkt skulle Gaussians placeras på fel ställen och genast behöva flyttas igen, vilket förstör Adam-momentum. Paperets standardvärde 500. RadianceKit övertar detta värde eftersom det har visat sig robust.

T68mcmcDeadOpacityThreshold

DETALJER

Standard: 0,005 (Initializer, paperets standard), 0,01 (.fullMCMC och alla MCMC-presets) Intervall: 0,001 – 0,05

TEKNISKT

sigmoid(opacitet)-tröskelvärde under vilket en Gaussian betraktas som "död" och blir aktuell för relokering. 0.01 är rätt värde — 0.005 ändrar knappt något, 0.02 är sämre. Högre = aggressivare relokering (fler Gaussians flyttas), lägre = försiktigare. 0.01 motsvarar ungefär "0,5 % visuell synlighet". P10 Inomhus använder 0,0142.

T69mcmcNoiseDecayEnd

DETALJER

Standard: 0 (Initializer = "ingen avtagning"), 160 000 (.fullMCMC = 80 % av 200K), 96 000 (.mcmcBalanced = 80 % av 120K), 40 000 (.mcmcPreview) Intervall: 0 eller 1 000 –

TEKNISKT

Iteration vid vilken bruset från T63 mcmcNoiseScale dämpas fullständigt till noll (kosinusavtagning från iteration 0 till denna punkt). 80 % av maxIterations är rätt värde — det ger MCMC tillräckligt med utforskningstid men låter de sista 20 % konvergera utan brus. 0 = konstant brus över alla iterationer (sällan meningsfullt, MCMC kan då inte konvergera).

T70mcmcGrowthRate

DETALJER

Standard: 0,05 (paperets standard = 5 %) Intervall: 0,01 – 0,2

TEKNISKT

Tillväxttakt för MCMC:s populationsmål per relokeringssteg. Logiken: vid varje relokeringshändelse höjs målpopulationsstorleken med (1 + growthRate), tills T62 mcmcMaxGaussians (eller den skalade varianten via T72/T73) nås. 0.05 är rätt värde — högre värden leder till för snabb tillväxt (Gaussians infogas innan Adam-momentum hinner integrera dem), lägre till underdensifierade scener i slutänden.

T71mcmcSigmoidK

DETALJER

Standard: 100,0 Intervall: 10,0 – 500,0 Definieras i:

TEKNISKT

Sigmoid-skärpeparameter för MCMC-brusdämpningen. I SGLD-steget dämpas bruset per Gaussian — högopaka Gaussians (vars logit är positiv) får exponentiellt mindre brus än lågopaka. K = 100 är skarpt, det vill säga övergången från "fullt brus" till "inget brus" sker mycket snabbt runt opacitet 0.5. K = 100 är rätt värde — mindre värden (10–50) låter även högopaka Gaussians "vicka med" (förstör konvergerade Gaussians), större (> 500) gör övergången konstlat hård och döda Gaussians flyttas då inte alls.

T72mcmcCapMultiplier

DETALJER

Standard: 3,0 (Initializer + .fullMCMC), 2,0 (.mcmcPreview), 2,5 (.mcmcBalanced), 2,98 (P8 Render), 5,32 (P9 Utomhus), 1,76 (P10 Inomhus) Intervall: 0 (= inaktiverad) eller 1,0 – 10,0

TEKNISKT

1.4.5-funktion: scenanpassad takskalning. Om T73 mcmcAutoScaleByScene är true beräknas det effektiva taket som (klämt mot buffertkapaciteten). Bakgrund: i stora scener (t.ex. en drönarflygning med 1 545 foton → 158 K SfM-init) är T62 = 150 000 för lågt — densitetskontrollen skulle inte kunna växa alls. Med multiplikator 3.0 skalas taket i detta exempel till 474 K (158 K × 3.0). Scene-Class-presets använder scenspecifika värden: utomhus gynnas av en hög multiplikator (5,32 → ~830 K tak vid 156 K init-punkter), inomhus nöjer sig med 1,76 (väggar mättas snabbare). Fullständig upplösning av taket, se -metoden.

T73mcmcAutoScaleByScene

DETALJER

Standard: true (Initializer + alla MCMC-presets) Intervall: boolean

TEKNISKT

1.4.5-funktion: huvudbrytare för den scenmedvetna takslogiken (se T72 +). Om false används enbart T62 mcmcMaxGaussians som tak (tillbaka till 1.4.4-beteende). Aktiverad som standard, eftersom massutrotningsproblemen i stora scener från 1.4.3 annars skulle återkomma. Inaktivera manuellt endast om du uttryckligen vill sätta ett hårt tak — t.ex. för att träna en 150 K-variant vars slutstorlek ska vara förutsägbar.

Mip-Splatting (T74–T76)

Status: Mip-Splatting har i praktiken inte gett någon kvalitetsvinst och har på vissa utomhusscener till och med försämrat resultatet. Fälten förblir opt-in för experiment; i alla levererade Presets är Mip-Splatting avstängt.

T74useMipSplatting

DETALJER

Default: false (alla produktions-Presets), true (.fullMCMCMip — forsknings-sibling) Range: boolean

TEKNISKT

Aktiverar Mip-Splatting (Yu et al.~CVPR 2024): 3D-utjämningsfilter + 2D-filter + α-kompensation, som begränsar per-Gaussian-frekvensen till Nyquist-gränsen för den tätaste träningskamerans samplingsfrekvens. Teoretiskt mål: eliminering av aliasing vid rendering i off-training-skalor (0.5× eller 2× av träningsupplösningen). Aktiverat i preprocess- och backward-projection-shadrarna och funktionellt korrekt. I praktiken uteblev dock den efterlängtade kvalitetsvinsten: vid rendering i träningsupplösningen ändras i princip inget, och på utomhusscener blir bilden till och med sämre. En förklaring till detta: 3D-utjämningen arbetar mot MCMC-relocationen så fort många Gaussians är inblandade. Fältet förblir tillgängligt för egna multi-scale-försök.

T75mipSmoothing3DScale

DETALJER

Default: 0.2 (Paper-default) Range: 0.05 – 1.0

TEKNISKT

3D-utjämningsskal-parameter (Yu et al.~§3.3, paper-default 0.2). Större = mer utjämning i världsrymden per Gaussian (= mer anti-aliasing, men även mer oskärpa vid standardskalan), mindre = skarpare men mer känsligt för aliasing. Konsulteras endast om T74 useMipSplatting = true. Inte vidare optimerad — redan med paper-default 0.2 ger Mip-Splatting ingen vinst.

T76mipFilter2DVariance

DETALJER

Default: 0.3 (= exakt det tidigare beteendet) Range: 0.1 – 1.0

TEKNISKT

2D-Mip-filtervarians som adderas till Σ_2D-diagonalen (varians direkt, inte kvadrerad). 0.3 är exakt det värde som tidigare stod hårdkodat i kärnan innan Mip-Splatting fanns. Om T74 useMipSplatting = false, ignorerar kärnan detta värde helt och skriver det hårdkodade 0.3 — så att inget garanterat ändras jämfört med det tidigare beteendet. Om det är påslaget används det värde som anges här. Finns kvar i fältkatalogen för Mip-sweeps.

Adaptiv förtätning (T77–T79)

T77adaptiveDensification

DETALJER

Default: false Range: boolean

TEKNISKT

Rolling-Median-Tracker som alternativ till det fasta T11 densifyGradThreshold. Om true, skrivs i varje Densify-steg det aktuella tröskelvärdet över med median(senaste N avgGrad-Samples) × T79 adaptiveDensifyMultiplier . N = T78 adaptiveWindow. Striktare än p98-varianten från T52, som där utlöser den massiva pruningen: median gånger 2 ligger i det inkörda tillståndet ungefär vid p70–p80 av gradientfördelningen. Enbart påslaget ger fältet ingen kvalitetsvinst; tillsammans med kurrikulet (se T80/T81) däremot — där bär kurrikulet vinsten, det här fältet mer stabiliteten. Något manöverelement finns inte för detta: fältet är avstängt i alla presets och kan bara ställas in via en redigerad presetfil.

T78adaptiveWindow

DETALJER

Default: 1 000 Range: 100 – 10 000 Defined in:

TEKNISKT

Rolling-Median-Window i Densification-Events (INTE iterationer — varje T13 densifyInterval-steg ger ett sample). Default 1 000 — det betyder att de senaste 100 000 träningsiterationerna bidrar till medianen, alltså vanligtvis hela träningshistoriken fram till denna punkt. Tidig fas (innan T78 samples): Tracker returnerar nil → Fallback till fast tröskelvärde T11. Endast relevant om.

T79adaptiveDensifyMultiplier

DETALJER

Default: 2.0 Range: 1.0 – 4.0

TEKNISKT

Multiplikator på den rullande medianen för det adaptiva tröskelvärdet. Default 2.0 motsvarar ungefär p70–p80 av den typiska gradientfördelningen. Lägre = mer aggressiv tillväxt (fler kloner), högre = strängare (färre kloner). I intervallet 1.5–3.0 är 2.0 det bästa värdet. Endast relevant om.

Curriculum (T80–T81)

T80curriculumResolutionRamp

DETALJER

Default: false Range: boolean

TEKNISKT

Träningsupplösningen startar på 0.5× och växlar vid T50 positionLRScheduleEndIteration / 2 (eller T1 maxIterations / 2, om T50 inte är satt) till T22 trainingRenderScale. Överskuggar T23 resolutionWarmupScale om aktiverad. Av de två adaptiva tilläggen (se T77) är det detta curriculum som står för den egentliga kvalitetsvinsten — den stegvisa upplösningsökningen ger appen tid att hitta grov geometri på den lägre upplösningen innan den går vidare till fint detaljarbete. Går inte att ställa in i gränssnittet — endast via en redigerad Preset-fil, och då lämpligen tillsammans med T81.

T81curriculumSHProgression

DETALJER

Default: false Range: boolean

TEKNISKT

Överskuggar T21 shDegreeUpgradeIterations med [maxIter/4, maxIter/2, maxIter*3/4], fördelar alltså SH-uppgraderingarna jämnt över träningstiden istället för att lasta dem i början. Hypotes: stabil geometri etableras innan color-detalj-explosionen, vilket gör att de vy-riktningsberoende glans-effekterna positioneras mer exakt. Tillsammans med T77 ger detta en vinst i vissa scener; det är detta fält som bär den vinsten, T77 ensamt räcker inte. Går inte att ställa in i gränssnittet — endast via en redigerad Preset-fil.

Statiska förinställningar (TP1–TP9)

Här endast de strukturella skillnaderna mot Initializer-standarden. Den fullständiga marknadsföringsbeskrivningen av de elva UI-presets P1–P11 hittar du i kapitel 7.

TP1.preview

DETALJER

Diagnos-/förhandsgranskningspreset för system ≥ 10 GB RAM. Overrides gentemot Initializer:

  • maxIterations 30 000 → 5 000
  • densifyUntilIteration 15 000 → 3 500 (70 % av maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10× högre, mindre aggressiv decay)
  • shDCLearningRate, shRestLearningRate, opacityLearningRate, scaleLearningRate, rotationLearningRate vardera 2×
  • opacityResetInterval 3 000 → 100 000 (effektivt avstängt — reset förstör korta träningskörningar)
  • shDegreeUpgradeIterations [1K, 2K, 3K][1K, 2K] (grad 3 konvergerar inte i så korta körningar)
  • trainingRenderScale 1.0 → 0.5

TP2.full

DETALJER

Production-Quality Classic. Overrides:

  • maxIterations 30 000 → 35 000 (däröver hotar overtraining: fler Gaussians utan kvalitetsvinst)
  • densifyUntilIteration 15 000 → 5 000 (beprövat värde; att stoppa senare är sämre)
  • Alla LR:er 2×
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10× högre än standardvärdet från artikeln)
  • densifyGradThreshold 2e-6 → 1.1e-6 (kalibrerad för 1.0× upplösning)
  • densifyInterval 100 → 200
  • pruneOpacityThreshold 0.005 → 0.001
  • opacityResetInterval 3 000 → 100 000 (effektivt inaktiverat)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K] (fördröjd uppgradering)
  • opacityDecayFactor 0.0 → 0.9995 (HTGS-schema, tydlig kvalitetsvinst)
  • opacityDecayInterval 50 (oförändrad)
  • mergeAfterDensification false → true
  • positionLRScheduleEndIteration 0 → 20 000
  • postTrainingCompactification true (redan Initializer-standard för .full)

TP3.fullClassicPaper

DETALJER

Artikeltrogen Classic-variant av TP2. Overrides gentemot TP2:

  • maxIterations 35 000 → 30 000 (artikelstandard)
  • densifyUntilIteration 5 000 → 15 000 (artikel: 50 % av maxIter)
  • positionLearningRateFinal 1.6e-5 → 1.6e-6 (artikelstandard)
  • opacityLearningRate, scaleLearningRate, rotationLearningRate tillbaka till artikelns standardvärden (0.05, 0.005, 0.001)
  • densifyGradThreshold 1.1e-6 → 2e-7 (kalibrerad för ~1–2 M Gs på Bicycle)
  • densifyInterval 200 → 100 (artikel)
  • pruneOpacityThreshold 0.001 → 0.005 (artikelstandard)
  • opacityResetInterval 100 000 → 3 000 (artikel §5.2, riskabelt — kostar kvalitet i RadianceKits setup)
  • opacityDecayFactor 0.9995 → 0.0 (artikeln har ingen decay)
  • positionLRScheduleEndIteration 20 000 → 30 000 (cosine löper till 100 % av maxIter)

TP4.fullMCMC

DETALJER

Production-Quality MCMC. Overrides gentemot Initializer:

  • maxIterations 30 000 → 200 000 (MCMC behöver ungefär 5× fler iterationer än Classic)
  • densifyUntilIteration 15 000 → 160 000 (80 % av maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5
  • LR-schema som TP2 (alla 2×)
  • ssimWeight 0.2 → 0.05 (MCMC behöver en starkare L1-signal)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K]
  • densificationStrategy .classic.mcmc
  • mcmcMaxGaussians 150 000 (redan i Initializer, bekräftat i presetet)
  • mcmcNoiseScale 5e-5 (artikelvärde, beprövat)
  • mcmcDeadOpacityThreshold 0.005 → 0.01
  • mcmcNoiseDecayEnd 0 → 160 000 (80 % av maxIter)
  • mcmcCapMultiplier 3.0 (redan i Initializer)
  • mcmcAutoScaleByScene true (redan i Initializer)
  • opacityResetInterval 3 000 → 200 000 (effektivt avstängt, MCMC använder Reloc istället för reset)

TP5.fullMCMCMip

DETALJER

Mip-Splatting-variant av TP4 med originalartikelns Gaussian-budget. Overrides gentemot TP4:

  • mcmcMaxGaussians 150 000 → 1 500 000 (10×, artikelns magnitud)
  • useMipSplatting false → true (Mip på)

TP6.classicBalanced

DETALJER

Mid-Tier Classic. Overrides gentemot TP2:

  • maxIterations 35 000 → 20 000 (levererar praktiskt taget samma som 30 000, med märkbart kortare väntetid)
  • positionLRScheduleEndIteration 20 000 → 0 (Cosine löper till maxIter = 20K, ingen förlängd fas)

TP7.mcmcPreview

DETALJER

MCMC-diagnos. Overrides gentemot TP4:

  • maxIterations 200 000 → 60 000
  • densifyUntilIteration 160 000 → 48 000 (80 %)
  • mcmcMaxGaussians 150 000 → 100 000
  • mcmcNoiseDecayEnd 160 000 → 40 000
  • mcmcCapMultiplier 3.0 → 2.0 (Preview skalar mer återhållsamt)

TP8.mcmcBalanced

DETALJER

Mid-Tier MCMC. Overrides gentemot TP4:

  • maxIterations 200 000 → 120 000
  • densifyUntilIteration 160 000 → 96 000 (80 %)
  • mcmcNoiseDecayEnd 160 000 → 96 000 (80 %)
  • mcmcCapMultiplier 3.0 → 2.5 (mellan Preview 2.0 och Full 3.0)

TP9.quickTest

DETALJER

Rent funktionstest. Overrides gentemot Initializer:

  • maxIterations 30 000 → 1 000
  • densifyUntilIteration 15 000 → 500
  • densifyGradThreshold 2e-6 → 4e-6 (kalibrerad för 0.25× upplösning)
  • densifyInterval 100 → 50
  • opacityResetInterval 3 000 → 100 000 (av, eftersom det är alldeles för kort)
  • trainingRenderScale 1.0 → 0.25

Hur appen bestämmer Gaussian-taket

Det avgörande svaret på frågan "hur många Gaussians får MCMC max låta växa till?". Tre storheter går in i beräkningen: det inställda värdet från T62 mcmcMaxGaussians, antalet SfM-init-punkter i din scen och den i förväg reserverade buffertkapaciteten. Appen räknar i denna ordning:

+ Utgångsvärdet är T62. Står det på 0 sätter appen 150 000 — detta säkerhetsgolv förhindrar mass-extinction-incidenten från 1.4.3. + Om T73 mcmcAutoScaleByScene är påslaget och T72 mcmcCapMultiplier är större än 0, jämför appen utgångsvärdet med "Init-punkter × T72" och tar det större av de två värdena. + Till sist begränsar den resultatet till buffertkapaciteten.

Exempel: Bicycle (Mip-NeRF 360, 194 foto-frames) → SfM-init ~156 K punkter, T62 = 150 000, T72 = 5.32, auto-scale på, buffertkapacitet 8 M. 156 K × 5,32 ger 830 K, vilket är mer än 150 000 och mindre än 8 M — det effektiva taket är alltså 830 K. Det är denna gräns som MCMC-relokaliseringen håller sig till.

Beräknar det verkliga maximala antalet splats vid MCMC. Appen tar din inställning "Max Gaussians", tittar på hur många punkter din scen har från början, och skalar med multiplikatorn om "Auto-scale by scene" är påslaget. På så sätt anpassar sig taket till scenen, istället för att tvinga fram samma värde för en liten och en enorm scen. Du behöver inte göra något — appen räknar ut det själv när träningen startar.

Vilket fält gör vad? (Fusklapp)

MålFält att justera
Mer detalj på avståndT62 mcmcMaxGaussians högt, T72 mcmcCapMultiplier 5+
Mer detalj generellt (Classic)T1 maxIterations högt (≤ 40K), T2 densifyUntilIteration ≤ 14 % av T1
Minska floaters i drönarflygningarT43 frustumCullEnabled på, T20 skyMaskingEnabled på, T45 skyDomeEnabled
Vackrare himmel i utomhusscenerT45 skyDomeEnabled på, T47 skyDomeRadiusMultiplier 30–60
Mindre exportfilStrategi .mcmc (T61), T56 postTrainingCompactification på, T62 mcmcMaxGaussians ≤ 200K
Snabbare träningT22 trainingRenderScale 0.5, halvera T1 maxIterations — men inte båda!
Bättre glansdagrarT21 shDegreeUpgradeIterations med [2K, 5K, 8K] (ingen tidig uppladdning), MCMC + 200K iter
Livevisning oftareT59 livePreviewInterval till 50 — det tätaste värdet som Inställningar → Träning erbjuder
Mjukare övergångar vid skuggorT17 ssimWeight något högt (0.15–0.25), men inte över 0.3
Håll inomhusmiljöer kompaktaP10 Inomhus-preset (, T72 = 1.76)

Riskabla fält

Dessa fält kan vid felaktig konfiguration leda till OOM, appkrasch, massutdöende av Gaussians eller oanvändbara benchmark-data. Ska hanteras med försiktighet:

- T11 densifyGradThreshold — en halvering kan skapa 2–4× så många Gaussians, vilket snabbt spränger GPU-minnet. Tänk även på: måste stämma överens med T22 trainingRenderScale (1.0× → 1e-6, 0.5× → 2e-6, 0.25× → 4e-6). - T72 mcmcCapMultiplier — vid stora scener med > 200 K SfM-init-punkter och multiplier > 5 uppstår ett resolved cap på miljontals Gaussians. På 36 GB RAM-Mac:ar är OOM möjligt. Utomhusvärdet 5.32 fungerar bara för att den tillhörande referensscenen har omkring 156 K init-punkter → 830 K cap. - T39 testViewIndices — manuell inställning i en preset-fil kan göra en kvalitetsmätning oanvändbar (alla index > N → inga holdouts). Låt listan vara tom. - T64 mcmcOpacityRegWeight och T65 mcmcScaleRegWeight — I 1.4.3-beta satt till 0.01, vilket ledde till massutdöende (460 K → 5 Gaussians på en iteration). Sedan 1.4.4 fixerat till 0.0, men manuell höjning kan reproducera problemet. - T15 opacityResetInterval — om inte 100 000+ (i praktiken avstängt) och träningen är kortare än 10 000 iterationer, förstör återställningen konvergensen. .preview har det därför satt till 100 000 trots maxIterations = 5 000. - T54/T55 densifyPhase2* — Den andra densification-fasen slutar i en kaskad ner till noll Gaussians. Låt båda stå på 0. - T74 useMipSplatting — ger ingen kvalitetsvinst och kan på vissa utomhusscener till och med försämra bildkvaliteten. Avstängt som standard, opt-in endast för experiment.

Om ett fält står med på den här listan och du vill ändra det, gör en säkerhetskopia av din nuvarande preset innan du gör det (exportera som JSON) och fundera på om du kan mäta resultatet reproducerbart — annars vet du efteråt inte om du har åstadkommit en förbättring eller en försämring.