Show HN: Gaussian Splatting 3D real-time di WebGL
(antimatter15.com)- Penampil WebGL yang memungkinkan adegan 3D Gaussian Splat dibuka dan dimanipulasi langsung di browser, dengan kode implementasi yang tersedia secara publik di GitHub
- Mendukung keyboard, mouse, trackpad, sentuhan, hingga gamepad, sehingga mencakup lingkungan input desktop dan mobile secara luas
- Kontrol kamera dibagi menjadi pergerakan, rotasi orbit, kemiringan, dan roll, sehingga penelusuran adegan yang sama dapat dilakukan dengan cara berbeda tergantung perangkat input
- Dengan tombol angka serta
-,+,p, pengguna dapat berpindah ke tampilan kamera yang telah dimuat sebelumnya, menelusuri kamera, dan melanjutkan animasi bawaan - File
.plydapat di-drag-and-drop untuk dikonversi menjadi.splat, dan pengaturan kamera dapat dimuat lewatcameras.json
WebGL 3D Gaussian Splat Viewer
- WebGL 3D Gaussian Splat Viewer adalah penampil 3D Gaussian Splat buatan Kevin Kwok
- Kodenya tersedia secara publik di Github
Kontrol berdasarkan perangkat input
-
Pergerakan keyboard
- Panah kiri/kanan: bergerak ke kiri/kanan
- Panah atas/bawah: bergerak maju/mundur
- Space: melompat
-
Sudut kamera
a/d: memutar kamera ke kiri/kananw/s: memiringkan kamera ke atas/bawahq/e: roll kamera berlawanan arah jarum jam/searah jarum jami/k,j/l: rotasi orbit
-
Trackpad
- Gulir: rotasi orbit atas/bawah/kiri/kanan
- Cubit: bergerak maju/mundur
Ctrl+ gulir: bergerak maju/mundurShift+ gulir: bergerak naik/turun atau ke kiri/kanan
-
Mouse
- Klik lalu seret: rotasi orbit
- Klik kanan atau seret atas/bawah sambil menekan tombol
Ctrl/Cmd: bergerak
-
Sentuhan
- Satu jari: rotasi orbit
- Cubit dua jari: bergerak maju/mundur
- Rotasi dua jari: memutar kamera searah/berlawanan arah jarum jam
- Geser dua jari: bergerak ke kiri/kanan dan atas/bawah
-
Gamepad
- Bekerja jika ada kontroler game yang terhubung
Kamera dan penanganan file
-
Kontrol tampilan kamera
0-9: berpindah ke salah satu tampilan kamera yang telah dimuat sebelumnya-atau+: menelusuri kamera yang dimuatp: melanjutkan animasi bawaan
-
Drag-and-drop
- File
.ply: dikonversi menjadi.splat cameras.json: memuat kamera
- File
1 komentar
Komentar Hacker News
Sangat keren, tetapi cara kontrolnya membingungkan
Bukan gerakan WASD dan rotasi sudut pandang dengan mouse seperti biasa; drag mouse justru bergerak maju-mundur dan mengorbit di sekitar titik tertentu, A/D bergerak ke kiri/kanan, W/S berfungsi untuk melihat ke atas/bawah
Daftar kontrol lengkap ada di README: https://github.com/antimatter15/splat#controls
Niat awalnya adalah agar bisa bergerak hanya dengan tombol panah, seperti memutar badan di tempat dan berjalan maju-mundur
Strukturnya adalah tombol panah/joystick untuk “gerakan utama” berupa maju-mundur dan rotasi kiri-kanan, sementara WASD/tombol C untuk “gerakan tambahan” berupa geser kiri-kanan dan sudut pandang atas-bawah
Sangat keren. Saya juga sedang mengerjakan port gaussian-splatting [0] ke WebGPU
Seperti implementasi lain yang pernah saya lihat sejauh ini, implementasi ini tampaknya juga melakukan kesalahan yang sama saat memproyeksikan elipsoid dalam proyeksi perspektif. Caranya adalah menghitung kovarians di 3D terlebih dahulu lalu memproyeksikannya ke 2D[1], tetapi pendekatan ini hanya benar untuk proyeksi paralel/ortografik dan menghasilkan hasil yang salah jika diterapkan pada proyeksi perspektif
Dalam proyeksi perspektif ada tiga efek tambahan. Pergeseran paralaks mengubah bentuk elips yang diproyeksikan, rotasi elipsoid dapat mengubah posisi tampak sehingga menghasilkan translasi tambahan, dan irisan kerucut bisa menjadi bukan hanya elips, tetapi juga parabola atau hiperbola
Efek pertama tampaknya dikoreksi secara manual dengan matriks ini[2], tetapi dua efek terakhir tidak dimasukkan dalam perhitungan pada implementasi yang saya lihat sejauh ini. Agar benar, jangan menghitung kovarians 3D; sebaliknya, cari kerucut batas elipsoid dengan posisi kamera sebagai puncaknya, lalu iriskan dengan bidang tampilan. Irisan kerucut yang dihasilkan menjadi kontur persis dari elipsoid yang diproyeksikan secara perspektif
[0]: https://github.com/graphdeco-inria/gaussian-splatting
[1]: https://github.com/antimatter15/splat/blob/3695c57e8828fedc2...
[2]: https://github.com/antimatter15/splat/blob/3695c57e8828fedc2...
Namun jika Gaussian kecil dibandingkan ukuran gambar, fungsi proyeksi dapat dilinearisasi untuk aproksimasi. Karena itu makalah Gaussian Splatting menggunakan Jacobian fungsi proyeksi seperti pada Persamaan 5[0]
Dalam praktiknya, aproksimasi ini sangat cocok. Matriks yang disebutkan di tautan ketiga adalah Jacobian tersebut, dan bukan koreksi manual, melainkan valid secara matematis. Lihat [1] untuk proses derivasi
[0] https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_...
[1] https://math.stackexchange.com/a/4716514/43771
Dilihat dengan cara lain, ini mengaproksimasi proyeksi dengan mengasumsikan seluruh Gaussian berada pada kedalaman tetap; tampaknya akan berfungsi jika cukup jauh
Transformasi proyektif Gaussian tampaknya cukup merepotkan, tetapi rasanya pasti sudah ada yang pernah melakukannya. Dalam koordinat proyektif tampaknya mungkin, tetapi bagian memproyeksikan kembali ke koordinat Kartesius pada akhirnya cukup sulit
Sebagai catatan, memproyeksikan kontur saja juga salah. Seluruh distribusi densitas berubah, dan itu juga memengaruhi kontur
Saya pikir proyeksi persegi sudah merupakan masalah yang terselesaikan; bisa jelaskan lebih lanjut bagaimana ini berbeda dari array persegi sederhana?
Saat zoom out, terlihat banyak tepi poligon yang rasanya tidak semestinya ada
Sepertinya seperti mencoba menggambar “gumpalan” halus tetapi koordinat teksturnya sedikit meleset; saya penasaran apakah ini bug atau bagian yang memang disengaja dari tekniknya
Pada dasarnya ini adalah point cloud semi-padat[1], tetapi alih-alih titik, strukturnya memiliki gumpalan yang warna, sudut, dan ukurannya disesuaikan agar cocok dengan foto input. Jadi ini dioptimalkan untuk dilihat dari jarak tertentu
Anggap saja seperti gambar vektor 3D. Jika diperbesar terlalu jauh atau sebagian dipisahkan, keseluruhannya mulai terlihat agak aneh
[1]https://www.researchgate.net/publication/326621750/figure/fi...
Sejauh ini saya hanya melihat gaussian splatting dipakai untuk data foto
Apakah bisa dipakai juga untuk data grafis lain? Dengan kata lain, apakah ada kemungkinan dipakai di game?
Ia hanya memuat warna berdasarkan posisi dan arah geometri, tanpa konsep umum tentang permukaan, material, dan perambatan cahaya, seperti emisi, absorpsi, transmisi, refleksi, atau hamburan. Dengan kata lain, hanya pencahayaan yang sudah dihitung sebelumnya dan adegan statis yang memungkinkan, sedangkan animasi sulit
Industri tampaknya bergerak ke arah metode yang memungkinkan pencahayaan dinamis yang lebih baik, seperti physically based rendering (PBR) dan ray/path tracing
Selain itu, saat ini efisiensi ruangnya sangat rendah. Adegan yang pada engine rendering tradisional cukup puluhan GB bisa menjadi skala TB. Namun, ini mungkin membaik dengan optimasi lebih lanjut
Satu pengecualian tempat gaussian splatting bisa menarik adalah konten prosedural/generatif, mungkin termasuk animasi. Ini bisa sangat cocok untuk efek volumetrik yang saat ini menggunakan sistem partikel, seperti asap, api, awan, dan air mengalir
Mudah membayangkan game open-world bergaya Minecraft yang memakai ini sebagai engine dasar alih-alih voxel
Apakah teknik ini juga bekerja untuk video?
Melihat README dari karya INRIA[1], tampaknya model dilatih untuk tiap adegan statis; apakah itu berarti video dikecualikan?
[1] https://github.com/graphdeco-inria/gaussian-splatting
[1] https://arxiv.org/abs/2308.09713
[2] https://dynamic3dgaussians.github.io/
Sebenarnya apa yang sedang saya lihat?
Metode ini sudah ada sejak lama, tetapi tidak banyak digunakan karena jika point cloud memiliki sejuta titik, sejuta titik itu harus ditangani secara artistik
Mirip dengan rambut 3D. Prinsipnya sederhana: cukup render 1 miliar helai rambut, tetapi membuatnya benar-benar terlihat bagus itu sulit
Di sini, model machine learning diminta menyesuaikan sudut, warna, bentuk, dan ukuran dari sejuta bentuk dasar—misalnya persegi, lingkaran, segitiga, dan sebagainya—agar terlihat seperti foto yang kita berikan
Apakah ini memakai metode yang diajukan Kerbl dan Kopanas di SIGGRAPH 2023?
https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
Benar-benar luar biasa. Point cloud saja sudah menarik, tetapi ini jauh lebih menakjubkan. Bahkan berjalan 60fps di laptop Lenovo yang dipakai di kantor
Namun artefaknya terlihat cukup banyak, terutama saat kamera digerakkan
Kalau ini dibuat berjalan di dalam ThreeJS, rasanya bisa meninggalkan jejak dalam sejarah 3D web
Saya belum pernah mengalami kontrol mouse seperti ini di tampilan 3D, jadi sempat sangat kebingungan selama beberapa saat