Teknologi UE5 Nanite di WebGPU
(github.com/Scthe)Nanite WebGPU
Ringkasan
- Nanite WebGPU adalah proyek yang mengimplementasikan Nanite di browser web menggunakan WebGPU.
- Hanya dapat digunakan di Chrome.
- Mencakup hierarki LOD Meshlet, software rasterizer, billboard impostor, dan lainnya.
- Mendukung frustum culling dan occlusion culling.
- Mendukung tekstur dan normal vertex.
- Juga berjalan secara offline menggunakan Deno.
Fitur
-
Hierarki LOD Meshlet
- Melakukan prapemrosesan mesh di browser menggunakan WebAssembly.
- Juga menyediakan fitur ekspor file.
-
Software rasterizer
- WebGPU tidak mendukung
atomic<u64>. - Mengompresi depth (
u16) dan normal yang di-encode dengan octahedron (2 * u8) menjadi 32-bit.
- WebGPU tidak mendukung
-
Billboard impostor
- Menampilkan hasil dengan mencampurkan 12 gambar berdasarkan posisi kamera.
- Tidak menangani tampilan atas dan bawah.
-
Culling
- Per instance: frustum culling dan occlusion culling.
- Per Meshlet: frustum culling dan occlusion culling.
- Per segitiga: hardware backface culling dan z-buffer.
-
Dapat beralih antara rendering berbasis GPU dan implementasi CPU.
-
Mendukung model bertekstur dan beragam objek secara bersamaan.
-
Parameter dapat diubah saat runtime.
-
Menyediakan informasi statistik: memori, geometri, jumlah Meshlet, jumlah segitiga, dll.
-
Mendukung format file kustom.
-
Mendukung kuantisasi posisi vertex dan normal yang di-encode dengan octahedron.
-
Menangani perubahan ukuran jendela.
-
Juga berjalan secara offline menggunakan Deno.
-
Kode WebGPU dan WGSL dapat disalin ke proyek.
Tujuan
- Kesederhanaan: dimulai dari file OBJ dan menangani seluruh proses di dalam aplikasi.
- Eksperimen: dapat mengubah berbagai pengaturan untuk menguji performa.
Adegan demo
- Jinx: 120*120 instance, 640m segitiga.
- Lucy dan naga: 70*70 instance, 1.7b segitiga.
- Lucy: 110*110 instance, 1.2b segitiga.
- Naga: 70*70 instance, 1.2b segitiga.
- Kelinci: 500*500 instance, 1.2b segitiga.
- Pratinjau impostor: peningkatan ukuran tekstur impostor.
Cara penggunaan
- Gunakan tombol [W, S, A, D] untuk bergerak, dan [Z, SPACEBAR] untuk naik turun.
- Bug dapat diatasi dengan menyalakan atau mematikan opsi culling.
- Performa dapat diukur menggunakan tombol Profile.
FAQ
-
Perbedaan utama dengan Nanite di UE5
- Metrik galat penyederhanaannya sederhana.
- Penyederhanaan Meshlet sederhana.
- Tidak ada occlusion culling 2 tahap.
- Tidak ada work queue di shader.
- Tidak ada penghapusan dan streaming LOD yang tidak digunakan dari VRAM.
- Tidak ada visibility buffer.
- Tidak ada shadow/multiview bawaan.
- Tidak dapat menangani banyak objek berbeda.
- Tidak ada GPU profiler.
-
Apa arti miliaran segitiga
- Mesh yang padat dapat berdampak negatif pada performa.
- Jumlah instance yang besar mengonsumsi banyak VRAM.
- Susunan adegan memengaruhi performa.
-
Hal mengejutkan tentang Nanite
- Tujuan DAG bukan untuk menggunakan lebih sedikit segitiga pada objek yang jauh.
- Lebih banyak waktu dihabiskan untuk culling dan pekerjaan Meshlet daripada Nanite itu sendiri.
- Hierarki LOD Meshlet bekerja dengan mudah.
- Jika mesh tidak disederhanakan dengan bersih, performa akan menurun.
-
Penyederhanaan mesh
- Banyak masalah dapat muncul selama proses penyederhanaan.
- UE5 menggunakan kode penyederhanaan mesh miliknya sendiri.
-
Metrik galat
- Memilih Meshlet yang tepat adalah inti dari Nanite.
-
Haruskah menulis implementasi Nanite sendiri?
- Menggunakan UE5 adalah cara yang paling sederhana.
- Untuk tujuan pembelajaran, implementasi sendiri layak dicoba.
-
Nilai dari Meshlet backface cone culling
- Efektif pada mesh yang padat.
- Bisa tumpang tindih dengan occlusion culling.
- Panggilan WebAssembly dapat menyebabkan penurunan performa.
Ringkasan GN⁺
- Nanite WebGPU adalah proyek menarik yang mengimplementasikan Nanite di browser web.
- Performa dioptimalkan melalui berbagai teknik culling dan software rasterizer.
- Dibandingkan UE5, ada perbedaan pada penyederhanaan dan metrik galat.
- Untuk tujuan pembelajaran, implementasi sendiri layak dicoba, tetapi untuk proyek nyata, menggunakan UE5 mungkin lebih baik.
- Proyek dengan fungsi serupa adalah Nanite milik Unreal Engine 5.
1 komentar
Komentar Hacker News
Implementasi pihak ketiga dari Nanite menarik
Bevy juga memiliki Virtual Geometry yang mengimplementasikan ide Nanite
Tidak baik jika demo menentukan kompatibilitas dengan menggunakan string user-agent
WebGPU tidak berfungsi di iPhone 12 Pro Max
Diperlukan kompromi untuk mengatasi ketiadaan atomic 64-bit di WebGPU
Nama dan deskripsinya membingungkan dan berpotensi melanggar merek dagang
Perbandingan sistem LOD di engine lain
Membaca diskusi menarik di forum three.js tentang implementasi virtual geometry
Pertanyaan tentang klaim bahwa software rasterizer lebih cepat daripada hardware rasterizer
Terjadi error WebGPU saat menjalankan demo jinx di M2 Max