Användarguide

Kapitel 8 — Exportformat

Export-Format-Auswahl im Simple-Modus — sechs Format-Karten: PLY, SPZ, glTF, .splat, Orbit Video, Web Viewer
Val av exportformat i Simple-läget — sex formatkort (PLY, SPZ, glTF, .splat, Orbit Video, Web Viewer). Expert-läget visar samma val som ett tätare rutnät med fler mål.
Export-Abschnitt mit dem Format-Raster — neun Kacheln mit Größenangabe: PLY 2,2 MB (ausgewählt), cPLY 142 KB, SOG 89 KB, SPZ 216 KB, glTF 2,1 MB, .splat 279 KB, Video Zero KB, Wiggle Zero KB, Web 378 KB; darunter der Knopf „Export PLY (3DGS Standard)“ und „Upload to SuperSplat…“
Exportsektionen med formatrutnätet — nio rutor med storleksangivelse: PLY 2,2 MB (vald, blåmarkerad), cPLY 142 KB, SOG 89 KB, SPZ 216 KB, glTF 2,1 MB, .splat 279 KB, Video 0 KB, Wiggle 0 KB och Web 378 KB; nedanför den blå knappen „Export PLY (3DGS Standard)" och posten „Upload to SuperSplat…"

Vad man ser på bilden: Storleksangivelsen under varje formatruta beräknas i realtid utifrån det aktuella antalet Gaussians och formatets overhead — inte hårdkodad. Från samma scen blir det alltså 2,2 MB PLY, 142 KB cPLY, 89 KB SOG, 216 KB SPZ, 2,1 MB glTF och 279 KB .splat; Web hamnar på 378 KB eftersom visaren ligger inbäddad i filen där. Video och Wiggle visar „0 KB", eftersom storleken först är känd efter kodningen. Den valda rutan är blåmarkerad, och knappen nedanför tar över dess namn — här „Export PLY (3DGS Standard)". Under rubriken står raden „Leveling the floor turns the view at once; the chosen orientation and format apply when saving".

En avslutad träning ger ett Gaussian-moln — en samling av allt från några hundra tusen upp till miljoner 3D-gaussfördelningar som tillsammans rekonstruerar scenen. Det här kapitlet beskriver tio sätt att skriva det här molnet till hårddisken. Sex av dem är rena 3D-dataformat (PLY, Compressed PLY, SPZ, SOG, glTF, .splat), ett paketerar molnet tillsammans med en färdig HTML-visare (Web Viewer), ett renderar en MP4-fil från en orbit-kamerafart (Orbit Video), och två exporterar inget Gaussian-innehåll utan bara SfM-resultatet (kamerapositioner och grov punktmoln) för återanvändning i andra tränings-pipelines (transforms.json + COLMAP-Workspace).

Åtta av dessa vägar finns tillgängliga i exportsektionen som rutor — transforms.json och COLMAP-Workspace finns bara i menyn. Dessutom innehåller rutnätet en nionde ruta Wiggle, och under exportknappen står Upload to SuperSplat…, som skickar scenen direkt till SuperSplat-editorn på nätet istället för till en fil.

Vilket format som är rätt beror på ändamålet. För arkivering av fulla data utan kvalitetsförlust tar man PLY. För webbvisare på egen sida räcker oftast .splat eller den inbyggda webbvisaren. Om filen måste vara minimal lönar det sig med SPZ eller SOG. För återanvändning av SfM-resultatet i Nerfstudio, Postshot eller Brush är transforms.json och COLMAP-Workspace de rätta vägarna.

Alla exportfunktioner finns i menyn „Export" samt i Simple-läget på det sista guidesteget. De flesta format är helt sandlåde-kompatibla och fungerar i App Store-versionen. Endast SOG kräver en extern binär (cwebp), som inte nödvändigtvis finns med i App Store-bygget — se detaljer i E4.

E1 — PLY (.ply)

VAR

Menyrad → Export → 3D Formats → Export PLY… (⌘E). Simple-läge: guidesteget Export → formatkortet „PLY". Storlek: typiskt 100 % (referensvärde). Kompatibel med: SuperSplat, PolyCam, alla 3DGS-visare.

TEKNISKT

