'Gaussian splatting' sangat keren
(aras-p.info)- Makalah 3D Gaussian Splatting di SIGGRAPH 2023 adalah pendekatan yang membangun adegan berbasis foto menjadi jutaan Gaussian 3D dan merendernya secara real-time, serta implementasi eksperimen visualisasi Unity juga telah dirilis
- Adegan direpresentasikan sebagai kumpulan blob di ruang dengan posisi, rotasi, skala non-uniform, opasitas, dan koefisien harmonik sferis, alih-alih mesh, voxel, atau medan jarak
- Metode ini bukan NeRF, dan implementasi resminya juga tidak menggunakan pipeline rasterisasi fixed-function melainkan rendering perangkat lunak berbasis tile yang 100% dibangun dengan CUDA
- Implementasi Unity pada NVIDIA RTX 3080 Ti membutuhkan 23,8ms pada resolusi 1200x800, lebih lambat daripada 7,40ms milik viewer resmi, tetapi ditulis dalam HLSL umum sehingga juga berjalan di Mac
- Adegan bicycle memakan 1,5GB di disk, sekitar 6 juta blob, dan sekitar 250 byte per blob, sehingga bukan hanya performa, tetapi juga ukuran data dan memori GPU menjadi target perbaikan penting
Makalah SIGGRAPH 2023 dan eksperimen Unity
- Makalah SIGGRAPH 2023 3D Gaussian Splatting for Real-Time Radiance Field Rendering adalah karya Kerbl, Kopanas, Leimkühler, dan Drettakis
- Situs web makalah, kode sumber, dan dataset tersedia secara terbuka sehingga eksperimen dan reproduksi bisa dicoba langsung
- Eksperimen Unity berfokus pada visualisasi real-time dengan menerima file “model” Gaussian Splat yang sudah dihasilkan sebelumnya
- Implementasinya dirilis di aras-p/UnityGaussianSplatting, dan eksperimen tambahan akan menyusul kemudian
- Apakah ukuran data bisa dikurangi juga menjadi perhatian, dengan kemungkinan memanfaatkan eksperimen kompresi float sebelumnya
Dari apa Gaussian Splat tersusun
- Gaussian Splatting merepresentasikan adegan 3D sebagai jutaan partikel alih-alih mesh poligon, voxel, atau medan jarak
- Setiap partikel, yaitu “3D Gaussian”, memiliki informasi berikut
- Posisi dalam ruang 3D
- Rotasi
- Skala 3D non-uniform
- Opasitas
- Informasi warna
- Warna tidak direpresentasikan sebagai satu warna tunggal, melainkan sebagai koefisien Spherical Harmonics orde 3, sehingga dapat berubah sesuai arah pandang
- Saat dirender, partikel tidak digambar sebagai bola 3D yang memanjang, melainkan di-“splat” sebagai Gaussian 2D di ruang layar
- Intinya adalah bagaimana membuat representasi adegan berbasis foto dari kumpulan blob yang memiliki skala dan warna, lalu merendernya dengan cepat
Bukan NeRF, juga bukan rasterisasi fixed-function
- Gaussian Splatting bukan NeRF
- Disebutkan secara eksplisit bahwa tidak ada elemen “Neural”
- Alasan cepatnya juga bukan karena “menggunakan perangkat keras rasterisasi GPU”
- Implementasi resminya tidak memakai pipeline rasterisasi
- Semuanya diimplementasikan 100% dengan CUDA
- Performa implementasi resmi bukan berasal dari rasterisasi fixed-function, melainkan dari rendering perangkat lunak berbasis tile yang efisien untuk menangani jutaan partikel berskala
- Namun, rasterizer berbasis “perangkat lunak di atas GPU” semacam ini sendiri bukan konsep yang sepenuhnya baru
Keterkaitan dengan blok teknologi lama
- Gaussian Splatting sendiri terhubung dengan pekerjaan sekitar 2001~2002 seperti EWA Splatting
- Blob yang diskalakan dan memiliki orientasi ditempatkan di ruang, lalu dihitung bagaimana proyeksinya ke layar, kemudian bentuk Gaussian diproses di ruang layar
- Game tahun 1994 Ecstatica adalah contoh unik yang menggunakan renderer berbasis ellipsoid
- Spherical Harmonics telah digunakan selama ratusan tahun dalam fisika, dan di grafik komputer menjadi dikenal luas lewat karya Ravi Ramamoorthi dan Peter-Pike Sloan sekitar tahun 2000
- Ray tracing volume densities karya Kajiya & Von Herzen tahun 1984 mungkin merupakan contoh penggunaan awal di grafik komputer
- Ringkasan terkait dapat dilihat di halaman Patapom
- Point-Based Rendering juga merupakan bidang yang sudah lama ada
- Sistem partikel telah lama digunakan di VFX dan untuk merepresentasikan fenomena non-padat
- The Use of Points as a Display Primitive adalah karya dari tahun 1985
- Surfels adalah makalah tahun 2000
- Demoscene dan alat VFX real-time juga telah menggunakan pendekatan rendering nontradisional
- Agenda Circling Forth, Ceasefire (all falls down..), dan Number One / Another One dari Fairlight & CNCD adalah contohnya
- Notch adalah alat VFX real-time dengan kemampuan membuat, mensimulasikan, dan menampilkan objek berbasis titik dan blob
- fogleman/primitive adalah contoh alat tahun 2016 yang merepresentasikan gambar sebagai kumpulan bentuk primitif
- “Dreams” dari Media Molecule menggunakan renderer berbasis splat, dan versi rilisnya tampak sebagai gabungan beberapa teknik
- Presentasi “Learning from Failure” oleh Alex Evans dapat dilihat di SIGGRAPH 2015 dan Umbra Ignite 2015
- Rasterisasi berbasis tile untuk partikel sudah ada setidaknya sejak Holy smoke! Faster Particle Rendering using Direct Compute oleh Gareth Thomas pada 2014
- Dengan membagi layar menjadi tile dan memproses pekerjaan di dalam tile, lalu lintas memori bisa dikurangi
- Pendekatan seperti ini juga berkaitan dengan cara kerja banyak GPU mobile, dengan desain awal PowerVR berasal dari 1996, dan Pixel Planes 5 dari 1989
Status saat ini dari UnityGaussianSplatting
- aras-p/UnityGaussianSplatting adalah implementasi visualizer untuk model Gaussian Splat
- Status saat ini kurang lebih “berfungsi, tetapi belum cepat”
- Pada NVIDIA RTX 3080 Ti, saat merender adegan bicycle pada 1200x800, terdapat selisih performa yang besar
- Viewer resmi: 7,40ms, 135FPS
- Implementasi Unity: 23,8ms, 42FPS
- Sekitar 4 kali lebih lambat
- Metode sorting juga memengaruhi perbedaan performa
- Implementasi Unity menggunakan GPU bitonic sort yang relatif sederhana
- Implementasi resmi menggunakan CUDA radix sort berbasis algoritma OneSweep
- Pendekatan rasterisasinya juga berbeda
- Implementasi resmi menggunakan metode berbasis tile yang ditulis dengan CUDA
- Implementasi Unity merender setiap splat sebagai quad ruang layar melalui pipeline rasterisasi GPU umum
- Implementasi Unity memiliki keunggulan dari sisi portabilitas
- Kodenya ditulis dalam HLSL umum di dalam Unity sehingga juga berjalan di Mac
- Pada Apple M1 Max, adegan yang sama dirender dalam 108ms, 9FPS
- Memori GPU tampaknya saat ini lebih sedikit digunakan oleh implementasi Unity
- Viewer resmi: 4,8GB
- Implementasi Unity: 2,2GB
- Angka ini termasuk memori yang dipakai Unity Editor
Ukuran data dan penggunaan memori
- Diskusi tentang Gaussian Splatting mudah terfokus pada kualitas dan kecepatan rendering, tetapi ukuran data dan penggunaan memori juga merupakan masalah besar
- Adegan bicycle memakan 1,5GB di disk
- Adegan tersebut terdiri dari sekitar 6 juta blob
- Setiap blob menggunakan sekitar 250 byte
- Saat runtime, memori tambahan diperlukan untuk sorting, rendering berbasis tile, dan sebagainya
- Presentasi Dreams memiliki ide-ide yang bisa dijadikan referensi untuk mengurangi ukuran
1 komentar
Komentar Hacker News
Ungkapan bahwa ini menghindari “neural” meski memakai gradient descent dan differentiable rendering terdengar agak menyombong
Secara konsep, mirip dengan NeRF: mengoptimalkan representasi berbasis data yang memperkirakan variabel terkait adegan 3D dari gambar. Bedanya, NeRF memodelkan radiance field, yaitu keseluruhan fungsi perpindahan cahaya, sementara di sini tampaknya hanya memodelkan kondisi batas tempat cahaya mengenai permukaan
Karena targetnya berbeda, basis representasi yang lebih sederhana memang masuk akal dan hasilnya juga terlihat bagus, tetapi agak disayangkan jika menghindari neural network itu sendiri dibingkai seolah layak dipuji. Neural network dipakai bukan hanya karena tren; ia memang aproksimator fungsi yang kuat, dan cakupan struktur yang disebut “neural network” juga sangat luas
Ini hanya kesan dari nada pembuka tulisan blognya, jadi bisa saja berbeda dari isi paper-nya sendiri
Karena itu tampak lebih mudah dipahami dan lebih mudah diintegrasikan ke perangkat lunak 3D lain seperti editor atau renderer, dan sepertinya juga memungkinkan animasi. Aproksimator fungsi black box yang merepresentasikan seluruh adegan sekaligus tidak terasa skalabel atau elegan
Namun, meski neural network dapat memodelkan masalah dengan baik, sering kali kita tidak tahu bagaimana model yang sudah dilatih itu benar-benar bekerja, dan kebutuhan data serta pelatihan ulang berulang membatasi kemampuannya untuk menjadi solusi jangka panjang
Dalam kasus ini, saya ingin menafsirkannya secara positif sebagai lelucon yang ramah dari para penulis, bukan upaya memicu perang budaya kecil
Setiap piksel rendering merupakan jumlah berbobot dari kontribusi Gaussian yang bergantung pada sudut pandang dan tanpa batas, jadi pernyataan bahwa NeRF memodelkan radiance field sementara teknik ini hanya memodelkan kondisi batas tidaklah tepat
Jika mempertimbangkan bahwa NeRF telah memakai representasi spherical harmonics berperingkat rendah pada domain arah, ini hampir seperti 3D+α; maka muncul pertanyaan mengapa memilih neural network untuk merekonstruksi fungsi berdimensi serendah itu
Saat inferensi, neural network harus disampling berulang sepanjang ray pandang untuk setiap piksel, padahal representasi terkompresi dari light field adalah masalah yang sudah lama ditangani dalam grafika, sehingga bagian ini terasa cukup janggal
Setelah itu, Plenoxels menghapus “Ne” dari NeRF dan meningkatkan performa pelatihan serta inferensi secara besar-besaran, sementara Instant NeRF dari Nvidia menutup sebagian kekurangan dengan menginterpolasikan embedding input yang canggih ke neural network kecil: https://nvlabs.github.io/instant-ngp/assets/mueller2022insta...
Dalam rekayasa grafika, neural network banyak digunakan terutama untuk rekonstruksi data sparse, khususnya denoising, dan ini wajar karena merupakan masalah berdimensi tinggi. Meski begitu, kasus yang mengungguli algoritma buatan tangan masih jarang, sementara penggunaan neural network kecil untuk kompresi tampak punya masa depan
Dalam grafika ada banyak aproksimasi fungsi, sehingga neural network punya tempat, tetapi fungsi yang ditangani umumnya lebih dapat dipahami dan dikendalikan, berbeda dari ranah seperti pemahaman bahasa alami yang hampir mustahil diselesaikan dengan algoritma buatan tangan
Banyak percakapan berakhir dengan AI=buruk, CRYPTO=buruk; bukan berarti pendapat yang berlawanan pasti salah, tetapi masalahnya adalah jika kita menetapkan kesimpulan lebih dulu lalu berhenti berpikir, tidak ada cara untuk menyadari apakah pemikiran kita sepenuhnya keliru
Benar-benar karya yang keren
Artikel itu menyebut point-based rendering dan sistem partikel, dan di game-game terbaru rasanya ada pergeseran halus ke gaya partikel baru yang lebih berorientasi pada titik daripada potongan tekstur, tetapi tetap berperilaku seperti sistem fisika
Contohnya ada Hogwarts: https://www.gamespot.com/a/uploads/original/1816/18167535/40..., Forspoken: https://oyster.ignimgs.com/mediawiki/apis.ign.com/project-at..., Starfield: https://dotesports.com/wp-content/uploads/2023/08/temple-loc..., AC6, FF16
Kesamaannya: terlihat seperti partikel titik transparan berwarna yang memiliki fisika, dan terutama di konsol tampaknya dipakai untuk menghasilkan efek murah di GPU tanpa membebani CPU. Saya penasaran kalau ada yang tahu dari sisi pengembangan game
Tanpa simulasi fluida, sistem partikel berbasis titik hanya terlihat seperti kembang api. Tahap berikutnya adalah setiap partikel memiliki fisika sendiri seperti momentum atau angin dan dirender sebagai billboard tekstur kecil; sampai relatif baru ini dipakai untuk menggambarkan ledakan atau asap
Sekarang performa mesin dan algoritma fisika sudah membaik, sehingga simulasi fluida tempat partikel saling berinteraksi bisa dijalankan secara real-time, dan efek yang terlihat sekarang tampaknya mengarah ke sana
Dalam dunia game 3D, menangani hanya primitif 3D yang benar-benar 3D punya banyak keunggulan secara konseptual dan struktural, dan point sprite bisa diperlakukan seperti objek 3D yang nyaris sangat kecil tak terbatas
Sebaliknya, jika memasukkan sprite 2D ke adegan 3D, ketika ada transparansi parsial, objek harus diurutkan dari belakang ke depan, tidak cocok dengan z-buffer, berbenturan dengan urutan batching yang dioptimalkan untuk GPU, mudah menembus permukaan 3D, dan mudah memperlihatkan bahwa ia sebenarnya 2D
Untuk mengatasi masalah ini, berbagai kompromi telah menumpuk, seperti screen-door transparency, shader yang mengubah cara penulisan z-buffer, alpha test, alpha-to-coverage, dan sebagainya
Di VR, rendering berbasis gambar 2D dalam adegan 3D terlihat lebih mencolok buruknya dibanding di satu layar, dan fakta bahwa itu billboard datar jauh lebih mudah terlihat. Menggabungkan semua alasan ini, cukup masuk akal mengapa orang ingin menjauh dari efek sprite tekstur 2D di adegan 3D
Karena tren di sisi AI, GPU juga tampaknya bergerak ke arah semacam “GPU dengan set instruksi yang diperkecil di dalam GPU” lewat RT core, tensor core, dan semacamnya, dan itu tampaknya agak terkait
Beberapa tahun lalu pihak NVIDIA menulis kernel yang memindahkan kernel SE(3) ke tensor core, dan saya tidak terkejut kalau bagian spherical harmonics dari Gaussian splatting juga bisa sebagian dipindahkan saat kompresi dan eksekusi: https://developer.nvidia.com/blog/accelerating-se3-transform...
Gaussian splatting selalu memiliki area dukungan di ruang 3D, jadi sepertinya cukup efisien, dan meskipun ditransformasikan secara kasar dan cepat, hasil akhirnya bisa tetap cukup bagus
Pusaran indah dari titik-titik bercahaya juga bisa dibuat relatif mudah. Unreal Engine sepertinya punya hal serupa, tetapi saya tidak punya banyak pengalaman langsung dengannya
Saya tidak menganggapnya berasal dari sana, tetapi tonggak pertama yang bisa saya tunjuk adalah demo itu
Saya benar-benar antusias ketika paper Siggraph itu pertama kali keluar
Selama kurang lebih 10 tahun terakhir, saya memotret kamar-kamar yang pernah saya tinggali dari ratusan sudut dengan niat suatu hari merekonstruksinya dalam 3D, dan Gaussian splatting adalah teknik pertama yang rasanya bisa mereproduksinya hingga terasa nyaris seperti nyata
Kalau alat-alatnya sudah lebih matang, saya sangat menantikan untuk kembali menjelajahi kamar-kamar lama itu dan tenggelam dalam nostalgia
Ini mungkin pertanyaan bodoh karena saya kurang paham bidang ini, tapi video-video seperti ini terlihat sangat keren
Sejauh yang saya pahami, scene atau radiance field selalu statis dan pencahayaannya sudah di-bake; saya penasaran apakah ada kemungkinan berkembang ke arah yang memungkinkan pencahayaan diubah secara dinamis dan juga mendukung gerakan
Dalam radiance field tidak ada konsep seperti emisi, pantulan, atau penyerapan cahaya; semuanya diratakan menjadi satu nilai “cahaya yang ditransmisikan”. Dalam arti itu, radiance field lebih dekat ke foto 3D
Untuk mengubahnya, perlu memperkirakan posisi sumber cahaya, permukaan, material, dan lain-lain lewat inverse rendering atau fotogrametri, lalu kembali memakai path tracing tradisional
Arah lainnya bukan animasi melainkan video: bisa saja terus menangkap radiance field seiring waktu dan mengompresi kemiripan antar-frame untuk mendapatkan konsistensi temporal
Beberapa di antaranya juga bisa disambung untuk membuat animasi: https://twitter.com/8Infinite8/status/1699460316529090568
Untuk relighting, ada banyak varian NeRF yang mendukungnya, jadi mengoptimalkan parameter material dari splat juga tampaknya mungkin
Misalnya dalam scene dalam ruangan, jika meja membuat bayangan gelap di lantai, NeRF belum memahami sumber cahaya dan bayangan, sehingga tidak tahu apakah lantainya hitam, apakah lantai putih tertutup bayangan meja, atau apakah ada Stanford bunny biru tersembunyi di dalam bayangan
Rig pemindaian 3D untuk menangkap objek kecil seperti wajah manusia menyelesaikannya dengan memanipulasi pencahayaan dan mengambil sampel BRDF secara langsung. Jika pencahayaan tidak bisa dimanipulasi, BRDF mungkin bisa diperkirakan, tetapi ada batasnya
Menambahkan animasi kembali mungkin mudah, tetapi untuk menangkap animasi itu sendiri diperlukan banyak kamera, atau karena objeknya manusia, harus bergantung pada estimasi seperti jaringan saraf yang membayangkan dan mengisi sisi sebaliknya
Intel beberapa tahun lalu pernah punya proyek yang menangkap scene dengan banyak kamera dan memungkinkan posisi kamera diubah pada tahap pascaproses; tampaknya ditujukan untuk siaran football Amerika, tetapi saya belum mendengar kabar peluncuran nyatanya. Dibutuhkan banyak kamera ala Matrix
Dengan kata lain, membuat data dianimasikan berdasarkan waktu. Kebutuhan datanya bisa besar, tetapi dengan metode interpolasi mungkin tidak terlalu buruk
Jika scene statis berukuran 2GB, perkiraan kasar berdasarkan waktu mungkin bisa dilakukan di bawah 16GB, dan dapat dirender di GPU modern. Setelah itu tinggal menunggu performa kelas H100 menjadi perangkat konsumen sambil melakukan optimasi selama beberapa tahun
Selalu menyenangkan ketika sains melampaui ekspektasi fiksi ilmiah
Dalam kasus ini, saya langsung teringat konsep Braindance dari Cyberpunk 2077, yaitu fitur untuk menjelajahi memori visual orang lain dalam batas apa yang orang itu persepsikan di dalam scene
Jika kamera dipindahkan ke tempat berbeda dari sudut pandang asli, bidang pandang runtuh seperti gumpalan piksel tiga dimensi; ini mirip dengan konsep blob di sini, tetapi mengejutkannya tampil jauh kurang matang dibanding makalah ini
https://steelseries.com/blog/how-to-braindance-cyberpunk-207...
Splatting dalam volume rendering adalah teknik yang sudah cukup lama. Ada makalah Juli 1991 dari Westover, Lee Alan, “SPLATTING: A Parallel, Feed-Forward Volume Rendering Algorithm”
Yang kedua tampaknya tidak sedang disembunyikan siapa pun, sedangkan yang pertama tampaknya tidak tepat
Saya tidak tahu dari mana intuisi itu datang, tetapi saat itu saya tinggal dekat Boston dan punya anak-anak kecil
Saya menantikan implementasi WebGPU native pertama yang dioptimalkan untuk rendering 3DGS
Saya juga penasaran bagaimana data scene akan dikompresi dan didekompresi secara efisien
Saya meninggalkan beberapa catatan tentang pertanyaan ini di thread Zulip: https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/Gau...
Baru-baru ini saya melihat video yang menunjukkan cara menggunakan Gaussian splatting: Getting Started With 3D Gaussian Splats for Windows (Beginner Guide) - https://www.youtube.com/watch?v=UXtuigy_wYc
Penasaran dengan perkembangan terbaru structure from motion
Saat ada video dari suatu ruang, ingin tahu bagaimana sekarang video itu benar-benar diubah menjadi adegan 3D
Itulah masukan untuk proses rekonstruksi adegan yang dijelaskan dalam makalah ini
Sejauh yang diketahui, pendekatan dasar SfM tidak banyak berubah selama sekitar 10 tahun terakhir, dan dapat diringkas sebagai ekstraksi fitur gambar seperti SIFT, pencocokan heuristik, bundle adjustment, serta penghapusan outlier
Fotogrametri umum adalah jawabannya, dan minat serta kepraktisan pendekatan ala NeRF juga makin meningkat
Namun cukup mengejutkan bahwa relasi spasial tambahan yang bisa disimpulkan hanya dari fakta bahwa itu adalah video tidak lebih banyak mendapat perhatian. Sepertinya batasan bahwa kamera hanya dapat bergerak dengan cara tertentu antarbingkai bisa dipakai untuk estimasi pose kamera
Ada gagasan menjalankan marching cubes di atas Gaussian yang di-splat untuk mengekstrak mesh, tetapi sepertinya belum pernah melihat contoh yang benar-benar dilakukan
Pada akhir 90-an, pernah merender isosurface voxel dengan blob
Dari seluruh array voxel 3D, voxel permukaan dipindai, normal dihitung dari gradien densitas lokal lalu dikuantisasi menjadi salah satu dari 240 pilihan
Setelah itu, tabel vektor perpindahan digunakan untuk membuat rantai voxel permukaan, dan sebagian besar voxel hanya 2 byte: indeks perpindahan dari voxel sebelumnya dan indeks vektor normal
Pencahayaan untuk 240 vektor normal dihitung lebih dulu dan dimasukkan ke lookup table, sehingga perangkat lunak bisa menggambar lingkaran-lingkaran kecil berwarna ke z-buffer dengan sangat cepat
Kekecewaan besar saat itu adalah tidak bisa memakai perspektif. Karena vektor perpindahan diubah ke ruang layar pada setiap frame, prosesnya menjadi menggambar blob, memberi offset, mengambil warna, lalu menggambar lagi. Ada satu nilai perpindahan untuk menandai akhir rantai dan posisi absolut berikutnya yang disimpan, tetapi sebagian besar voxel hanya 2 byte