Brugervejledning

Kapitel 8 — Eksportformater

Eksportformat-valg i Simple Mode — seks format-kort
Eksportformat-valg i Simple Mode — seks format-kort
Eksportformat-grid live efter 5K-iter-træning på flowers-buket — alle seks kort med dynamisk størrelsesberegning (PLY 742 KB valgt, SPZ 74 KB, glTF 708 KB,.splat 96 KB, Orbit Video ~Zero KB, Web Viewer 133 KB), Export History til højre med allerede gemt PLY
Eksportformat-grid live efter 5K-iter-træning på flowers-buket — alle seks kort med dynamisk størrelsesberegning (PLY 742 KB valgt, SPZ 74 KB, glTF 708 KB, .splat 96 KB, Orbit Video ~Zero KB, Web Viewer 133 KB), Export History til højre med allerede gemt PLY

Hvad billedet viser (2 991 gaussians, SH degree 3, Bjoerns syntetiske Blender-buket som IP-clean test-sæt): Størrelsesangivelserne under hvert format-kort beregnes live ud fra aktuelt gaussian-antal og format-overhead — ikke hårdkodet. Ud af 2 991 gaussians (SH degree 3) opstår 742 KB PLY, 74 KB SPZ (faktor ~10× mindre via kvantisering), 708 KB glTF (med KHR_gaussian_splatting-extension, derfor næsten PLY-ækvivalent), 96 KB .splat (komprimeret 24-byte-pr.-gaussian-format). Orbit Video viser „~Zero KB", fordi størrelsen først kendes efter MP4-encoding. Web Viewer (133 KB) samler en selvstændig HTML-fil med indlejret WebGL-viewer og komprimerede splat-data — større end rent .splat på grund af viewer-overhead. Export History til højre lister allerede afsluttet PLY-eksport („training_20260527T211321Z.ply, 743 KB, 23:13") med format-pille og reveal-i-Finder-action.

En afsluttet træning leverer en gaussian-cloud — en samling på nogle hundredtusinde til millioner af 3D-gauss-fordelinger, der tilsammen rekonstruerer scenen. RadianceKit kender ti måder at skrive denne sky til disk på. Seks af dem er rene 3D-dataformater (PLY, Compressed PLY, SPZ, SOG, glTF, .splat), et bundler skyen sammen med en færdig HTML-viewer (Web Viewer), et renderer en MP4-fil ud af en orbit-kamerakørsel (Orbit Video), og to eksporterer ingen gaussian-indhold, men kun SfM-resultatet (kamerapositioner og grov punktsky) til genbrug i andre trænings-pipelines (transforms.json + COLMAP-workspace).

Hvilket format der er det rette hvornår, afhænger af målet. Til arkivering af de fulde data uden kvalitetstab tager man PLY. Til web-viewer på egen side rækker som regel .splat eller den indbyggede web-viewer. Hvis filen skal være minimal, betaler SPZ eller SOG sig. Til genbrug af SfM-resultatet i Nerfstudio, Postshot eller Brush er transforms.json og COLMAP-workspace de rigtige veje.

Alle eksportfunktioner ligger i menuen „Export" og i Simple Mode på det sidste wizard-trin. De fleste formater er fuldt sandbox-konforme og virker i App Store-versionen. Kun SOG kræver en ekstern binary (cwebp), som ikke nødvendigvis er til stede i App Store-buildet — detaljer se E4.

E1 — PLY (.ply)

HVOR

Menulinjen → Export → 3D Formats → Export PLY… (⌘E). Simple Mode: wizard-trin Export → format-kort „PLY". Størrelse: typisk 100 % (referenceværdi). Kompatibel med: SuperSplat, PolyCam, alle 3DGS-viewere.

TEKNISK