PLY är det kanoniska lagringsformatet för 3D Gaussian Splatting. RadianceKit skriver en binär little-endian-fil med den standardiserade 3DGS-egenskapslayouten: per Gaussian en position med tre komponenter, tre normaler som alltid är nollställda, tre DC-SH-koefficienter (f_dc_0..2) för basfärgen i RGB, följt av upp till 45 ytterligare SH-koefficienter (f_rest_0..44) i den transponerade channel-major-ordningen som definieras i Kerbl-2023-artikeln (först alla R-kanal-koefficienter, sedan alla G, sedan alla B), följt av logit-opacitet (råa pre-sigmoid-värden), tre log-space-skalor och en wxyz-kvaternionrotation. Den maximalt exporterade SH-graden clampas till minimum av användarens önskemål och den faktiskt inlärda graden; standard är 3 (45 rest-koefficienter). Innan skrivningen beräknas payload-storleken som en 64-bitars heltalssumma för att fånga överflöd vid extremt stora moln. Filen skrivs atomärt, vilket vid stora moln tillfälligt tar upp dubbel diskutrymme.

E2 — Compressed PLY (.ply)

VAR

Menyrad → Export → 3D Formats → Export Compressed PLY…. Simple-läge: formatkortet „Compressed PLY". Storlek: ca 10–20 % jämfört med PLY (5- till 10-faldig komprimering). Kompatibel med: SuperSplat, PlayCanvas-motorn, webbaserade visare.

TEKNISKT

PlayCanvas-varianten av PLY-formatet med chunkad kvantisering. Gaussians grupperas i chunkar om 256. Per chunk lagras min/max-gränser för position, skala och färg separat i huvudet; de enskilda Gaussianerna refererar till sina värden relativt till dessa gränser och komprimeras till 32 bitar vardera: position och skala med 11-10-11-bitars packning, rotation som en 2-10-10-10-bitars „smallest-three"-kvaternion, färg som 8-8-8-8-RGBA. Högre SH-koefficienter kvantiseras med endast 8 bitar per komponent (tre byte per koefficient och Gaussian). Formatet i sig är fortfarande ASCII-header-PLY och därmed i grunden validerbart med PLY-verktyg, men vertex-egenskaperna är deklarerade som uint-fält. SH-graden är per standard 0 (inga rest-koefficienter) för att maximera komprimeringen — högre SH-grader kan väljas explicit.

E3 — SPZ (.spz)

VAR

Menyrad → Export → 3D Formats → Export SPZ…. Simple-läge: formatkortet „SPZ". Storlek: ca 10 % jämfört med PLY (90 % mindre). Kompatibel med: Niantic Scaniverse, Niantic Spatial Fields, MetalSplatter.

TEKNISKT

Niantics SPZ v2-format. Positioner packas som 24-bitars fixed-point (vilket ger ca 0,25 mm upplösning), skalor som 8-bitars kvantisering i log-rymden, rotationer som 8-bitars smallest-three (i v2 lagras bara xyz, w härleds i avkodaren från kvaternionnormen), opaciteter som sigmoidiserade 8-bitars värden. DC-SH lagras med en SPZ-specifik packningsformel (dc_raw * 0.15 * 255 + 0.5 * 255), högre SH-band med 5 bitar (band 1) respektive 4 bitar (band 2–3) per koefficient. Hela den packade binärblobben komprimeras därefter med standard-gzip (RFC 1952), vilket ger ett gzippat containerformat med magiska byte 1f 8b. RadianceKit anropar system-gzip för detta, eftersom Apples inbyggda zlib-API genererar en proprietär Apple-inramning, vilket inte skulle vara kompatibelt med SPZ-läsarna i Spatial Fields eller MetalSplatter. System-gzip går fortfarande att starta inom macOS-sandlådan.

E4 — SOG (.sog)

VAR

Menyrad → Export → 3D Formats → Export SOG…. Simple-läge: formatkortet „SOG". Storlek: ca 5–6 % jämfört med PLY (15- till 20-faldig komprimering — det minsta alternativet). Kompatibel med: PlayCanvas-motorn, SuperSplat-editorn.

TEKNISKT

