Kapitola 8 — Exportní formáty


Co je na obrázku vidět: Údaj o velikosti pod každou dlaždicí formátu se počítá živě z aktuálního počtu Gaussianů a overheadu formátu — není napevno zadaný. Ze stejné scény tak vzniknou 2,2 MB PLY, 142 KB cPLY, 89 KB SOG, 216 KB SPZ, 2,1 MB glTF a 279 KB .splat; Web má 378 KB, protože je tam navíc vestavěný prohlížeč přímo v souboru. Video a Wiggle zobrazují „Zero KB", protože velikost se určí až po zakódování. Vybraná dlaždice je orámovaná modře, a tlačítko pod ní přebírá její název — zde „Export PLY (3DGS Standard)". Pod nadpisem je řádek „Leveling the floor turns the view at once; the chosen orientation and format apply when saving".
Dokončený trénink vytvoří Gaussian Cloud — soubor několika set tisíc až milionů 3D Gaussových rozdělení, které společně rekonstruují scénu. Tato kapitola popisuje deset způsobů, jak tento soubor zapsat na disk. Šest z nich jsou čistě 3D datové formáty (PLY, Compressed PLY, SPZ, SOG, glTF, .splat), jeden sdružuje soubor spolu s hotovým HTML prohlížečem (Web Viewer), jeden vyrenderuje MP4 soubor z orbitální kamerové jízdy (Orbit Video), a dva neexportují žádný obsah Gaussianů, ale pouze výsledek SfM (kamerové pozice a hrubý bod-mrak) k opětovnému použití v jiných trénovacích pipeline (transforms.json + COLMAP workspace).
Osm z těchto způsobů je k dispozici v sekci exportu jako dlaždice — transforms.json a COLMAP workspace jsou pouze v menu. Kromě toho obsahuje mřížka devátou dlaždici Wiggle, a pod tlačítkem exportu je Upload to SuperSplat…, které místo do souboru pošle scénu přímo do editoru SuperSplat na webu.
Který formát je kdy ten správný, závisí na cíli. Pro archivaci plných dat bez ztráty kvality se použije PLY. Pro webové prohlížeče na vlastní stránce zpravidla stačí .splat nebo vestavěný Web Viewer. Pokud musí být soubor minimální, vyplatí se SPZ nebo SOG. Pro opětovné použití výsledku SfM v Nerfstudiu, Postshotu nebo Brushi jsou transforms.json a COLMAP workspace ty správné cesty.
Všechny exportní funkce jsou v menu „Export" a v Simple módu na posledním kroku průvodce. Většina formátů je plně sandbox-kompatibilní a funguje ve verzi z App Storu. Pouze SOG vyžaduje externí binárku (cwebp), která ve verzi z App Storu není nutně přítomna — podrobnosti viz E4.
E1 — PLY (.ply)
KDE
Panel nabídek → Export → 3D Formats → Export PLY… (⌘E). Simple mód: krok průvodce Export → dlaždice 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í soubor s Little-Endian pořadím bajtů se standardizovaným 3DGS property layoutem: na jeden Gaussian třísložková pozice, tři vždy na nulu nastavené normály, tři DC-SH koeficienty (f_dc_0..2) pro základní RGB barvu, poté až 45 dalších SH koeficientů (f_rest_0..44) v transponovaném channel-major uspořádání definovaném v Kerbl-2023 paperu (nejdřív všechny koeficienty R kanálu, pak všechny G, pak všechny B), následuje logit opacita (surové pre-sigmoid hodnoty), tři škály v log prostoru a wxyz kvaternion rotace. Maximální exportovaný SH stupeň se oříznou na minimum z uživatelova přání a skutečně naučeného stupně; výchozí hodnota je 3 (45 zbytkových koeficientů). Před zápisem se velikost payloadu počítá jako 64bitové celé číslo, aby se zachytilo přetečení u extrémně velkých souborů. Soubor se zapisuje atomicky, což u velkých souborů krátkodobě zabere dvojnásobek místa na disku.
E2 — Compressed PLY (.ply)
KDE
Panel nabídek → Export → 3D Formats → Export Compressed PLY…. Simple mód: dlaždice formátu „Compressed PLY". Velikost: cca 10–20 % oproti PLY (5- až 10-násobná komprese). Kompatibilní s: SuperSplat, PlayCanvas Engine, webové prohlížeče.
TECHNICKY
Varianta formátu PLY od PlayCanvas s chunked kvantizací. Gaussiany se seskupí do 256kusových chunků. U každého chunku se ukládají min/max meze pro pozici, škálu a barvu odděleně v hlavičce; jednotlivé Gaussiany odkazují na své hodnoty relativně k těmto mezím a jsou komprimovány na 32 bitů: pozice a škála s 11-10-11bitovým packingem, rotace jako 2-10-10-10bitový „smallest-three" kvaternion, barva jako 8-8-8-8 RGBA. Vyšší SH koeficienty se kvantizují pouze na 8 bitů na složku (tři bajty na koeficient a Gaussian). Formát samotný je stále ASCII-hlavičkové PLY, a tedy zásadně validovatelný nástroji PLY, ale vertex-vlastnosti jsou deklarovány jako uint pole. SH stupeň je ve výchozím nastavení 0 (žádné zbytkové koeficienty), aby se maximalizovala komprese — vyšší SH stupně lze zvolit explicitně.
E3 — SPZ (.spz)
KDE
Panel nabídek → Export → 3D Formats → Export SPZ…. Simple mód: dlaždice formátu „SPZ". Velikost: cca 10 % oproti PLY (o 90 % menší). Kompatibilní s: Niantic Scaniverse, Niantic Spatial Fields, MetalSplatter.
TECHNICKY
Formát SPZ v2 od Niantic. Pozice se balí jako 24bitová fixed-point čísla (to dává cca 0,25 mm rozlišení), škály jako 8bitová kvantizace v log prostoru, rotace jako 8bitový smallest-three (ve v2 se ukládá pouze xyz, w se v dekodéru odvozuje z normy kvaternionu), opacity jako sigmoidizované 8bitové hodnoty. DC-SH se ukládá pomocí SPZ-specifického vzorce (dc_raw * 0.15 * 255 + 0.5 * 255), vyšší SH pásma s 5 bity (pásmo 1) resp. 4 bity (pásma 2-3) na koeficient. Celý zabalený binární blok se poté komprimuje standardním gzipem (RFC 1952), což dává gzipovaný kontejnerový formát s magickými bajty 1f 8b. RadianceKit k tomu volá systémový gzip, protože Applovo vestavěné zlib API vytváří proprietární Apple framing, který by nebyl kompatibilní se čtečkami SPZ ve Spatial Fields nebo MetalSplatter. Systémový gzip lze spustit i uvnitř sandboxu macOS.
E4 — SOG (.sog)
KDE
Panel nabídek → Export → 3D Formats → Export SOG…. Simple mód: dlaždice formátu „SOG". Velikost: cca 5–6 % oproti PLY (15- až 20-násobná komprese — nejmenší možnost). Kompatibilní s: PlayCanvas Engine, editor SuperSplat.
TECHNICKY
„Spatially Ordered Gaussians" — formát od PlayCanvas, který ukládá soubor GPU-ready ve více bezztrátových WebP obrázcích. Nejdřív se všechny Gaussiany prostorově setřídí pomocí 3D Mortonova kódu (30bitové Z-pořadí, po 10 bitech na osu), což obrázkům poskytuje pozdější cache-locality v rendereru. Poté se pozice symetrickou log transformací (pro lepší dynamický rozsah) kvantizují na 16bitové hodnoty a rozdělí do dvou RGBA obrázků (means_l.webp pro spodních 8 bitů, means_u.webp pro horní). Rotace se kódují jako smallest-three s 3×8 bity plus 2bitovým módem do jednoho RGBA obrázku (mód se ukládá do alfa jako 252 + largest). Škály a DC-SH se kvantizují pomocí codebooku s 256 položkami (rozděleného na základě percentilů přes všechny hodnoty), indexy putují do scales.webp a sh0.webp. Pět obrázků plus meta.json s codebooky a mezemi 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á varianta formátu, která vyžaduje externí binárku. Fáze WebP enkodéru volá cwebp z /usr/local/bin/cwebp nebo /opt/homebrew/bin/cwebp. Pokud se žádná binárka cwebp nenajde, kód spadne zpět na hrubé PNG kódování — ale: PNG fallback nefunguje v SuperSplatu. Ve verzi z App Storu se dostupnost vyhodnocuje podle varianty buildu; ve vývojářské variantě musí být cwebp nainstalovaný přes Homebrew (brew install webp).
E5 — glTF (.glb)
KDE
Panel nabídek → Export → 3D Formats → Export glTF…. Simple mód: dlaždice formátu „glTF". Velikost: srovnatelná s PLY. Kompatibilní s: prohlížeči glTF s rozšířením KHR_gaussian_splatting (návrh standardu Khronos).
TECHNICKY
Zapisuje samostatný binární soubor .glb (bez samostatné bin-file přílohy) 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) jsou v dodatečných vertex atributech a odkazují se přes rozšíření. Důležité: glTF používá pravotočivý souřadný systém Y-up, COLMAP/3DGS pracuje s Y-down/Z-forward. Exportér proto aplikuje otočení o 180 stupňů kolem osy X — pozice se přepíšou jako (x, -y, -z), kvaterniony se upraví na (w, x, -y, -z). To dává geometricky správné, pravotočivé (nikoli zrcadlené) zobrazení v prohlížečích glTF. JSON a binární chunky se dorovnávají na 4bajtové zarovnání, jak vyžaduje standard GLB.
E6 — Splat (.splat)
KDE
Panel nabídek → Export → 3D Formats → Export .splat…. Simple mód: dlaždice formátu „.splat". Velikost: přesně 32 bajtů na Gaussian. Kompatibilní s: gsplat.js, webové prohlížeče (referenční implementace antimatter15), většina prohlížečových 3DGS dem.
TECHNICKY
Formát .splat od antimatter15 — 32 bajtů na Gaussian, žádná hlavička, žádná indirekce. Rozvržení na položku: 3 × float32 pozice (světové souřadnice), 3 × float32 škála (exp-transformovaná z log prostoru interního bufferu), 4 × uint8 RGBA barva (DC-SH koeficient škálovaný pomocí SH_C0 = 0.282... a oříznutý na [0,255]), 4 × uint8 kvaternion (w,x,y,z, normalizovaný a kódovaný jako 128 + 128*q do rozsahu bajtů). Ukládá se pouze DC-SH — vyšší SH pásma se zahazují. To dělá formát extrémně kompaktní, ale stojí to view-závislé barevné změny, které se objevují při odleskách nebo spekulárních highlightech. Pořadí zápisu je přesně indexové pořadí souboru (žádné prostorové třídění), webové prohlížeče jako gsplat.js z toho při renderování vycházejí.