PLY er det kanoniske lagringsformat for 3D Gaussian Splatting. RadianceKit skriver en binær Little-Endian-fil med det standardiserede 3DGS-property-layout: pr. gaussian trekomponent position, tre normaler altid sat til nul, tre DC-SH-koefficienter (f_dc_0..2) for basis-RGB-farven, derefter op til 45 yderligere SH-koefficienter (f_rest_0..44) i den i Kerbl-2023-papiret definerede transponerede channel-major-ordning (først alle R-kanal-koefficienter, så alle G, så alle B), efterfulgt af logit-opacitet (rå pre-sigmoid-værdier), tre log-space-skaler og en wxyz-quaternion-rotation. Den maksimalt eksporterede SH-grad klampes til minimum af brugerønske og faktisk lært grad; default er 3 (45 rest-koefficienter). Før skrivning beregnes payload-størrelsen i 64-bit integer for at fange overflow ved ekstremt store skyer. Filen skrives atomisk, hvilket ved store skyer kortvarigt optager dobbelt diskplads.

E2 — Compressed PLY (.ply)

HVOR

Menulinjen → Export → 3D Formats → Export Compressed PLY…. Simple Mode: format-kort „Compressed PLY". Størrelse: ca. 10–20 % i forhold til PLY (5- til 10-gange komprimering). Kompatibel med: SuperSplat, PlayCanvas-engine, webbaserede viewere.

TEKNISK

PlayCanvas-varianten af PLY-formatet med chunked kvantisering. Gaussians grupperes i 256-stykker-chunks. Pr. chunk lægges min/max-bounds for position, scale og color separat i headeren; de enkelte gaussians refererer deres værdier relativt til disse bounds og komprimeres til hver 32 bit: position og skala med 11-10-11-bit-pakning, rotation som 2-10-10-10-bit „smallest-three"- quaternion, farve som 8-8-8-8-RGBA. Højere SH-koefficienter kvantiseres med kun 8 bit pr. komponent (shCoeffCount * 3 uchar pr. gaussian). Selve formatet er stadig ASCII-header-PLY og derfor principielt validerbart med PLY-værktøjer, men vertex-properties er erklæret som uint-felter. SH-grad er pr. default 0 (ingen rest-koefficienter) for at maksimere komprimeringen — højere SH-grader kan vælges eksplicit.

E3 — SPZ (.spz)

HVOR

Menulinjen → Export → 3D Formats → Export SPZ…. Simple Mode: format-kort „SPZ". Størrelse: ca. 10 % i forhold til PLY (90 % mindre). Kompatibel med: Niantic Scaniverse, Niantic Spatial Fields, MetalSplatter.

TEKNISK

Niantics SPZ-v2-format. Positioner pakkes som 24-bit-fixed-point (det giver ca. 0,25 mm opløsning), skaler som 8-bit-kvantisering i log-rum, rotationer som 8-bit-smallest-three (i v2 gemmes kun xyz, w afledes i decoderen af quaternion-normen), opaciteter som sigmoideret 8-bit-værdier. DC-SH gemmes med en SPZ-specifik pakke-formel (dc_raw * 0.15 * 255 + 0.5 * 255), højere SH-bånd med 5 bit (bånd 1) henholdsvis 4 bit (bånd 2-3) pr. koefficient. Hele den pakkede binær-blob komprimeres derefter med standard-gzip (RFC 1952), hvilket giver et gzipped-container-format med magic bytes 1f 8b. RadianceKit kalder hertil system-gzip, fordi Apples indbyggede zlib-API producerer proprietær Apple-framing, der ikke ville være kompatibel med SPZ-readerne i Spatial Fields eller MetalSplatter. System-gzip kan stadig spawnes inden for macOS-sandboxen.

E4 — SOG (.sog)

HVOR

Menulinjen → Export → 3D Formats → Export SOG…. Simple Mode: format-kort „SOG". Størrelse: ca. 5–6 % i forhold til PLY (15- til 20-gange komprimering — den mindste mulighed). Kompatibel med: PlayCanvas-engine, SuperSplat-editor.

TEKNISK