„Spatially Ordered Gaussians" — ett PlayCanvas-format som lagrar molnet GPU-redo i flera förlustfria WebP-bilder. Först sorteras alla Gaussians rumsligt med 3D-Morton-kod (30-bitars Z-order, 10 bitar per axel), vilket ger bilderna bättre cache-lokalitet senare i rendereraren. Sedan kvantiseras positioner med symmetrisk log-transform (för bättre dynamikomfång) till 16-bitars värden och delas upp i två RGBA-bilder (means_l.webp för de nedre 8 bitarna, means_u.webp för de övre). Rotationer kodas som smallest-three med 3×8 bitar plus 2-bitars mode i en RGBA-bild (mode hamnar i alfa som 252 + largest). Skalor och DC-SH kvantiseras med varsin kodbok med 256 poster (percentilbaserat fördelad över alla värden), indexen hamnar i scales.webp och sh0.webp. De fem bilderna plus en meta.json med kodböcker och gränser packas i en ZIP-fil (egen kodare, eftersom sandlådan blockerar system-zip) och sparas med filändelsen .sog.

Obs, sandlåda: SOG är det enda formatalternativ som kräver en extern binär. WebP-kodningssteget anropar cwebp från /usr/local/bin/cwebp eller /opt/homebrew/bin/cwebp. Om ingen cwebp-binär hittas, faller koden tillbaka till rå PNG-kodning — men: PNG-fallback fungerar inte i SuperSplat. I App Store-versionen utvärderas tillgängligheten utifrån byggvarianten; i utvecklarversionen måste cwebp installeras via Homebrew (brew install webp).

E5 — glTF (.glb)

VAR

Menyrad → Export → 3D Formats → Export glTF…. Simple-läge: formatkortet „glTF". Storlek: jämförbar med PLY. Kompatibel med: glTF-visare med KHR_gaussian_splatting-tillägget (Khronos-utkaststandard).

TEKNISKT

Skriver en självbärande .glb-binärfil (ingen separat bin-filbilaga) enligt KHR_gaussian_splatting-tilläggsspecifikationen. Positioner lagras som vanliga glTF-POSITION-vertex-data (float3), alla andra attribut (rotation som float4, skala som float3, opacitet som float, SH-koefficienter som float3 × shCoeffCount) ligger i ytterligare vertex-attribut och refereras via tillägget. Viktigt: glTF använder ett högerhänt Y-upp-koordinatsystem, COLMAP/3DGS arbetar med Y-ner/Z-framåt. Exportören tillämpar därför en 180-graders rotation runt X-axeln — positioner skrivs om med (x, -y, -z), kvaternioner anpassas till (w, x, -y, -z). Detta ger en geometriskt korrekt, händig (icke-spegelvänd) representation i glTF-visare. JSON- och binärchunkar paddas till 4-byte-alignment, enligt vad GLB-standarden kräver.

E6 — Splat (.splat)

VAR

Menyrad → Export → 3D Formats → Export .splat…. Simple-läge: formatkortet „.splat". Storlek: exakt 32 byte per Gaussian. Kompatibel med: gsplat.js, webbaserade visare (antimatter15-referens), de flesta webbläsarbaserade 3DGS-demos.

TEKNISKT

Antimatter15-.splat-formatet — 32 byte per Gaussian, ingen header, ingen indirektion. Layout per post: 3 × float32 position (världskoordinater), 3 × float32 skala (exp-transformerad från log-rymden i den interna bufferten), 4 × uint8 RGBA-färg (DC-SH-koefficienten skalad med SH_C0 = 0.282... och clampad till [0,255]), 4 × uint8 kvaternion (w,x,y,z, normaliserad och kodad till bytintervallet som 128 + 128*q). Bara DC-SH lagras — högre SH-band kastas bort. Det gör formatet extremt kompakt, men kostar de vinkelberoende färgändringar som uppstår vid reflektioner eller specular highlights. Skrivordningen följer exakt indexordningen i molnet (ingen rumslig sortering), webbvisare som gsplat.js renderar utifrån det.

Web Viewer geöffnet im Firefox — Bjoerns Bouquet-Splat gerendert mit umgebenden Kamera-Marker-Sphären, Browser-Tab-Bar oben sichtbar, kein CDN-/Server-Setup nötig
Web Viewer öppnad i Firefox — Björns bukett-splat renderad med omgivande kamera-markörsfärer, webbläsarens flikrad synlig upptill, ingen CDN-/serveruppsättning behövs. Fristående flowers-01.html öppnad direkt från Finder med dubbelklick i standardwebbläsaren — det inbäddade WebGL2-programmet renderar Gaussian-molnet omedelbart, utan nätverk eller server. De svarta markörerna runt buketten är träningskamerorna, som kan visas valfritt. Musdrag roterar, scroll zoomar.