flowers-01.html otevřený přímo z Finderu dvojklikem ve výchozím prohlížeči — vestavěný WebGL2 program vyrenderuje Gaussian Cloud okamžitě, bez sítě nebo serveru. Černé markery kolem kytice jsou trénovací kamery, volitelně zobrazitelné. Tažení myší otáčí, kolečko zvětšuje/zmenšuje.E7 — Web Viewer (.html)
KDE
Panel nabídek → Export → Media → Export Web Viewer…. Simple mód: dlaždice formátu „Web Viewer". Velikost: splat data zakódovaná v base64 (≈ 4/3 overhead) + cca 5 KB HTML/JS shell. Kompatibilní s: každým moderním prohlížečem s WebGL2 (všechny desktopy, iOS 15+, Android 5+).
TECHNICKY
Sdružuje Gaussian Cloud spolu s plně inline napsaným WebGL2 rendererem do jednoho souboru .html. Neexistují žádné CDN závislosti, žádný WASM, žádný druhý soubor. Soubor se interně nejdřív zakóduje jako binárka .splat (stejná 32bajtová logika jako E6), poté se vloží jako base64, poté se dekóduje pomocí atob v prohlížeči. Vestavěný renderer provádí vlastní WebGL2 třídění, ovládání orbitu myší a CPU třídění na snímek; celý JS kód (shadery, matematika, smyčka) je vidět v HTML výstupu. Konvence os na hranici mezi úložištěm a rendererem je přesně stejná jako v E5: pozice (x, -y, -z), kvaternion (w, x, -y, -z). Volitelně lze zobrazit branding overlay (přepínač free tieru). Protože je vše inline, funguje soubor i přímo z protokolu file:// — k testování není potřeba lokální webový server.

