CityGaussian: Rendering adegan skala besar berkualitas tinggi secara real-time dengan Gaussian
(dekuliutesla.github.io)- CityGaussian(CityGS) adalah metode ECCV 2024 yang memperluas 3D Gaussian Splatting(3DGS) ke adegan berskala kota, dengan sasaran efisiensi pelatihan sekaligus kualitas eksplorasi real-time
- Keterbatasan karena adegan skala besar sulit ditangani sekaligus dipecahkan dengan membaginya melalui strategi pelatihan divide-and-conquer dan level of detail(LoD)
- Dengan memanfaatkan informasi prior global adegan dan pemilihan data pelatihan adaptif, hasil pelatihan per blok dapat diselaraskan lebih efisien dan digabungkan dengan mulus
- Gaussian primitive yang telah digabungkan dikompresi untuk membuat beberapa level detail, lalu saat rendering, level detail yang sesuai dipilih dan diagregasi per blok
- Jika MatrixCity direpresentasikan tanpa LoD menggunakan 25 juta Gaussian, performanya hanya 18 FPS di A100, tetapi CityGS dengan LoD mencapai rendering real-time dengan rata-rata 36 FPS
Struktur pelatihan dan rendering untuk 3DGS skala besar
- 3D Gaussian Splatting(3DGS) menunjukkan keunggulan dalam rekonstruksi adegan 3D real-time dan sintesis sudut pandang baru, tetapi pelatihan adegan skala besar dan rendering real-time pada berbagai skala masih menjadi beban besar
- CityGaussian menangani masalah ini dalam dua tahap
- Pelatihan divide-and-conquer: membagi adegan skala besar menjadi blok-blok untuk dilatih secara efisien
- Strategi LoD: meningkatkan kecepatan rendering dengan hanya menggunakan level detail yang diperlukan sesuai skala observasi
- Informasi prior global adegan dan pemilihan data pelatihan adaptif meningkatkan efisiensi pelatihan serta membantu menggabungkan potongan adegan yang terpisah secara lebih alami
- Gaussian primitive yang telah digabungkan disusun menjadi beberapa level detail melalui proses kompresi
- Pada tahap rendering, strategi pemilihan dan agregasi level detail per blok digunakan untuk memungkinkan pembuatan frame yang cepat bahkan pada berbagai skala
Performa dan materi publik
- Tanpa penerapan LoD, adegan MatrixCity direpresentasikan dengan 25 juta Gaussian, dan diukur pada 18 FPS di A100
- Kecepatan ini dinilai sulit memberikan pengalaman roaming yang nyaman
- CityGS dengan LoD mampu melakukan rendering real-time bahkan pada skala yang sangat berbeda, dan diukur rata-rata 36 FPS di A100
- Dalam eksperimen adegan skala besar, CityGS menunjukkan kualitas rendering setara state-of-the-art dan mendukung rendering real-time yang konsisten pada adegan skala besar di berbagai skala
- Materi publik
1 komentar
Komentar Hacker News
Melihat nama dataset videonya adalah Matrix city, kemungkinan besar dataset itu diekstrak dari demo Unreal Engine 5 Matrix yang dirilis beberapa tahun lalu
Sudut pandangnya sangat mirip sehingga terlihat fotorealistis, tetapi tampaknya bukan berasal dari foto sungguhan
Setelah mencari lebih lanjut, ternyata benar: https://city-super.github.io/matrixcity/
Menariknya, kalau begitu tulisan aslinya pada dasarnya merekonstruksi ulang sesuatu yang sudah direkonstruksi dari objek nyata
Peta MatrixCity berbeda, tetapi sampai tingkat tertentu mirip dengan peta Matrix Awakens. Ini juga bisa dilihat dalam analisis desain di halaman [3] yang ditulis oleh technical lead proyek Matrix Awakens
Jika ditelusuri lebih jauh, bagian MatrixPlugin di codebase GitHub [4] menyebutkan secara eksplisit bahwa mereka menggunakan proyek city-sample
[1] https://www.unrealengine.com/marketplace/en-US/product/city-...
[2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
[3] https://quentinmarmier.artstation.com/projects/xYeKNO
[4] https://github.com/city-super/MatrixCity
Karena itu, pelatihan NeRF atau Gaussian splatting menjadi sedikit lebih mudah, sebab tidak ada galat optimasi pose kamera
Ini juga alasan makalah-makalah awal NeRF memakai ekskavator Lego kuning terkenal yang dirender dengan Blender
Untuk adegan seperti Matrix city, rasanya tidak perlu menghabiskan waktu lama untuk melatih model hanya demi mereproduksi datanya
Akhir pekan lalu saya mencoba menggabungkan mesh Google Maps 3D Tiles dengan Gaussian splat. Hasilnya tidak sepenuhnya sama, tetapi efeknya cukup mirip dan berguna
Contoh 1 dengan kode yang ditautkan: https://twitter.com/kfarr/status/1773934700878561396
Contoh 2: https://twitter.com/3dstreetapp/status/1775203540442697782
Di tautan pertama, developer tools menampilkan error
Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>)...Saya berencana melihat aframe-loader-3dtiles-component
“Kecepatan rata-rata 36 FPS (diuji pada A100)” berarti sepertinya ini real-time kalau punya GPU seharga $8k
Kalau makalah grafika mengatakan sudah mencapai kecepatan real-time, kita selalu harus mengecek lagi apakah itu benar-benar real-time, atau “640x480 20fps di hardware termahal yang bisa dibeli dengan uang”
Kalau standarnya diturunkan cukup rendah, apa pun bisa menjadi real-time
Ini bisa berguna untuk penggunaan seperti virtual production, tetapi sepertinya bukan untuk mobile
https://www.techpowerup.com/forums/attachments/all-cards-png...
Kalau ingin sesuatu yang bisa dijalankan bahkan di laptop berumur 10 tahun, bahkan tanpa GPU, silakan lihat https://github.com/pierotofy/OpenSplat. Itu buatan saya
Jadi ini tidak terlihat seperti masalah yang tidak bisa diatasi
Adakah yang bisa meyakinkan saya bahwa 3D Gaussian splatting bukan jalan buntu?
Rendering-nya terlalu lambat, dalam kisaran beberapa kali lipat satu digit, dan datanya juga terlalu besar, juga dalam kisaran beberapa kali lipat satu digit. Rasanya seperti melihat lagi pertentangan antara rasterisasi dan ray tracing
Rasterisasi akan selalu lebih cepat daripada ray tracing, dan kalau ray tracing jadi 10 kali lebih cepat, rasterisasi juga akan jadi 10 kali lebih cepat
Membuat geometri dan material tradisional dari point cloud Gaussian mungkin menarik. Tapi fotogrametri sudah ada sejak cukup lama
Mencoba me-render kota raksasa secara real-time dengan splat tidak terasa seperti “arah yang benar”
Keren, menyenangkan, dan menarik, tapi saya tidak yakin apakah ini benar-benar akan berguna. Saya bukan ahli, jadi ini pertanyaan serius
Saat ini sebagian besar riset tidak berfokus pada performa, dan bahkan belum ada kesepakatan tentang format terpadu, termasuk kompresi
Peluang optimasinya sangat jelas, dan mudah juga disesuaikan untuk berbagai perangkat. Mirip dengan LOD point cloud atau mesh culling
Performa splat bisa menjadi keunggulan kompetitif sementara bagi viewer, tetapi seperti dekompresi video atau standar 3D lain yang menyebar lewat open source, dalam beberapa tahun kemungkinan besar kemampuan melihat splat berkualitas tinggi dan ber-frame rate tinggi akan menjadi syarat dasar di sebagian besar perangkat
Pertanyaan berikutnya adalah ini akan dipakai untuk apa
Lebih dari 100fps di browser: https://current-exhibition.com/laboratorio31/
900fps: https://m-niemeyer.github.io/radsplat/
Engine tradisional punya akumulasi 30 tahun R&D, jadi butuh waktu sampai alat dan optimasinya mengejar
Namun kalau dilihat dari mana paper-paper ini berasal, banyak dari Apple dan Meta, dan ini tampak seperti teknologi yang akan menggerakkan era metaverse/spatial computing yang mereka dorong
Kemampuan memindahkan konten dengan biaya produksi sangat rendah seperti video iPhone ke lingkungan 3D akan menggeser banyak R&D dengan cara tradisional
Menangkap detail halus seperti struktur tipis atau rambut juga sangat sulit. 3DGS kuat di bagian seperti itu
Riset untuk memperbaiki kelemahannya saat ini juga sedang berjalan, termasuk metode ekstraksi mesh yang bisa dipakai dalam pipeline grafis tradisional
Fotogrametri hanya bekerja baik ketika data permukaannya bersih, sedangkan Gaussian splat kuat untuk data semi-volumetrik seperti bulu, vegetasi, partikel, dan permukaan kasar
Ini juga cocok untuk permukaan mengilap/reflektif, volume dengan sifat permukaan tersubdivisi yang kuat, dan material yang sangat bergantung pada sudut pandang
Untuk penggunaan yang setara dengan foto 3D penuh, ini cukup keren dan merupakan use case yang sangat valid
Untuk engine game 3D, menurut saya sulit memperlakukan primitive dasarnya secara dinamis dengan cara yang dibutuhkan engine game. Upaya akan terus ada, tetapi dari sudut pandang ini Gaussian tampak lebih dekat ke format render akhir daripada representasi perantara yang berguna
Agar praktis dipakai di engine, sesuatu yang menjembatani celah itu perlu ditemukan, dan masih banyak pertanyaan yang tersisa
Saya tidak tahu penggunaan lainnya, tetapi dunia tidak sepenuhnya terdiri dari game 3D dan efek visual saja
Ada begitu banyak hal yang memakai nama Gauss, dan melihat nama itu terus ditambahkan ke hal-hal baru seperti Gaussian splatting membuat saya kembali merasa menarik betapa besar pengaruh Gauss di banyak bidang
Ia tidak menciptakannya secara langsung, tetapi ia memang berkontribusi besar pada matematikanya
https://en.wikipedia.org/wiki/Monte_Carlo_(disambiguation)
Di bagian “Science and Technology” saja ada 8 entri
Saya menantikan lisensi apa yang akan dipakai saat dirilis
Saya ingin melihat game open-source yang menggunakan ini
Dalam sejarah ada banyak kasus yang sempat terlihat menjanjikan sebagai alternatif mesh segitiga, lalu menghilang setelah orang menyadari tidak ada cara efisien untuk menganimasikannya
Objek di dalam point cloud tidak punya metadata bawaan seperti “kursi, meja, orang”, sehingga interaksi apa pun menjadi sangat sulit
Bukan mustahil, tetapi saat ini belum praktis
Selain itu, ini juga tidak terlalu dioptimalkan untuk rendering real-time. Walaupun banyak titik sudah dipangkas, memakai mesh beresolusi rendah jauh lebih efisien
Ini tidak terlihat jauh lebih bagus daripada sesuatu seperti Cities: Skylines
Tidak ada zoom-in atau zoom-out, dan selalu hanya memperlihatkan frame yang sangat terbatas. Apakah ada sesuatu yang saya lewatkan?
Paper-nya berulang kali merujuk MatrixCity, dan https://city-super.github.io/matrixcity/ yang ditemukan orang lain di atas juga menyatakan bahwa itu adalah data sepenuhnya sintetis
Sepemahaman saya, itu diekstrak dari Unreal Engine
Saya sedang belajar dengan pygame, dan penasaran bagaimana cara memasukkan motion blur ke dalam game
Misalnya saat membuat Mario dengan pygame, saya ingin Mario terlihat buram ketika melompat
Mungkin saya bisa membuat versi Mario yang buram dengan mengambil rata-rata 9 piksel, tetapi saya tidak tahu apakah game lain biasanya juga melakukannya seperti itu
Banyak game juga terlihat sangat tajam tanpa motion blur, jadi saya penasaran apakah ini benar-benar dipakai
Di film, ini adalah elemen yang cukup besar, dan saya juga teringat bahwa untuk mendapatkan motion blur sinematik, kita perlu merekam pada 25fps
Dengan kata lain, hitung kecepatan tiap objek lalu render sebagai warna, kemudian pada tahap pascapemrosesan gunakan itu untuk menentukan intensitas dan arah efek blur
Mungkin perlu gerakan relatif terhadap kamera. Untuk Mario mungkin tidak, tetapi di FPS, saat kamera bergerak maju, kita biasanya ingin tepi layar menjadi buram
Materi terkait: https://city-super.github.io/octree-gs/
Ini pendekatan yang cukup canggih untuk merender adegan yang lebih besar dengan 3D Gaussians, jadi kalau kodenya dirilis, saya ingin segera mencobanya