E7 — Web Viewer (.html)

VAR

Menyrad → Export → Media → Export Web Viewer…. Simple-läge: formatkortet „Web Viewer". Storlek: splat-data base64-kodade (≈ 4/3 overhead) + ca 5 KB HTML/JS-skal. Kompatibel med: alla moderna webbläsare med WebGL2 (alla stationära, iOS 15+, Android 5+).

TEKNISKT

Paketerar Gaussian-molnet tillsammans med en helt inline skriven WebGL2-renderare i en enda .html-fil. Det finns inga CDN-beroenden, inget WASM, ingen andra fil. Molnet kodas internt först som en .splat-binärfil (samma 32-byte-logik som E6), sedan base64-inbäddad, sedan avkodad i webbläsaren med atob. Den inbyggda rendereraren gör egen WebGL2-sortering, musorbitkontroll och CPU-sortering per bildruta; hela JS-koden (shaders, matematik, loop) syns i utgivna HTML:en. Axelkonventionen vid gränsen mellan lagring och renderare är exakt densamma som i E5: position (x, -y, -z), kvaternion (w, x, -y, -z). Valfritt kan ett brandingöverlägg visas (free-tier-brytare). Eftersom allt är inline fungerar filen även direkt från file://-protokollet — ingen lokal webbserver behövs för att testa.

Einzelframe extrahiert aus flowers-01.mp4 — Bjoerns Bouquet im Profil-Render, weiße Plattform mit Kamera-Markern sichtbar, schwarzer Hintergrund — typischer Orbit-Kamerafahrt-Frame ca. 5s in den Video-Lauf
Enskild bildruta extraherad från flowers-01.mp4 — Björns bukett i profilrender, vit plattform med kameramarkörer synlig, svart bakgrund (standard-viewport-bakgrund, ändringsbar i inställningarna). Kameran kretsar kring scenen på en parametrisk bana (elevation + avstånd fast, yaw roterar), varaktighet typiskt 6–10 sekunder vid 30 eller 60 fps. Bildrutans upplösning skalbar från 480p till 8K via den valda videoförinställningen.

E8 — Orbit Video (.mp4/.mov)

VAR

Menyrad → Viewport → Record Turntable Video ELLER Menyrad → Export → Media → Export Orbit Video…. Simple-läge: formatkortet „Orbit Video" med varaktighetsreglaget 3–30 s. Storlek: beroende av varaktighet, upplösning, bithastighet. Kompatibel med: alla plattformar (H.264 och HEVC är Apple-standard).

TEKNISKT

Renderar Gaussian-molnet längs en parametrisk orbit-kamerafart och kodar varje bildruta via AVAssetWriter till en MP4- eller MOV-fil. Orbit-konfigurationen styr rotationshastighet (varv), avstånd, elevation, FOV, varaktighet och ease-in/out-faktor. Orbit-video-exporten går genom RadianceKits EGET renderingssteg med full SH-utvärdering — pixel-identiskt med in-app-viewporten (WYSIWYG). Per bildruta multipliceras världsanpassningsmatrisen (beräknad av rendereraren för att rotera de interna koordinaterna till den Y-uppåt-orienterade orbit-världen) med kameran, och därefter tillämpas en kamerakonverteringsspegling (orbit-Y-upp → COLMAP-Y-ner). Offscreen-rendermålet dras via IOSurface till en CVPixelBuffer för kodaren. Kodaren stödjer H.264 och HEVC, konfigurerbar bithastighet och upplösning från 480p till 8K. Innan den första bildrutan väntar rendereraren 200 ms så att den initiala splatt-sorteringen hinner avslutas. Den här exporten är GPU-bunden — vid 8K och miljontals Gaussians ligger rendertiden per bildruta på flera sekunder, alltså är totala rendertider på 10–30 minuter för 6 s video möjliga.

E9 — SfM Transforms (transforms.json)

VAR

Menyrad → Export → Photogrammetry → Export SfM (transforms.json)…. Storlek: typiskt 1–10 KB (bara poser + intrinsics, inga bilder, inga Gaussians). Kompatibel med: nerfstudio, Brush, gsplat, OpenSplat, Meshroom, alla moderna feed-forward-3DGS-tränare.

