Show HN: WebGL’de gerçek zamanlı 3D Gaussian Splatting
(antimatter15.com)- Tarayıcıda 3D Gaussian Splat sahnelerini doğrudan açıp incelemeyi ve etkileşimli olarak kontrol etmeyi sağlayan bir WebGL görüntüleyici; uygulama kodu GitHub’da açık olarak yayımlanmış
- Klavye, fare, trackpad, dokunmatik ekran ve gamepad desteğiyle masaüstü ve mobil giriş ortamlarını geniş biçimde kapsar
- Kamera kontrolleri hareket, yörüngesel döndürme, eğim ve roll olarak ayrılır; farklı giriş cihazlarıyla aynı sahnede farklı şekillerde gezinilebilir
- Sayı tuşları ile
-,+,püzerinden önceden yüklenmiş kamera görünümlerine geçiş, kameralar arasında dolaşma ve varsayılan animasyonu sürdürme yapılabilir .plydosyaları sürükleyip bırakarak.splatbiçimine dönüştürülebilir;cameras.jsonile kamera ayarları yüklenebilir
WebGL 3D Gaussian Splat Viewer
- WebGL 3D Gaussian Splat Viewer, Kevin Kwok tarafından yapılmış bir 3D Gaussian Splat görüntüleyicisidir
- Kod Github üzerinde yayımlanmıştır
Giriş cihazına göre kontroller
-
Klavye ile hareket
- Sol/sağ oklar: sola/sağa hareket
- Yukarı/aşağı oklar: ileri/geri hareket
- Space: zıpla
-
Kamera açısı
a/d: kamerayı sola/sağa döndürmew/s: kamerayı yukarı/aşağı eğmeq/e: kamerayı saat yönünün tersine/saat yönünde roll yapmai/k,j/l: yörüngesel döndürme
-
Trackpad
- Kaydırma: yukarı/aşağı/sola/sağa yörüngesel döndürme
- Pinch: ileri/geri hareket
Ctrl+ kaydırma: ileri/geri hareketShift+ kaydırma: yukarı/aşağı veya sola/sağa hareket
-
Fare
- Tıklayıp sürükleme: yörüngesel döndürme
- Sağ tıklama veya
Ctrl/Cmdtuşuyla birlikte yukarı/aşağı sürükleme: hareket
-
Dokunmatik
- Tek parmak: yörüngesel döndürme
- İki parmakla pinch: ileri/geri hareket
- İki parmakla döndürme: kamerayı saat yönünde/saat yönünün tersine döndürme
- İki parmakla pan: sola/sağa ve yukarı/aşağı hareket
-
Gamepad
- Bağlı bir oyun kumandası varsa çalışır
Kamera ve dosya işleme
-
Kamera görünümü kontrolü
0-9: önceden yüklenmiş kamera görünümlerinden birine geçiş-veya+: yüklenen kameralar arasında dolaşmap: varsayılan animasyonu sürdürme
-
Sürükle ve bırak
.plydosyası:.splatbiçimine dönüştürmecameras.json: kamera yükleme
1 yorum
Hacker News yorumları
Gerçekten harika, ama kontrol biçimi kafa karıştırıcı
Alışıldık WASD ile hareket ve fareyle bakış yönünü döndürme yerine, fare sürükleme ileri-geri hareket ve belirli bir nokta etrafında yörüngesel dönüş yapıyor; A/D sağa-sola hareket, W/S ise yukarı-aşağı bakma olarak çalışıyor
Kontrollerin tam listesi README’de var: https://github.com/antimatter15/splat#controls
Asıl niyetim, yalnızca ok tuşlarıyla yerinde dönüp ileri-geri yürür gibi hareket edilebilmesiydi
Ok tuşları/joystick ile ileri-geri hareket ve sağa-sola dönme şeklinde “ana hareket”, WASD/C düğmeleriyle sağa-sola hareket ve yukarı-aşağı bakış şeklinde “ikincil hareket” yapısı var
Gerçekten harika. Ben de gaussian-splatting’i [0] WebGPU’ya portlama üzerinde çalışıyorum
Şimdiye kadar gördüğüm diğer uygulamalar gibi, bu uygulama da elipsoitleri perspektif projeksiyonda yansıtırken aynı hatayı yapıyor gibi görünüyor. Önce 3D’de kovaryansı hesaplayıp sonra 2D’ye projekte eden yöntem[1]; bu yaklaşım yalnızca paralel/ortografik projeksiyonda doğru, perspektif projeksiyona uygulanınca yanlış sonuç veriyor
Perspektif projeksiyonda üç ek etki var. Paralaks kayması, projekte edilen elipsin şeklini değiştirir; elipsoidin dönüşü görünür konumu değiştirip ek bir öteleme yaratabilir; konik kesit yalnızca elips değil, parabol ya da hiperbol de olabilir
İlk etkiyi bu matrisle[2] elle düzeltiyor gibi görünüyorlar, ancak son iki etki şimdiye kadar gördüğüm uygulamalarda hesaba katılmamış. Doğru yapmak için 3D kovaryansı hesaplamak yerine, tepe noktası kamera konumu olan elipsoidin sınır konisini bulup bunu görüntü düzlemiyle kesiştirmek gerekir. Ortaya çıkan konik kesit, perspektif projeksiyondaki elipsoidin doğru silüeti olur
[0]: https://github.com/graphdeco-inria/gaussian-splatting
[1]: https://github.com/antimatter15/splat/blob/3695c57e8828fedc2...
[2]: https://github.com/antimatter15/splat/blob/3695c57e8828fedc2...
Ancak Gauss dağılımı görüntü boyutuna kıyasla küçükse, projeksiyon fonksiyonunu doğrusallaştırarak yaklaşık hesap yapılabilir. Bu yüzden Gaussian Splatting makalesi, Denklem 5’te olduğu gibi projeksiyon fonksiyonunun Jacobian’ını kullanıyor[0]
Pratikte bu yaklaşım çok iyi uyuyor. Üçüncü bağlantıda bahsedilen matris tam olarak o Jacobian; elle yapılmış bir düzeltme değil, matematiksel olarak geçerli. Türetim süreci için [1]’e bakın
[0] https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_...
[1] https://math.stackexchange.com/a/4716514/43771
Başka bir açıdan bakınca, tüm Gauss dağılımının sabit bir derinlikte olduğunu varsayarak projeksiyonu yaklaşık hesaplamak demek; yeterince uzaktaysa çalışacak gibi
Bir Gauss dağılımının projektif dönüşümü epey zahmetli görünüyor, ama birileri yapmış olmalı. Projektif koordinatlarda mümkün görünse de en sonda Kartezyen koordinatlara projekte etme kısmı zor
Bu arada yalnızca silüeti projekte etmek de yanlış. Tüm yoğunluk dağılımı değişiyor ve bu da silüeti etkiliyor
Dörtgen projeksiyonunun zaten çözülmüş bir problem olduğunu sanıyordum; bunun basit bir dörtgen dizisinden nasıl farklı olduğunu biraz daha açıklayabilir misiniz?
Uzaklaştırınca, aslında orada olmaması gerekiyormuş gibi duran birçok çokgen kenarı görünüyor
Yumuşak “topaklar” çizilmeye çalışılırken doku koordinatları biraz kaymış gibi görünüyor; bunun bir hata mı yoksa tekniğin kasıtlı bir parçası mı olduğunu merak ediyorum
Temelde yarı yoğun bir nokta bulutu[1]; ancak noktalar yerine, giriş fotoğraflarına uyacak şekilde rengi, açısı ve boyutu ayarlanmış topaklar var. Bu yüzden belirli bir mesafeden bakılmak üzere optimize edilmiş
Bunu 3D vektör çizimi gibi düşünebilirsiniz. Çok fazla yakınlaştırırsanız ya da bir kısmını ayırırsanız bütün biraz garip görünmeye başlar
[1]https://www.researchgate.net/publication/326621750/figure/fi...
Şimdiye kadar gaussian splatting’in yalnızca fotoğraf verileri için kullanıldığını gördüm
Başka grafik verilerinde de kullanılabilir mi? Başka bir deyişle oyunlarda kullanılma ihtimali var mı?
Geometri konumu ve yönüne bağlı yalnızca renk bilgisini içerir; yüzey, malzeme ve ışık aktarımının genel kavramları, yani yayım, soğurma, geçirgenlik, yansıma ve saçılma gibi kavramlar yoktur. Başka bir deyişle yalnızca önceden hesaplanmış aydınlatma ve statik sahneler mümkündür; animasyon ise zordur
Sektör, fizik tabanlı render (PBR) ve ray/path tracing gibi daha iyi dinamik aydınlatmaya olanak veren yöntemlere doğru gidiyor gibi görünüyor
Ayrıca şu anda uzamsal verimliliği son derece düşük. Geleneksel render motorlarında onlarca GB ile yetinebilecek bir sahne TB mertebesine çıkabilir. Ancak daha fazla optimizasyonla bu iyileşebilir
İstisna olarak gaussian splatting’in ilginç olabileceği yer, prosedürel/üretken içerik, hatta belki animasyonu da içeren içeriklerdir. Özellikle duman, ateş, bulut ve akan su gibi şu anda parçacık sistemleri kullanılan hacimsel efektler için uygun olabilir
Voxel yerine bunu temel motor olarak kullanan açık dünya, Minecraft tarzı bir oyunu kolayca hayal edebiliyorum
Bu teknik video için de çalışır mı?
INRIA çalışmasının README’sine[1] bakınca, her statik sahne için bir model eğitiliyor gibi görünüyor; bu durumda video kapsam dışı mı kalıyor?
[1] https://github.com/graphdeco-inria/gaussian-splatting
[1] https://arxiv.org/abs/2308.09713
[2] https://dynamic3dgaussians.github.io/
Şu anda neye bakıyorum?
Çok eskiden beri var olan bir yöntem, ancak nokta bulutunda bir milyon nokta varsa o milyon noktayı sanatsal olarak ele almak gerektiği için pek kullanılmıyordu
3D saçlara benziyor. Prensip basit: 1 milyar saç telini render etmeniz yeterli; ama gerçekte iyi görünmesini sağlamak zor
Burada bir makine öğrenmesi modeline bir milyon temel şeklin — örneğin kare, daire, üçgen vb. — açılarını, renklerini, biçimlerini ve boyutlarını ayarlatıp, bizim sağladığımız fotoğraflara benzemesini sağlıyoruz
Bu, SIGGRAPH 2023’te Kerbl ve Kopanas’ın önerdiği yöntemi mi kullanıyor?
https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
Gerçekten harika. Nokta bulutları da ilginç ama bu çok daha şaşırtıcı. Şirkette kullandığım Lenovo dizüstü bilgisayarda bile 60fps çalışıyor
Ancak özellikle kamerayı hareket ettirince çok sayıda artefakt görülüyor
Bunu ThreeJS içinde çalışır hale getirirseniz, web 3D tarihine iz bırakabilirsiniz diye düşünüyorum
3D görünümde böyle bir fare kontrolü hiç deneyimlemediğim için bir süre ciddi şekilde afalladım