Kapitola 8 — Formáty exportu


Co je na obrázku (2 991 Gaussianů, SH stupeň 3, syntetické testovací sety): Údaje o velikosti pod každou kartou formátu se počítají živě z aktuálního počtu Gaussianů a režie formátu — nikoli napevno. Z 2 991 Gaussianů (SH stupeň 3) tak vzniká 742 KB PLY, 74 KB SPZ (faktor ~10× menší díky kvantizaci), 708 KB glTF (s rozšířením KHR_gaussian_splatting, tedy téměř ekvivalentní PLY), 96 KB .splat (komprimovaný 24-bajtový formát na Gaussian). Orbit Video ukazuje „~Zero KB", protože velikost je známa až po MP4 enkódování. Web Viewer (133 KB) balí samostatný HTML soubor s vloženým WebGL prohlížečem a komprimovanými splat daty — větší než čistý .splat kvůli režii prohlížeče. Historie exportu vpravo listuje již dokončený PLY export („training_20260527T211321Z.ply, 743 KB, 23:13") s pillou formátu a akcí reveal ve Finderu.
Dokončený trénink dodává Gaussian Cloud — kolekci několika set tisíc až milionů 3D Gaussovských rozdělení, která dohromady rekonstruují scénu. RadianceKit zná deset cest, jak tento cloud zapsat na disk. Šest z nich jsou čisté 3D datové formáty (PLY, Compressed PLY, SPZ, SOG, glTF, .splat), jeden balí cloud spolu s hotovým HTML prohlížečem (Web Viewer), jeden renderuje MP4 soubor z orbitální jízdy kamery (Orbit Video), a dva neexportují žádný Gaussovský obsah, pouze výsledek SfM (pozice kamer a hrubý mrak bodů) pro znovupoužití v jiných tréninkových pipeline (transforms.json + COLMAP workspace).
Který formát kdy je správný, závisí na cíli. Pro archivaci plných dat bez ztráty kvality bere se PLY. Pro web prohlížeč na vlastní stránce obvykle stačí .splat nebo vestavěný Web Viewer. Pokud má být soubor minimální, vyplatí se SPZ nebo SOG. Pro znovupoužití výsledku SfM v Nerfstudio, Postshot nebo Brush jsou transforms.json a COLMAP workspace správné cesty.
Všechny funkce exportu leží v menu „Export" i v Režimu pro začátečníky na poslední wizardové úrovni. Většina formátů je plně sandbox-kompatibilní a funguje v App Store verzi. Pouze SOG vyžaduje externí binárku (cwebp), která ve App Store buildu nemusí být přítomná — detaily viz E4.
E1 — PLY (.ply)
KDE
Řádek nabídek → Export → 3D Formats → Export PLY… (⌘E). Režim pro začátečníky: wizardový krok Export → karta formátu „PLY". Velikost: typicky 100 % (referenční hodnota). Kompatibilní s: SuperSplat, PolyCam, všechny 3DGS prohlížeče.
TECHNICKY
PLY je kanonický formát pro ukládání 3D Gaussian Splatting. RadianceKit zapisuje binární little-endian soubor se standardizovaným 3DGS property layoutem: na Gaussian tříkomponentní pozice, tři vždy nulové normály, tři DC-SH koeficienty (f_dc_0..2) pro základní RGB barvu, následně až 45 dalších SH koeficientů (f_rest_0..44) v transponovaném channel-major uspořádání definovaném Kerblovým paperem 2023 (nejprve všechny koeficienty R kanálu, pak všechny G, pak všechny B), následované logit-opacity (raw pre-sigmoid hodnoty), třemi log-space škálami a wxyz quaternion rotací. Maximální exportovaný SH stupeň je clampován na minimum uživatelského přání a skutečně naučeného stupně; default je 3 (45 rest koeficientů). Před zápisem se velikost payloadu počítá v 64-bitových integerech, aby se zachytil overflow u extrémně velkých cloudů. Soubor se zapisuje atomicky, což u velkých cloudů krátce zabírá dvojnásobné místo na disku.
E2 — Compressed PLY (.ply)
KDE
Řádek nabídek → Export → 3D Formats → Export Compressed PLY…. Režim pro začátečníky: karta formátu „Compressed PLY". Velikost: cca 10–20 % oproti PLY (5- až 10násobná komprese). Kompatibilní s: SuperSplat, PlayCanvas engine, web prohlížeče.
TECHNICKY
PlayCanvas varianta PLY formátu s chunked kvantizací. Gaussiany jsou seskupené po 256. Pro každý chunk se v hlavičce ukládají oddělené min/max meze pro pozici, škálu a barvu; jednotlivé Gaussiany referencují své hodnoty relativně k těmto mezím a jsou komprimovány na 32 bitů: pozice a škála s 11-10-11 bit packingem, rotace jako 2-10-10-10 bit „smallest-three" quaternion, barva jako 8-8-8-8 RGBA. Vyšší SH koeficienty se kvantizují pouze 8 bity na komponentu (shCoeffCount * 3 uchar na Gaussian). Samotný formát je stále PLY s ASCII hlavičkou a tedy v principu validovatelný PLY nástroji, ale vertex properties jsou deklarovány jako uint pole. SH stupeň je defaultně 0 (žádné rest koeficienty), aby se maximalizovala komprese — vyšší SH stupně lze explicitně zvolit.
E3 — SPZ (.spz)
KDE
Řádek nabídek → Export → 3D Formats → Export SPZ…. Režim pro začátečníky: karta formátu „SPZ". Velikost: cca 10 % oproti PLY (o 90 % menší). Kompatibilní s: Niantic Scaniverse, Niantic Spatial Fields, MetalSplatter.
TECHNICKY
Niantic SPZ-v2 formát. Pozice jsou packované jako 24-bit fixed-point (to dává cca 0,25 mm rozlišení), škály jako 8-bit kvantizace v log prostoru, rotace jako 8-bit smallest-three (v2 se ukládá pouze xyz, w se v dekodéru odvozuje z normy quaternionu), opacity jako sigmoidované 8-bit hodnoty. DC-SH se ukládá s SPZ-specifickou pack formulí (dc_raw * 0.15 * 255 + 0.5 * 255), vyšší SH bandy s 5 bity (band 1) resp. 4 bity (band 2-3) na koeficient. Celý zapakovaný binární blob se následně komprimuje standardním gzipem (RFC 1952), což dává gzipped container formát s magickými bajty 1f 8b. RadianceKit volá pro to systémový gzip, protože vestavěné Apple zlib API vytváří proprietární Apple framing, který by nebyl kompatibilní s SPZ readery v Spatial Fields nebo MetalSplatteru. Systémový gzip zůstává spawnovatelný i v rámci macOS sandboxu.
E4 — SOG (.sog)
KDE
Řádek nabídek → Export → 3D Formats → Export SOG…. Režim pro začátečníky: karta formátu „SOG". Velikost: cca 5–6 % oproti PLY (15- až 20násobná komprese — nejmenší možnost). Kompatibilní s: PlayCanvas engine, SuperSplat editor.
TECHNICKY
„Spatially Ordered Gaussians" — PlayCanvas formát, který ukládá cloud GPU-ready v několika lossless WebP obrázcích. Nejprve se všechny Gaussiany prostorově seřadí podle 3D Morton kódu (30-bit Z-order, 10 bitů na osu), což obrázkům poskytuje pozdější cache lokalitu v rendereru. Pak se pozice s symetrickou logaritmickou transformací (pro lepší dynamický rozsah) kvantizují na 16-bit hodnoty a rozdělí do dvou RGBA obrázků (means_l.webp pro spodních 8 bitů, means_u.webp pro horních). Rotace jsou kódovány jako smallest-three s 3×8 bit plus 2-bit mode v jednom RGBA obrázku (mode v alpha jako 252 + largest). Škály a DC-SH jsou kvantizovány codebookem se 256 položkami (percentilově rozdělené přes všechny hodnoty), indexy končí v scales.webp a sh0.webp. Pět obrázků plus meta.json s codebooky a hranicemi se zabalí do ZIP souboru (vlastní enkodér, protože sandbox blokuje systémový zip) a uloží s příponou .sog.
Pozor sandbox: SOG je jediná formátová volba, která vyžaduje externí binárku. WebP enkodér volá cwebp z /usr/local/bin/cwebp nebo /opt/homebrew/bin/cwebp. Pokud žádná cwebp binárka nenajde, kód spadne na surové PNG enkódování — ale: PNG fallback v SuperSplat nefunguje. V App Store verzi vyhodnoť dostupnost podle buildové varianty; ve vývojářské variantě musí být cwebp instalován přes Homebrew (brew install webp).
E5 — glTF (.glb)
KDE
Řádek nabídek → Export → 3D Formats → Export glTF…. Režim pro začátečníky: karta formátu „glTF". Velikost: srovnatelná s PLY. Kompatibilní s: glTF prohlížeče s rozšířením KHR_gaussian_splatting (Khronos draft standard).
TECHNICKY
Zapisuje samonosný binární .glb soubor (žádná samostatná bin příloha) podle specifikace rozšíření KHR_gaussian_splatting. Pozice se ukládají jako regulérní glTF POSITION vertex data (float3), všechny ostatní atributy (rotace jako float4, škála jako float3, opacity jako float, SH koeficienty jako float3 × shCoeffCount) leží v dodatečných vertex atributech a jsou referencovány přes rozšíření. Důležité: glTF používá pravotočivý Y-up souřadnicový systém, COLMAP/3DGS pracuje Y-down / Z-forward. Exportér proto aplikuje 180° rotaci kolem X osy — pozice se přepisují jako (x, -y, -z), quaterniony se upravují na (w, x, -y, -z). To dává geometricky korektní, ručnou (ne zrcadlově převrácenou) reprezentaci v glTF prohlížečích. JSON a binární chunky jsou paddované na 4-bajtové zarovnání, jak vyžaduje GLB standard.
E6 — Splat (.splat)
KDE
Řádek nabídek → Export → 3D Formats → Export .splat…. Režim pro začátečníky: karta formátu „.splat". Velikost: přesně 32 bajtů na Gaussian. Kompatibilní s: gsplat.js, web prohlížeče (antimatter15 reference), většina browser 3DGS dem.
TECHNICKY
antimatter15 .splat formát — 32 bajtů na Gaussian, žádná hlavička, žádná indirekce. Layout na záznam: 3 × float32 pozice (světové souřadnice), 3 × float32 škála (exp transformované z log space interního bufferu), 4 × uint8 RGBA barva (DC-SH koeficient škálovaný s SH_C0 = 0.282... a clampovaný na [0,255]), 4 × uint8 quaternion (w,x,y,z, normalizovaný a kódovaný jako 128 + 128*q do bajtového rozsahu). Ukládá se pouze DC-SH — vyšší SH bandy jsou zahozeny. To dělá formát extrémně kompaktní, ale stojí to view-dependent změny barvy, ke kterým dochází u odrazů nebo spekulárních highlights. Pořadí zápisu je přesně indexové pořadí cloudu (žádné prostorové třídění), web prohlížeče jako gsplat.js z toho při renderování vychází.

