« Tüm yayınlar

Three.js'e Gaussian Splatting için native destek geldi

Three.js, PR #33950 ile native Gaussian Splatting desteği kazanıyor: WebGPU/TSL render, yaklaşık GPU sıralama ve minimal loader API'si.

Gaussian Splatting artık glTF'in KHR_gaussian_splatting uzantısı, USD, Babylon.js, Apple RealityKit, NVIDIA Omniverse ve V-Ray, Arnold gibi offline render motorlarında yerleşik olarak desteklenen standart bir render tekniği haline geldi. Three.js bu listede eksikti; yayınlanan bir pull request (PR #33950) kütüphaneye native bir Gaussian Splatting desteği ekliyor ve geliştirici bunu kısmen kendi projesindeki splat ihtiyacı için hazırladı.

Tasarım üç katmana ayrılıyor: konum, 6 float'lık kovaryans özniteliği ve rgba8 renk taşıyan düz bir BufferGeometry; aynı geometriyi dolduran format bağımsız loader'lar (örneğin .spz dosyaları için); ve gerçek render işini yapan, bir WebGPU/TSL NodeMaterial olan GaussianSplatMesh. API kasıtlı olarak minimal tutulmuş — SPZLoader ile dosyayı yükleyip GaussianSplatMesh'e sarmalamak ve sahneye eklemek yeterli.

Doğru arkadan öne alfa blend için kare başına milyonlarca splat'ın sıralanması gerekiyor; implementasyon bunu tam bir GPU sıralaması yerine yaklaşık, O(N) karmaşıklığında bir counting sort ile çözüyor. Sıralama, splat verisi yerine küçük bir indeks dizisi üzerinde çalışıyor ve yalnızca kamera belirli bir eşiği aştığında yeniden çalıştırılıyor; reset, histogram, prefix sum ve scatter olmak üzere dört TSL compute geçişiyle uygulanmış, WebGL için CPU fallback'i de olan yeniden kullanılabilir bir CountingSort sınıfı olarak paketlenmiş.

Renderer, her splat'ın 3B kovaryansını perspektif projeksiyonun Jacobian'ını kullanarak 2B ekran uzayı elipsine izdüşürüyor, ardından alfa blend'li bir quad olarak rasterize ediyor; tamamı TSL ile yazıldığı için hem WebGPU hem WebGL backend'lerinde değişiklik yapılmadan çalışıyor. Mevcut sürüm yalnızca düz splat başına renk (SH0) destekliyor; görüş açısına bağlı gölgelendirme için yüksek dereceli küresel harmonikler henüz uygulanmadı.