TEKNISKT

Skriver nerfstudio-transforms.json-formatet med en lista över kamerapositioner plus delade intrinsics. Per kamera inverteras vy-matrisen (RadianceKit-internt: world-to-camera i COLMAP-konvention), varefter de kameralokala Y- och Z-basvektorerna speglas för att konvertera till nerfstudio-konventionen (OpenGL-stil, kameran tittar längs -Z, +Y är upp). Den slutgiltiga 4×4-matrisen hamnar som en row-major nästlad array av doubles i transform_matrix-fältet för varje bildruta. Intrinsics lagras på toppnivå (brännvidd x/y, huvudpunkt x/y, bildbredd/-höjd, camera_model = "OPENCV", plus distortion-koefficienterna k1, k2, p1, p2) — utom när exportören upptäcker flera olika intrinsics-set, då skrivs de per bildruta. Bildsökvägar skrivs som images/<filename> relativt JSON-filen; användaren måste skapa en syskonmapp images/ med träningsfotona.

E10 — COLMAP Workspace (sparse/0/)

VAR

Menyrad → Export → Photogrammetry → Export SfM (COLMAP Workspace)…. Storlek: tre binärfiler tillsammans typiskt 4–8 MB — points3D.bin dominerar (en rad per 3D-punkt i det glesa molnet), images.bin och cameras.bin ligger var för sig långt under 100 KB. Kompatibel med: COLMAP självt, Nerfstudio, Postshot, Meshroom, alla verktyg som förväntar sig en COLMAP-sparse/-katalog.

TEKNISKT

Skriver standard-COLMAP-sparse/0/-layouten med tre binärfiler: cameras.bin, images.bin, points3D.bin. Formatreferens är den officiella COLMAP-dokumentationen. cameras.bin innehåller den deduplicerade intrinsics-listan (kameror med identiska intrinsics + bildstorlek slås samman till en enda post); den använda kameramodellen är OPENCV (modell 4), med fx/fy/cx/cy plus de fyra distortion-koefficienterna k1/k2/p1/p2. images.bin listar per bild posen som en wxyz-kvaternion plus translation, följt av kamera-ID och filnamn; inga 2D-3D-korrespondenser lagras. points3D.bin innehåller SfM-punktmolnet med position, färg (0–255 RGB) och standardvärden för reprojektion och spårlängd. Allt skrivs i little-endian. Återimport i RadianceKit fungerar via filmenyn → „Import COLMAP/Metashape Workspace…" (se Q3 i SfM-backend-kapitlet).

Vilket format när?

MålFormat
Webbvisare på egen sidaE7 Web Viewer (.html)
Webbvisare med gsplat.jsE6 Splat (.splat)
Pipeline-återanvändning i Postshot / NerfstudioE9 transforms.json + E10 COLMAP Workspace
SuperSplat-redigeringE1 PLY eller E2 Compressed PLY
Niantic Scaniverse / Spatial FieldsE3 SPZ
Maximal komprimeringE4 SOG (cwebp krävs)
Marknadsförings-/socialt videoklippE8 Orbit Video
Fortsätt redigera scenen på nätetKnappen „Upload to SuperSplat…" under formatrutnätet

Snabbjämförelse

FormatFiländelseSandboxStorlek (1M Gauss)Bäst för
E1 PLY.plyja~250 MBArkiv, högsta kompatibilitet
E2 Compressed PLY.plyja~40 MBWebb + SuperSplat
E3 SPZ.spzja (gzip-spawn)~40 MBNiantic + mobil
E4 SOG.sogvillkorat (cwebp)~20 MBMaximal komprimering
E5 glTF.glbja~250 MBKhronos-pipeline
E6 Splat.splatja~32 MBgsplat.js webbvisare
E7 Web Viewer.htmlja~45 MBFristående webbläsarfil
E8 Orbit Video.mp4/.movjavariabelSociala medier/marknadsföring
E9 SfM Transforms.jsonja~5 KBPosöverföring
E10 COLMAP WorkspaceKatalogja~4–8 MBPosöverföring binärt

Kolumnen för storlek är ungefärliga riktvärden för 1 miljon Gaussians med SH-grad 3. Verkliga värden varierar beroende på hur komprimerbar scenen är; SH-grad 0 minskar PLY/glTF med en faktor 4.