Saat merender dua permukaan co-planar yang tumpang tindih, masalah umum adalah "z-fighting", di mana penyaji tidak dapat memutuskan yang mana dari dua permukaan yang lebih dekat dengan kamera, memberikan artefak visual di bidang tumpang tindih.
Solusi standar untuk ini adalah untuk memberikan permukaan sedikit offset ketika merancang model. Apakah ada solusi yang lain?
Jawaban:
Jika permukaannya persis co-planer, nasib Anda tergantung pada para dewa FPU; Anda kemungkinan besar akan melawan Z. Jika segitiga identik dan Anda melakukan matematika yang sama persis untuk masing-masing, Anda akan berakhir dengan nilai Z yang sama untuk keduanya. Tetapi sekali lagi, ini hanya akan terjadi jika operasi matematika Anda identik untuk keduanya. (Karena, secara umum, operasi FPU tidak komutatif)
Salah satu solusi yang mungkin adalah tidak menggunakan buffer-Z sama sekali. Alih-alih, Anda dapat menggunakan Algoritma Painter . Memang, ini hadir dengan semua masalah algoritma pelukis juga. Tapi, itu akan menyelesaikan pertempuran Z.
Dalam contoh kasus Screen Space Decals (SSDs) Anda, solusi umum adalah dengan menggunakan offset, alias kubus tipis sederhana. Lihat presentasi Warhammer 40k tentang SSD untuk referensi. Atau posting Bart Wronski yang membahas beberapa masalah lain dengan decals, tetapi juga tautan ke beberapa presentasi lain tentang SSD
sumber
Inilah cara saya memecahkan ini di masa lalu:
Catatan, objek harus digambar secara berurutan agar ini berfungsi.
sumber
Bergantung pada renderer Anda, Anda bisa membuat permukaan lebih "fuzzy" menerapkan offset kecil dalam kedalaman multisampling menggunakan algoritma seperti noise. Ini akan menghasilkan semacam efek pencampuran untuk permukaan dalam jarak dekat. Untuk yang saya tahu pengaturan kedalaman per-sampel dalam shader fragmen cukup baru di OpenGL dan kemudian hanya sebagai ekstensi.
OpenGL memiliki PolygonOffset tetapi membutuhkan pengetahuan sebelumnya bahwa Anda akan membuat sesuatu coplanar. Meskipun tidak layak untuk permukaan dalam model tunggal, itu bisa berfungsi dengan baik misalnya ketika merender jalan yang dilapis pada sebidang tanah.
sumber