Bölüm 8 — Dışa Aktarma Formatları


Görselde görülen: Her format kutucuğunun altındaki boyut bilgisi, güncel Gauss sayısından ve format ek yükünden canlı olarak hesaplanır — sabit kodlanmış değildir. Aynı sahneden 2,2 MB PLY, 142 KB cPLY, 89 KB SOG, 216 KB SPZ, 2,1 MB glTF ve 279 KB .splat ortaya çıkar; Web 378 KB ile bunun üzerindedir çünkü orada dosyanın içine görüntüleyici de dahil edilir. Video ve Wiggle „Zero KB" gösterir, çünkü boyut ancak kodlamadan sonra belli olur. Seçili kutucuk mavi çerçeveyle işaretlenir ve altındaki düğme onun adını devralır — burada „Export PLY (3DGS Standard)". Başlığın altında şu satır yer alır: „Leveling the floor turns the view at once; the chosen orientation and format apply when saving".
Tamamlanmış bir eğitim, bir Gauss bulutu üretir — birlikte sahneyi yeniden oluşturan birkaç yüz binden birkaç milyona kadar 3D Gauss dağılımının bir koleksiyonu. Bu bölüm, bu bulutu diske yazmanın on yolunu anlatır. Bunlardan altısı saf 3D veri formatıdır (PLY, Compressed PLY, SPZ, SOG, glTF, .splat), biri bulutu hazır bir HTML görüntüleyiciyle birlikte paketler (Web Viewer), biri bir yörünge kamera hareketinden bir MP4 dosyası oluşturur (Orbit Video), ikisi ise Gauss içeriği değil yalnızca SfM sonucunu (kamera pozları ve kaba nokta bulutu) diğer eğitim işlem hatlarında yeniden kullanım için dışa aktarır (transforms.json + COLMAP çalışma alanı).
Bu on yoldan sekizi dışa aktarma bölümünde kutucuk olarak sunulur — transforms.json ve COLMAP çalışma alanı yalnızca menüde bulunur. Bunun yanında ızgarada dokuzuncu bir kutucuk olarak Wiggle yer alır ve dışa aktarma düğmesinin altında Upload to SuperSplat… bulunur, bu da sahneyi bir dosyaya değil doğrudan internet üzerindeki SuperSplat editörüne gönderir.
Hangi formatın ne zaman doğru olduğu hedefe bağlıdır. Tam verinin kalite kaybı olmadan arşivlenmesi için PLY kullanılır. Kendi sitende web görüntüleyicileri için genellikle .splat veya yerleşik web görüntüleyici yeterlidir. Dosyanın minimum olması gerekiyorsa SPZ veya SOG işe yarar. SfM sonucunu Nerfstudio, Postshot veya Brush'ta yeniden kullanmak için transforms.json ve COLMAP çalışma alanı doğru yoldur.
Tüm dışa aktarma işlevleri "Export" menüsünde ve Simple modda son sihirbaz adımında yer alır. Formatların çoğu tamamen sandbox uyumludur ve App Store sürümünde çalışır. Sadece SOG harici bir ikili dosya (cwebp) gerektirir; bu, App Store derlemesinde mutlaka bulunmayabilir — ayrıntılar için bkz. E4.
E1 — PLY (.ply)
NEREDE
Menü çubuğu → Export → 3D Formats → Export PLY… (⌘E). Simple mod: Sihirbaz adımı Export → Format kartı „PLY". Boyut: tipik olarak %100 (referans değer). Uyumlu olduğu: SuperSplat, PolyCam, tüm 3DGS görüntüleyicileri.
TEKNİK
PLY, 3D Gaussian Splatting için kanonik depolama formatıdır. RadianceKit, standartlaştırılmış 3DGS özellik düzenine sahip ikili Little-Endian bir dosya yazar: her Gauss için üç bileşenli konum, sürekli sıfıra ayarlanmış üç normal, temel RGB rengi için üç DC-SH katsayısı (f_dc_0..2), ardından Kerbl-2023 makalesinde tanımlanan transpoze edilmiş kanal-major düzeninde (önce tüm R kanalı katsayıları, sonra tüm G, sonra tüm B) en fazla 45 ek SH katsayısı (f_rest_0..44), bunu takiben logit opaklık (ham pre-sigmoid değerler), üç log-uzayı ölçek ve bir wxyz kuaterniyon rotasyonu. Dışa aktarılan maksimum SH derecesi, kullanıcı isteği ile gerçekten öğrenilmiş derecenin minimumuna kırpılır; varsayılan 3'tür (45 kalan katsayı). Yazmadan önce, son derece büyük bulutlarda taşmayı yakalamak için yük boyutu 64 bit tamsayı olarak hesaplanır. Dosya atomik olarak yazılır; bu, büyük bulutlarda kısa süreliğine iki katı disk alanı kaplar.
E2 — Sıkıştırılmış PLY (.ply)
NEREDE
Menü çubuğu → Export → 3D Formats → Export Compressed PLY…. Simple mod: Format kartı „Compressed PLY". Boyut: PLY'ye kıyasla yakl. %10–20 (5 ila 10 kat sıkıştırma). Uyumlu olduğu: SuperSplat, PlayCanvas motoru, web tabanlı görüntüleyiciler.
TEKNİK
PLY formatının parçalı (chunked) niceleme içeren PlayCanvas varyantı. Gauss'lar 256'lık parçalar (chunk) halinde gruplandırılır. Her parça için konum, ölçek ve renk için min/max sınırlar başlıkta ayrı ayrı saklanır; tek tek Gauss'lar değerlerini bu sınırlara göreceli olarak referans alır ve her biri 32 bite sıkıştırılır: konum ve ölçek 11-10-11 bit paketleme ile, rotasyon 2-10-10-10 bit „En Küçük Üçlü" kuaterniyon olarak, renk 8-8-8-8 RGBA olarak. Daha yüksek SH katsayıları yalnızca bileşen başına 8 bit ile nicelenir (katsayı ve Gauss başına üç bayt). Formatın kendisi hâlâ ASCII başlıklı PLY'dir ve bu nedenle temelde PLY araçlarıyla doğrulanabilir, ancak vertex özellikleri uint alanları olarak tanımlanmıştır. SH derecesi, sıkıştırmayı en üst düzeye çıkarmak için varsayılan olarak 0'dır (kalan katsayı yok) — daha yüksek SH dereceleri açıkça seçilebilir.
E3 — SPZ (.spz)
NEREDE
Menü çubuğu → Export → 3D Formats → Export SPZ…. Simple mod: Format kartı „SPZ". Boyut: PLY'ye kıyasla yakl. %10 (%90 daha küçük). Uyumlu olduğu: Niantic Scaniverse, Niantic Spatial Fields, MetalSplatter.
TEKNİK
Niantic'in SPZ v2 formatı. Konumlar 24 bit sabit noktalı olarak paketlenir (bu yaklaşık 0,25 mm çözünürlük verir), ölçekler log uzayında 8 bit niceleme olarak, rotasyonlar 8 bit En Küçük Üçlü olarak (v2'de yalnızca xyz saklanır, w değeri çözücüde kuaterniyon normundan türetilir), opaklıklar sigmoidleştirilmiş 8 bit değerler olarak saklanır. DC-SH, SPZ'ye özgü bir paketleme formülüyle (dc_raw * 0.15 * 255 + 0.5 * 255) saklanır, daha yüksek SH bantları katsayı başına 5 bit (bant 1) veya 4 bit (bant 2-3) ile. Paketlenmiş ikili blob'un tamamı ardından standart gzip (RFC 1952) ile sıkıştırılır; bu da 1f 8b sihirli baytlarına sahip gzip'li bir konteyner formatı ortaya çıkarır. RadianceKit bunun için sistemin gzip'ini çağırır, çünkü Apple'ın yerleşik zlib API'si Spatial Fields veya MetalSplatter'daki SPZ okuyucularıyla uyumlu olmayan tescilli Apple çerçevelemesi üretir. Sistem gzip'i macOS sandbox'ı içinde de başlatılabilir kalır.
E4 — SOG (.sog)
NEREDE
Menü çubuğu → Export → 3D Formats → Export SOG…. Simple mod: Format kartı „SOG". Boyut: PLY'ye kıyasla yakl. %5–6 (15 ila 20 kat sıkıştırma — en küçük seçenek). Uyumlu olduğu: PlayCanvas motoru, SuperSplat editörü.
TEKNİK
„Spatially Ordered Gaussians" — bulutu birden fazla kayıpsız WebP görüntüsünde GPU'ya hazır şekilde saklayan bir PlayCanvas formatı. Önce tüm Gauss'lar 3D Morton kodu (30 bit Z-sıra, eksen başına 10 bit) ile uzamsal olarak sıralanır; bu, görüntülere render'da sonradan önbellek yerelliği (cache locality) kazandırır. Sonra konumlar, daha iyi dinamik aralık için simetrik log dönüşümüyle 16 bit değerlere nicelenir ve iki RGBA görüntüsüne bölünür (means_l.webp alt 8 bit için, means_u.webp üst bit için). Rotasyonlar bir RGBA görüntüsünde 3×8 bit artı 2 bit mod ile En Küçük Üçlü olarak kodlanır (mod, alfa kanalında 252 + largest olarak yer alır). Ölçekler ve DC-SH, her biri 256 girişli bir kod defteri (tüm değerler üzerinde yüzdelik bazlı dağıtılmış) ile nicelenir; indeksler scales.webp ve sh0.webp dosyalarına yerleşir. Beş görüntü artı kod defterleri ve sınırları içeren bir meta.json, bir ZIP dosyasına paketlenir (özel bir kodlayıcı, çünkü sandbox sistemin zip'ini engeller) ve .sog uzantısıyla kaydedilir.
Sandbox uyarısı: SOG, harici bir ikili dosya gerektiren tek format seçeneğidir. WebP kodlama aşaması, /usr/local/bin/cwebp veya /opt/homebrew/bin/cwebp konumundan cwebp'i çağırır. Eğer cwebp ikili dosyası bulunamazsa, kod ham PNG kodlamasına geri döner — ancak: PNG geri dönüşü SuperSplat'ta çalışmaz. App Store sürümünde kullanılabilirlik, derleme türüne göre değerlendirilir; geliştirici sürümünde cwebp'in Homebrew üzerinden kurulu olması gerekir (brew install webp).
E5 — glTF (.glb)
NEREDE
Menü çubuğu → Export → 3D Formats → Export glTF…. Simple mod: Format kartı „glTF". Boyut: PLY ile karşılaştırılabilir. Uyumlu olduğu: KHR_gaussian_splatting uzantısına sahip glTF görüntüleyicileri (Khronos taslak standardı).
TEKNİK
KHR_gaussian_splatting uzantı özelliğine göre kendi kendine yeten bir .glb ikili dosyası yazar (ayrı bir bin dosya eki yoktur). Konumlar düzenli glTF POSITION vertex verisi olarak (float3) saklanır, diğer tüm öznitelikler (float4 olarak rotasyon, float3 olarak ölçek, float olarak opaklık, shCoeffCount × float3 olarak SH katsayıları) ek vertex özniteliklerinde bulunur ve uzantı üzerinden referans alınır. Önemli olan: glTF sağ elli Y-yukarı koordinat sistemi kullanır, COLMAP/3DGS Y-aşağı/Z-ileri ile çalışır. Bu nedenle dışa aktarıcı X ekseni etrafında 180 derecelik bir döndürme uygular — konumlar (x, -y, -z) olarak yeniden yazılır, kuaterniyonlar (w, x, -y, -z) olarak uyarlanır. Bu, glTF görüntüleyicilerinde geometrik olarak doğru, elli (ayna görüntüsü olmayan) bir gösterim sağlar. JSON ve ikili parçalar, GLB standardının gerektirdiği gibi 4 bayt hizalamaya doldurulur (padding).
E6 — Splat (.splat)
NEREDE
Menü çubuğu → Export → 3D Formats → Export .splat…. Simple mod: Format kartı „.splat". Boyut: Gauss başına tam olarak 32 bayt. Uyumlu olduğu: gsplat.js, web tabanlı görüntüleyiciler (antimatter15 referansı), çoğu tarayıcı 3DGS demosu.
TEKNİK
antimatter15 .splat formatı — Gauss başına 32 bayt, başlık yok, dolaylılık (indirection) yok. Giriş başına düzen: 3 × float32 konum (dünya koordinatları), 3 × float32 ölçek (dahili tamponun log uzayından exp dönüştürülmüş), 4 × uint8 RGBA renk (SH_C0 = 0.282... ile ölçeklenip [0,255] aralığına kırpılmış DC-SH katsayısı), 4 × uint8 kuaterniyon (w,x,y,z, normalleştirilmiş ve 128 + 128*q olarak bayt aralığına kodlanmış). Yalnızca DC-SH saklanır — daha yüksek SH bantları atılır. Bu, formatı son derece kompakt yapar, ancak yansımalarda veya speküler parlamalarda ortaya çıkan görüş açısına bağlı renk değişimlerine mal olur. Yazma sırası tam olarak bulutun indeks sırasıdır (uzamsal sıralama yoktur); gsplat.js gibi web görüntüleyicileri buna dayanarak render eder.