„Spatially Ordered Gaussians" — et PlayCanvas-format, der gemmer skyen GPU-ready i flere lossless-WebP-billeder. Først sorteres alle gaussians rumligt via 3D-Morton-code (30-bit Z-order, 10 bit pr. akse), hvilket giver billederne senere cache-lokalitet i rendereren. Så kvantiseres positioner med symmetrisk log-transformation (for bedre dynamikomfang) til 16-bit-værdier og splittes i to RGBA-billeder (means_l.webp for de nederste 8 bit, means_u.webp for de øverste). Rotationer kodes som smallest-three med 3×8-bit plus 2-bit-mode i et RGBA-billede (mode lander i alpha som 252 + largest). Skaler og DC-SH kvantiseres hver med en 256-indgangs-codebook (percentil-baseret fordelt over alle værdier), indekserne lander i scales.webp og sh0.webp. De fem billeder plus en meta.json med codebooks og bounds pakkes i en ZIP-fil (custom-encoder, fordi sandboxen blokerer system-zip) og gemmes med endelsen .sog.

Sandbox-advarsel: SOG er den eneste format-mulighed, der kræver en ekstern binary. WebP-encoder-trinet kalder cwebp fra /usr/local/bin/cwebp eller /opt/homebrew/bin/cwebp. Hvis ingen cwebp-binary findes, falder koden tilbage på rå PNG-encoding — men: PNG-fallback fungerer ikke i SuperSplat. I App Store-versionen evaluér tilgængeligheden ud fra build-varianten; i developer-varianten skal cwebp være installeret via Homebrew (brew install webp).

E5 — glTF (.glb)

HVOR

Menulinjen → Export → 3D Formats → Export glTF…. Simple Mode: format-kort „glTF". Størrelse: sammenlignelig med PLY. Kompatibel med: glTF-viewere med KHR_gaussian_splatting-extension (Khronos-draft-standard).

TEKNISK

Skriver en selvstændig .glb-binærfil (ingen separat bin-fil-vedhæftning) i overensstemmelse med KHR_gaussian_splatting-extension-specifikationen. Positioner gemmes som regulære glTF-POSITION-vertex-data (float3), alle andre attributter (rotation som float4, scale som float3, opacity som float, SH-koefficienter som float3 × shCoeffCount) ligger i yderligere vertex-attributter og refereres via extensionen. Vigtigt: glTF bruger højrehåndet Y-up-koordinatsystem, COLMAP/3DGS arbejder Y-down/Z-forward. Eksportøren anvender derfor en 180-graders rotation om X-aksen — positioner skrives om med (x, -y, -z), quaternioner tilpasses til (w, x, -y, -z). Det giver en geometrisk korrekt, hændet (ikke spejlvendt) gengivelse i glTF-viewere. JSON- og binærchunks paddes til 4-byte-alignment, som GLB-standarden kræver.

E6 — Splat (.splat)

HVOR

Menulinjen → Export → 3D Formats → Export .splat…. Simple Mode: format-kort „.splat". Størrelse: præcis 32 bytes pr. gaussian. Kompatibel med: gsplat.js, webbaserede viewere (antimatter15-reference), de fleste browser-3DGS-demoer.

TEKNISK

antimatter15-.splat-formatet — 32 bytes pr. gaussian, ingen header, ingen indirektion. Layout pr. post: 3 × float32 position (verdens-koordinater), 3 × float32 scale (exp-transformeret fra log-space i den interne buffer), 4 × uint8 RGBA-farve (DC-SH-koefficient skaleret med SH_C0 = 0.282... og klampet til [0,255]), 4 × uint8 quaternion (w,x,y,z, normaliseret og kodet som 128 + 128*q i byte-området). Kun DC-SH gemmes — højere SH-bånd kasseres. Det gør formatet ekstremt kompakt, men koster de view-afhængige farveændringer, der opstår ved refleksioner eller spekulære højlys. Skriverækkefølgen er præcis cloudens index-rækkefølge (ingen rumlig sortering), web-viewere som gsplat.js rendrer ud fra det.

Web Viewer åbnet i Firefox — Bjoerns buket-splat renderet med omgivende kamera-marker-kugler, browser-tab-bar synlig øverst, ingen CDN-/server-opsætning nødvendig
Web Viewer åbnet i Firefox — Bjoerns buket-splat renderet med omgivende kamera-marker-kugler, browser-tab-bar synlig øverst, ingen CDN-/server-opsætning nødvendig. Selvstændig flowers-01.html åbnet direkte fra Finder ved dobbeltklik i standardbrowseren — det indlejrede WebGL2-program rendrer gaussian-cloud'en med det samme uden netværk eller server. De sorte markører omkring buketten er trænings-kameraerne, valgfrit indkoblelige. Mus-træk roterer, scroll zoomer.