flowers-01.html přímo z Finderu otevřený dvojklikem ve výchozím prohlížeči — vložený WebGL2 program okamžitě renderuje Gaussian Cloud, bez sítě nebo serveru. Černé markery kolem scény jsou tréninkové kamery, volitelně zobrazitelné. Drag myší rotuje, scroll zoomuje.E7 — Web Viewer (.html)
KDE
Řádek nabídek → Export → Media → Export Web Viewer…. Režim pro začátečníky: karta formátu „Web Viewer". Velikost: splat data base64 kódovaná (≈ 4/3 režie) + cca 5 KB HTML/JS shell. Kompatibilní s: každý moderní prohlížeč s WebGL2 (všechny desktopy, iOS 15+, Android 5+).
TECHNICKY
Balí Gaussian Cloud spolu s kompletně inline napsaným WebGL2 rendererem do jediného .html souboru. Žádné CDN závislosti, žádné WASM, žádný druhý soubor. Cloud se interně nejprve kóduje jako .splat binárka (stejná 32-bajtová logika jako E6), pak se vloží base64, pak se v prohlížeči dekóduje s atob. Vestavěný renderer dělá vlastní WebGL2 třídění, ovládání orbit myší a CPU třídění na frame; veškerý JS kód (shadery, matematika, smyčka) je v output HTML viditelný. Konvence os na hranici úložiště-renderer je přesně stejná jako u E5: pozice (x, -y, -z), quaternion (w, x, -y, -z). Volitelně lze zobrazit branding overlay (free tier přepínač). Vzhledem k tomu, že vše je inline, soubor funguje i přímo z protokolu file:// — pro testování není potřeba lokální web server.