flowers-01.html — gömülü WebGL2 programı, ağ veya sunucu olmadan Gauss bulutunu anında render eder. Bouquet'in etrafındaki siyah işaretleyiciler, isteğe bağlı olarak gösterilebilen eğitim kameralarıdır. Fare sürükleme döndürür, kaydırma yakınlaştırır.E7 — Web Viewer (.html)
NEREDE
Menü çubuğu → Export → Media → Export Web Viewer…. Simple mod: Format kartı „Web Viewer". Boyut: base64 kodlanmış splat verisi (≈ 4/3 ek yük) + yakl. 5 KB HTML/JS kabuğu. Uyumlu olduğu: WebGL2 destekli her modern tarayıcı (tüm masaüstleri, iOS 15+, Android 5+).
TEKNİK
Gauss bulutunu, tamamen satır içi (inline) yazılmış bir WebGL2 renderer'ıyla birlikte tek bir .html dosyasına paketler. Hiçbir CDN bağımlılığı, WASM veya ikinci dosya yoktur. Bulut önce dahili olarak bir .splat ikili dosyası olarak kodlanır (E6 ile aynı 32 baytlık mantık), ardından base64 ile gömülür, ardından tarayıcıda atob ile çözülür. Gömülü render motoru kendi WebGL2 sıralamasını, fare orbit kontrolünü ve kare başına CPU sıralamasını yapar; tüm JS kodu (shader'lar, matematik, döngü) çıktı HTML'sinde görülebilir. Bellek-render sınırındaki eksen kuralı E5 ile tamamen aynıdır: konum (x, -y, -z), kuaterniyon (w, x, -y, -z). İsteğe bağlı olarak bir marka bindirmesi (ücretsiz katman anahtarı) gösterilebilir. Her şey satır içi olduğundan, dosya doğrudan file:// protokolünden de çalışır — test için yerel bir web sunucusuna gerek yoktur.