E7 — Web Viewer (.html)

HVOR

Menulinjen → Export → Media → Export Web Viewer…. Simple Mode: format-kort „Web Viewer". Størrelse: splat-data base64-kodet (≈ 4/3 overhead) + ca. 5 KB HTML/JS-shell. Kompatibel med: enhver moderne browser med WebGL2 (alle desktops, iOS 15+, Android 5+).

TEKNISK

Bundler gaussian-cloud'en sammen med en fuldstændig inline skrevet WebGL2-renderer i en enkelt .html-fil. Der er ingen CDN-afhængigheder, ingen WASM, ingen anden fil. Cloud'en kodes internt først som .splat-binær (samme 32-byte-logik som E6), derefter base64-indlejret, derefter dekodet i browseren med atob. Den indbyggede renderer laver egen WebGL2-sortering, mus-orbit-styring og CPU-sortering pr. frame; hele JS-koden (shadere, matematik, loop) kan ses i output-HTML'en. Akse-konventionen på lagring-til-renderer-grænsen er præcis den samme som i E5: position (x, -y, -z), quaternion (w, x, -y, -z). Valgfrit kan et branding-overlay indkobles (free-tier-kontakt). Da alt er inline, fungerer filen også direkte fra file://-protokollen — ingen lokal webserver nødvendig til test.

Enkelt frame udtrukket fra flowers-01.mp4 — Bjoerns buket i profil-render, hvid platform med kamera-markører synlig, sort baggrund — typisk orbit-kamerakørsels-frame ca. 5s inde i video-kørslen
Enkelt frame udtrukket fra flowers-01.mp4 — Bjoerns buket i profil-render, hvid platform med kamera-markører synlig, sort baggrund (default-viewport-baggrund, kan ændres i Settings). Kameraet kredser om scenen på en parametrisk bane (elevation + afstand fast, yaw roterer), varighed typisk 6–10 sekunder ved 30 eller 60 fps. Frame-opløsning skalérbar fra 480p til 8K via VideoPreset.

E8 — Orbit Video (.mp4/.mov)

HVOR

Menulinjen → Viewport → Record Turntable Video ELLER menulinjen → Export → Media → Export Orbit Video…. Simple Mode: format-kort „Orbit Video" med varigheds-slider 3–30 s. Størrelse: afhænger af varighed, opløsning, bitrate. Kompatibel med: alle platforme (H.264 og HEVC er Apple-standard).

TEKNISK

Rendrer gaussian-cloud'en langs en parametrisk orbit-kamerakørsel og enkoder hvert frame via AVAssetWriter til en MP4- eller MOV-fil. Orbit-konfigurationen styrer rotationshastighed (omdrejninger), afstand, elevation, FOV, varighed og ease-in/out-faktor. Pr. frame multipliceres verdens-tilpasningsmatricen (beregnet af rendereren for at dreje de interne koordinater ind i Y-up-orbit-verdenen) med kameraet, derefter anvendes den MetalSplatter-specifikke Y-spejling. Offscreen-render-target'et trækkes via IOSurface til en CVPixelBuffer for encoderen. Encoderen understøtter H.264 og HEVC, konfigurerbar bitrate og opløsning fra 480p til 8K. Før første frame venter rendereren 200 ms, så den indledende splat-sortering er afsluttet. Denne eksport er GPU-bound — ved 8K og millioner af gaussians ligger render-tiden pr. frame på flere sekunder, altså samlede render-tider på 10–30 minutter for 6 s video muligt.

E9 — SfM Transforms (transforms.json)

HVOR

Menulinjen → Export → Photogrammetry → Export SfM (transforms.json)…. Størrelse: typisk 1–10 KB (kun positioner + intrinsics, ingen billeder, ingen gaussians). Kompatibel med: nerfstudio, Brush, gsplat, OpenSplat, Meshroom, alle moderne feed-forward 3DGS-trænere.

TEKNISK