E8 — Orbit Video (.mp4/.mov)
KDE
Panel nabídek → Viewport → Record Turntable Video NEBO Panel nabídek → Export → Media → Export Orbit Video…. Simple mód: dlaždice formátu „Orbit Video" s posuvníkem délky 3–30 s. Velikost: závisí na délce, rozlišení, bitrate. Kompatibilní s: všemi platformami (H.264 a HEVC jsou standardem Apple).
TECHNICKY
Vyrenderuje Gaussian Cloud podél parametrické orbitální kamerové jízdy a zakóduje každý snímek přes AVAssetWriter do souboru MP4 nebo MOV. Konfigurace orbitu řídí počet otáček, vzdálenost, elevaci, FOV, délku a ease-in/out faktor. Export Orbit Video běží přes VLASTNÍ render stupeň RadianceKitu s plným SH vyhodnocením — pixelově shodně s in-app viewportem (WYSIWYG). U každého snímku se matice přizpůsobení světa (vypočítaná rendererem, aby otočila interní souřadnice do Y-up orbitálního světa) násobí kamerou, poté se aplikuje zrcadlení pro konverzi kamery (Orbit Y-up → COLMAP Y-down). Offscreen render target se přes IOSurface převede na CVPixelBuffer pro enkodér. Enkodér podporuje H.264 a HEVC, konfigurovatelnou bitrate a rozlišení od 480p do 8K. Před prvním snímkem čeká renderer 200 ms, aby bylo dokončeno počáteční třídění splatů. Tento export je vázaný na GPU — při 8K a milionech Gaussianů se doba renderu na snímek pohybuje v řádu několika sekund, takže celkové doby renderování 10–30 minut pro 6s video jsou možné.
E9 — SfM Transforms (transforms.json)
KDE
Panel 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 trenéry.
TECHNICKY
Zapisuje formát nerfstudio transforms.json se seznamem kamerových pozic plus sdílenými intrinsics. U každé kamery se invertuje view matice (interně v RadianceKit: World-to-Camera v konvenci COLMAP), poté se zrcadlí kameralokální bázové vektory Y a Z, aby se konvertovaly do konvence nerfstudio (styl OpenGL, kamera se dívá podél -Z, +Y je nahoře). Finální matice 4×4 se ukládá jako row-major vnořené pole hodnot double do pole transform_matrix každého snímku. Intrinsics se ukládají na nejvyšší úrovni (ohnisková vzdálenost x/y, hlavní bod x/y, šířka/výška obrázku, camera_model = "OPENCV", plus koeficienty zkreslení k1, k2, p1, p2) — kromě případu, kdy exportér rozpozná více různých sad intrinsics, pak se zapisují na jednotlivé snímky. Cesty k obrázkům se ukládají jako images/<filename> relativně k JSON souboru; uživatel musí vytvořit sourozeneckou složku images/ s tréninkovými fotkami.
E10 — COLMAP Workspace (sparse/0/)
KDE
Panel 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 řídkého bod-mraku), images.bin a cameras.bin jsou obě výrazně pod 100 KB. Kompatibilní s: samotný COLMAP, Nerfstudio, Postshot, Meshroom, všechny nástroje, které očekávají adresář COLMAP sparse/.
TECHNICKY
Zapisuje standardní COLMAP layout sparse/0/ se třemi binárními soubory: cameras.bin, images.bin, points3D.bin. Referencí pro formát je oficiální dokumentace COLMAP. cameras.bin obsahuje deduplikovaný seznam intrinsics (kamery s identickými intrinsics + velikostí obrázku se sloučí do jedné položky); použitý model kamery je OPENCV (model 4), s fx/fy/cx/cy plus čtyřmi koeficienty zkreslení k1/k2/p1/p2. images.bin uvádí u každého obrázku pozici jako kvaternion wxyz plus translaci, následuje ID kamery a název souboru; neukládají se žádné 2D-3D korespondence. points3D.bin obsahuje řídký bod-mrak SfM s pozicí, barvou (0-255 RGB) a výchozími hodnotami pro reprojekci a délku trasy. Vše se zapisuje v Little-Endian pořadí. Zpětný import do RadianceKit funguje přes menu File → „Import COLMAP/Metashape Workspace…" (viz Q3 v kapitole SfM Backend).
Který formát kdy?
| Cíl | Formát |
|---|---|
| Webový prohlížeč na vlastní stránce | E7 Web Viewer (.html) |
Webový prohlížeč s gsplat.js | E6 Splat (.splat) |
| Opětovné použití v pipeline Postshot / Nerfstudio | E9 transforms.json + E10 COLMAP Workspace |
| Úprava v SuperSplat | 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 |
| Další úpravy scény online | Tlačítko „Upload to SuperSplat…" pod mřížkou formátů |
Rychlé srovnání
| Formát | Přípona | Sandbox | Velikost (1M Gauss) | Nejlepší využ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-Viewer |
| E7 Web Viewer | .html | ano | ~45 MB | Samostatný soubor pro prohlížeč |
| E8 Orbit Video | .mp4/.mov | ano | proměnlivá | 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 s velikostí obsahuje hrubé orientační hodnoty pro 1 milion Gaussians se stupněm SH 3. Skutečné hodnoty se liší podle komprimovatelnosti scény; stupeň SH 0 zmenšuje PLY/glTF o faktor 4.