E8 — Orbit Video (.mp4/.mov)
NEREDE
Menü çubuğu → Viewport → Record Turntable Video VEYA Menü çubuğu → Export → Media → Export Orbit Video…. Simple mod: Süre kaydırıcısı 3–30 s olan „Orbit Video" format kartı. Boyut: süreye, çözünürlüğe, bit hızına bağlıdır. Uyumlu olduğu: tüm platformlar (H.264 ve HEVC Apple standardıdır).
TEKNİK
Gauss bulutunu parametrik bir orbit kamera hareketi boyunca render eder ve her kareyi AVAssetWriter üzerinden bir MP4 veya MOV dosyasına kodlar. Orbit yapılandırması, dönüş hızını (tur sayısı), mesafeyi, yüksekliği, FOV'u, süreyi ve giriş/çıkış yumuşatma (ease-in/out) faktörünü kontrol eder. Orbit Video dışa aktarımı, RadianceKit'in KENDİ render aşaması üzerinden tam SH değerlendirmesiyle çalışır — uygulama içi viewport ile piksel piksel aynıdır (WYSIWYG). Her kare için, iç koordinatları Y-yukarı orbit dünyasına döndürmek için render motoru tarafından hesaplanan dünya uyum matrisi kamerayla çarpılır, ardından bir kamera dönüştürme yansıması (Orbit Y-yukarı → COLMAP Y-aşağı) uygulanır. Ekran dışı render hedefi, IOSurface üzerinden bir CVPixelBuffer'a çekilerek kodlayıcıya aktarılır. Kodlayıcı H.264 ve HEVC'yi, yapılandırılabilir bit hızını ve 480p'den 8K'ya kadar çözünürlüğü destekler. İlk karadan önce, render motoru başlangıçtaki splat sıralamasının tamamlanması için 200 ms bekler. Bu dışa aktarma GPU'ya bağımlıdır — 8K'da ve milyonlarca Gauss'ta kare başına render süresi birkaç saniyeye ulaşır, dolayısıyla 6 saniyelik bir video için toplam render süreleri 10–30 dakika olabilir.
E9 — SfM Transforms (transforms.json)
NEREDE
Menü çubuğu → Export → Photogrammetry → Export SfM (transforms.json)…. Boyut: tipik olarak 1–10 KB (yalnızca poz + intrinsics, görüntü yok, Gauss yok). Uyumlu olduğu: nerfstudio, Brush, gsplat, OpenSplat, Meshroom, tüm modern ileri beslemeli (feed-forward) 3DGS eğiticileri.
TEKNİK
Kamera pozlarının bir listesini artı paylaşılan intrinsics'i içeren nerfstudio transforms.json formatını yazar. Her kamera için görüş matrisi (RadianceKit dahili: COLMAP kuralında World-to-Camera) tersine çevrilir, ardından nerfstudio kuralına (OpenGL tarzı, kamera -Z boyunca bakar, +Y yukarıdadır) dönüştürmek için kameraya özgü Y ve Z taban vektörleri yansıtılır. Nihai 4×4 matris, her karenin transform_matrix alanında çift hassasiyetli değerlerin satır-major iç içe dizisi olarak yer alır. Intrinsics üst seviyede saklanır (odak uzaklığı x/y, ana nokta x/y, görüntü genişliği/yüksekliği, camera_model = "OPENCV", artı distorsiyon katsayıları k1, k2, p1, p2) — dışa aktarıcı birden fazla farklı intrinsics kümesi algılamadığı sürece; bu durumda kare başına yazılırlar. Görüntü yolları, JSON dosyasına göreli olarak images/<dosya adı> şeklinde yazılır; kullanıcının eğitim fotoğraflarıyla bir kardeş images/ klasörü oluşturması gerekir.
E10 — COLMAP Çalışma Alanı (sparse/0/)
NEREDE
Menü çubuğu → Export → Photogrammetry → Export SfM (COLMAP Workspace)…. Boyut: üç ikili dosya birlikte tipik olarak 4–8 MB — points3D.bin baskındır (seyrek bulutun her 3D noktası için bir satır), images.bin ve cameras.bin her biri belirgin şekilde 100 KB'ın altındadır. Uyumlu olduğu: COLMAP'ın kendisi, Nerfstudio, Postshot, Meshroom, bir COLMAP sparse/ dizini bekleyen tüm araçlar.
TEKNİK
Standart COLMAP sparse/0/ düzenini üç ikili dosyayla yazar: cameras.bin, images.bin, points3D.bin. Format referansı resmi COLMAP belgelendirmesidir. cameras.bin, tekrarsızlaştırılmış (deduplicate edilmiş) intrinsics listesini içerir (aynı intrinsics + görüntü boyutuna sahip kameralar tek bir girişte birleştirilir); kullanılan kamera modeli, fx/fy/cx/cy artı dört distorsiyon katsayısı k1/k2/p1/p2 ile OPENCV'dir (Model 4). images.bin, her görüntü için pozu wxyz kuaterniyon artı öteleme olarak, ardından kamera kimliği ve dosya adını listeler; 2D-3D karşılıkları saklanmaz. points3D.bin, konum, renk (0-255 RGB) ve yeniden yansıtma ile track uzunluğu için varsayılan değerlerle SfM nokta bulutunu içerir. Her şey Little-Endian olarak yazılır. RadianceKit'e yeniden içe aktarma, Dosya menüsü → „Import COLMAP/Metashape Workspace…" üzerinden çalışır (bkz. SfM Backend bölümünde Q3).
Hangi format ne zaman kullanılır?
| Hedef | Format |
|---|---|
| Kendi sayfanda web görüntüleyici | E7 Web Görüntüleyici (.html) |
gsplat.js ile web görüntüleyici | E6 Splat (.splat) |
| Postshot / Nerfstudio'da işlem hattı yeniden kullanımı | E9 transforms.json + E10 COLMAP Workspace |
| SuperSplat ile düzenleme | E1 PLY veya E2 Compressed PLY |
| Niantic Scaniverse / Spatial Fields | E3 SPZ |
| Maksimum sıkıştırma | E4 SOG (cwebp gerekli) |
| Pazarlama/sosyal medya videosu | E8 Orbit Video |
| Sahneyi çevrimiçi düzenlemeye devam et | Format ızgarasının altındaki „Upload to SuperSplat…" düğmesi |
Hızlı Karşılaştırma
| Format | Uzantı | Sandbox | Boyut (1M Gauss) | En İyi Kullanım |
|---|---|---|---|---|
| E1 PLY | .ply | evet | ~250 MB | Arşiv, en yüksek uyumluluk |
| E2 Compressed PLY | .ply | evet | ~40 MB | Web + SuperSplat |
| E3 SPZ | .spz | evet (gzip-Spawn) | ~40 MB | Niantic + Mobil |
| E4 SOG | .sog | koşullu (cwebp) | ~20 MB | Maksimum Sıkıştırma |
| E5 glTF | .glb | evet | ~250 MB | Khronos İş Akışı |
| E6 Splat | .splat | evet | ~32 MB | gsplat.js Web Görüntüleyici |
| E7 Web Viewer | .html | evet | ~45 MB | Bağımsız Tarayıcı Dosyası |
| E8 Orbit Video | .mp4/.mov | evet | değişken | Sosyal Medya/Pazarlama |
| E9 SfM Transforms | .json | evet | ~5 KB | Poz Aktarımı |
| E10 COLMAP Workspace | Dizin | evet | ~4–8 MB | Poz Aktarımı (ikili) |
Boyut sütunu, SH-derece 3 ile 1 milyon Gaussian için kabaca yaklaşık değerlerdir. Gerçek değerler sahnenin sıkıştırılabilirliğine göre değişir; SH-derece 0, PLY/glTF boyutunu 4 kat azaltır.