Skriver nerfstudio-transforms.json-formatet med en liste over kamerapositioner plus delte intrinsics. Pr. kamera inverteres view-matricen (RadianceKit-internt: world-to-camera i COLMAP-konvention), derefter spejles kameralokale Y- og Z-basisvektorer for at konvertere til nerfstudio-konventionen (OpenGL-stil, kamera kigger langs -Z, +Y er op). Den endelige 4×4-matrix lander som row-major nested array af doubles i transform_matrix-feltet i hvert frame. Intrinsics gemmes på top-niveau (brændvidde x/y, hovedpunkt x/y, billedbredde/-højde, camera_model = "OPENCV", plus distortion-coefficients k1, k2, p1, p2) — bortset fra hvis eksportøren genkender flere forskellige intrinsics-sæt, så skrives de pr. frame. Billedstier skrives som images/<filename> relativt til JSON-filen; brugeren skal oprette en sibling-images/-mappe med træningsfotoene.

E10 — COLMAP Workspace (sparse/0/)

HVOR

Menulinjen → Export → Photogrammetry → Export SfM (COLMAP Workspace)…. Størrelse: tre binærfiler sammen typisk 4–8 MB — points3D.bin dominerer (én linje pr. 3D-punkt i sparse-cloud'en), images.bin og cameras.bin er hver markant under 100 KB. Kompatibel med: COLMAP selv, Nerfstudio, Postshot, Meshroom, alle værktøjer, der forventer et COLMAP-sparse/-katalog.

TEKNISK

Skriver standard-COLMAP-sparse/0/-layoutet med tre binære filer: cameras.bin, images.bin, points3D.bin. Format-reference er den officielle COLMAP-dokumentation. cameras.bin indeholder den deduplikerede intrinsics-liste (kameraer med identiske intrinsics + billedstørrelse samles til en enkelt post); det anvendte camera-model er OPENCV (model 4), med fx/fy/cx/cy plus de fire distortion-coefficients k1/k2/p1/p2. images.bin lister pr. billede positionen som wxyz-quaternion plus translation, efterfulgt af kamera-ID og filnavn; ingen 2D-3D-korrespondancer gemmes. points3D.bin indeholder SfM-punktskyen med position, farve (0-255 RGB) og default-værdier for reprojektion og track-length. Alt skrives i Little-Endian. Re-import i RadianceKit fungerer via File-menuen → „Import COLMAP/Metashape Workspace…" (se Q3 i SfM-backend-kapitlet).

Hvilket format hvornår?

MålFormat
Web-viewer på egen sideE7 Web Viewer (.html)
Web-viewer med gsplat.jsE6 Splat (.splat)
Pipeline-genbrug i Postshot / NerfstudioE9 transforms.json + E10 COLMAP Workspace
SuperSplat-redigeringE1 PLY eller E2 Compressed PLY
Niantic Scaniverse / Spatial FieldsE3 SPZ
Maksimal komprimeringE4 SOG (cwebp påkrævet)
Marketing-/social-videoE8 Orbit Video

Hurtig sammenligning

FormatEndelseSandboxStørrelse (1M gauss)Bedst til
E1 PLY.plyja~250 MBArkiv, højeste kompatibilitet
E2 Compressed PLY.plyja~40 MBWeb + SuperSplat
E3 SPZ.spzja (gzip-spawn)~40 MBNiantic + mobil
E4 SOG.sogbetinget (cwebp)~20 MBMaksimal komprimering
E5 glTF.glbja~250 MBKhronos-pipeline
E6 Splat.splatja~32 MBgsplat.js web-viewer
E7 Web Viewer.htmlja~45 MBStandalone browser-fil
E8 Orbit Video.mp4/.movjavariabelSocial/marketing
E9 SfM Transforms.jsonja~5 KBPose-overdragelse
E10 COLMAP WorkspaceKatalogja~4–8 MBPose-overdragelse binær

Størrelses-kolonnen er grove pejlemærker for 1 mio. gaussians ved SH-grad 3. Reelle værdier varierer alt efter scenens komprimerbarhed; SH-grad 0 reducerer PLY/glTF med faktor 4.