E8 — Orbit Video (.mp4/.mov)
KDE
Řádek nabídek → Viewport → Record Turntable Video NEBO Řádek nabídek → Export → Media → Export Orbit Video…. Režim pro začátečníky: karta formátu „Orbit Video" s posuvníkem trvání 3–30 s. Velikost: závisí na trvání, rozlišení, bitrate. Kompatibilní s: všechny platformy (H.264 a HEVC jsou Apple standard).
TECHNICKY
Renderuje Gaussian Cloud podél parametrické orbitální jízdy kamery a každý frame enkóduje přes AVAssetWriter do MP4 nebo MOV souboru. Konfigurace orbitu řídí rychlost otáčení (otáčky), vzdálenost, elevaci, FOV, trvání a faktor ease-in/out. Na frame se matice transformace světa (vypočítaná rendererem, aby interní souřadnice otočila do Y-up orbitálního světa) násobí kamerou, poté se aplikuje MetalSplatter specifické zrcadlení Y. Offscreen render target se přes IOSurface stahuje do CVPixelBuffer pro enkodér. Enkodér podporuje H.264 a HEVC, konfigurovatelný bitrate a rozlišení od 480p do 8K. Před prvním framem renderer čeká 200 ms, aby bylo dokončeno počáteční třídění splatů. Tento export je GPU bound — u 8K a milionů Gaussianů leží render čas na frame v několika sekundách, takže celkové render časy 10–30 minut pro 6sekundové video jsou možné.
E9 — SfM Transforms (transforms.json)
KDE
Řádek nabídek → Export → Photogrammetry → Export SfM (transforms.json)…. Velikost: typicky 1–10 KB (pouze pozice + intrinsics, žádné obrázky, žádné Gaussiany). Kompatibilní s: nerfstudio, Brush, gsplat, OpenSplat, Meshroom, všechny moderní feed-forward 3DGS trénery.
TECHNICKY
Zapisuje nerfstudio transforms.json formát se seznamem pozic kamer plus sdílenými intrinsics. Na kameru se invertuje view matice (uvnitř RadianceKitu: world-to-camera v COLMAP konvenci), následně se zrcadlí Y a Z bazální vektory v kameře, aby se převedly do nerfstudio konvence (OpenGL style, kamera se dívá podél -Z, +Y je nahoře). Finální 4×4 matice končí jako row-major nested array doublů v poli transform_matrix každého framu. Intrinsics se ukládají na top-level (ohnisko x/y, hlavní bod x/y, šířka/výška obrázku, camera_model = "OPENCV", plus distortion koeficienty k1, k2, p1, p2) — pokud exportér nedetekuje více různých intrinsic setů, pak se zapisují per frame. Cesty obrázků se píšou jako images/<filename> relativně k JSON souboru; uživatel musí vytvořit sibling složku images/ s tréninkovými fotografiemi.
E10 — COLMAP Workspace (sparse/0/)
KDE
Řádek nabídek → Export → Photogrammetry → Export SfM (COLMAP Workspace)…. Velikost: tři binární soubory dohromady typicky 4–8 MB — points3D.bin dominuje (jeden řádek na 3D bod sparse cloudu), images.bin a cameras.bin jsou každý výrazně pod 100 KB. Kompatibilní s: COLMAP sám, Nerfstudio, Postshot, Meshroom, všechny nástroje, které očekávají COLMAP sparse/ adresář.
TECHNICKY
Zapisuje standardní COLMAP sparse/0/ layout se třemi binárními soubory: cameras.bin, images.bin, points3D.bin. Formátová reference je oficiální COLMAP dokumentace. cameras.bin obsahuje deduplikovaný seznam intrinsics (kamery s identickými intrinsics + velikostí obrazu se sloučí do jednoho záznamu); použitý camera model je OPENCV (model 4), s fx/fy/cx/cy plus čtyřmi distortion koeficienty k1/k2/p1/p2. images.bin listuje na obrázek pozici jako wxyz quaternion plus translaci, následuje ID kamery a název souboru; žádné 2D-3D korespondence se neukládají. points3D.bin obsahuje SfM mrak bodů s pozicí, barvou (0-255 RGB) a defaultními hodnotami pro reprojekci a délku tracku. Vše se zapisuje v little-endian. Re-import do RadianceKitu funguje přes File menu → „Import COLMAP/Metashape Workspace…" (viz Q3 v kapitole SfM backendů).
Který formát kdy?
| Cíl | Formát |
|---|---|
| Web prohlížeč na vlastní stránce | E7 Web Viewer (.html) |
Web prohlížeč s gsplat.js | E6 Splat (.splat) |
| Znovupoužití pipeline v Postshot / Nerfstudio | E9 transforms.json + E10 COLMAP Workspace |
| SuperSplat editace | E1 PLY nebo E2 Compressed PLY |
| Niantic Scaniverse / Spatial Fields | E3 SPZ |
| Maximální komprese | E4 SOG (vyžaduje cwebp) |
| Marketingové/sociální video | E8 Orbit Video |
Rychlé srovnání
| Formát | Přípona | Sandbox | Velikost (1M Gauss) | Nejlepší použití |
|---|---|---|---|---|
| E1 PLY | .ply | ano | ~250 MB | Archiv, nejvyšší kompatibilita |
| E2 Compressed PLY | .ply | ano | ~40 MB | Web + SuperSplat |
| E3 SPZ | .spz | ano (gzip spawn) | ~40 MB | Niantic + Mobile |
| E4 SOG | .sog | podmíněně (cwebp) | ~20 MB | Maximální komprese |
| E5 glTF | .glb | ano | ~250 MB | Khronos pipeline |
| E6 Splat | .splat | ano | ~32 MB | gsplat.js web prohlížeč |
| E7 Web Viewer | .html | ano | ~45 MB | Samostatný souborový prohlížeč |
| E8 Orbit Video | .mp4/.mov | ano | proměnná | Social/Marketing |
| E9 SfM Transforms | .json | ano | ~5 KB | Předání pozic |
| E10 COLMAP Workspace | Adresář | ano | ~4–8 MB | Předání pozic binárně |
Sloupec velikost jsou hrubé orientační hodnoty pro 1 milion Gaussianů s SH stupněm 3. Reálné hodnoty se liší podle stlačitelnosti scény; SH stupeň 0 redukuje PLY/glTF faktorem 4.