Saya bermain dengan XNA untuk proyek game saya sendiri, saya sebelumnya pernah melihat OpenGL dan bekerja sedikit dengan Ogre, jadi saya mencoba untuk mendapatkan konsep yang sama bekerja pada XNA.
Secara khusus saya mencoba untuk menambahkan ke XNA seorang manajer adegan untuk menangani transformasi hierarkis, frustum (mungkin bahkan oklusi) pemusnahan dan penyortiran objek transparansi.
Rencana saya adalah membangun pengelola adegan pohon untuk menangani transformasi dan pencahayaan hierarkis, dan kemudian menggunakan Oktree untuk pemusnahan dan pemilahan objek. Masalahnya adalah bagaimana melakukan penyortiran geometri untuk mendukung transparansi dengan benar. Saya tahu bahwa penyortiran sangat mahal jika dilakukan berdasarkan per-poligon, sangat mahal sehingga bahkan tidak dikelola oleh Ogre. Tapi gambar dari Ogre masih terlihat benar.
Adakah ide tentang bagaimana melakukannya dan struktur data mana yang digunakan dan kemampuan mereka? Saya tahu orang-orang di sekitarnya menggunakan:
- Oktaf
- Kd-tree (seseorang di forum GameDev mengatakan bahwa ini jauh lebih baik daripada Octrees)
- BSP (yang seharusnya menangani pemesanan per-poligon tetapi sangat mahal)
- BVH (tetapi hanya untuk pemusnahan frustum dan oklusi)
Terima kasih
Tunnuz
McCranky membahas dengan luar biasa semua struktur data yang Anda sebutkan, namun saya melihat Anda belum mempertimbangkan R-Trees. Tubuh pengetahuan tentang struktur itu sangat besar, dan mereka sangat cocok untuk pertanyaan rentang spasial (sebagian besar pekerjaan telah dilakukan oleh para ahli teori dan praktisi basis data) dalam 30 tahun terakhir. Baru-baru ini Sebastian Sylvain dari Rare telah memberikan kursus tentang GDC tentang mengapa mereka bekerja untuk gim juga (khususnya pada konsol dengan prosesor berurutan). Anda dapat mempelajari lebih lanjut dari pdf-nya: http://www.gdcvault.com/play/1012452/R-Trees-Adapting-out-of
Implementasi yang naif dan sederhana cukup mudah, dan struktur dasar memberi Anda banyak ruang untuk perbaikan (manajemen heuristik pemisahan yang lebih baik, pengambilan peluang awal, pencarian paralel, dll).
sumber
Jawabannya sangat tergantung pada jumlah model yang Anda rencanakan untuk digunakan. Saya belum benar-benar bekerja dengan hal-hal semacam ini untuk XNA, tetapi jika Anda menggunakan AABB untuk tes dan tidak memiliki terlalu banyak model Anda mungkin cukup baik dengan uji brute force. Mungkin bahkan membuangnya di utas. Saya tidak yakin bagaimana / jika ada optimasi SSE / VMX yang dapat digunakan untuk C # tetapi jika Anda berhasil mendapatkan AABB secara linear dalam memori (sehingga Anda tidak mendapatkan cache-misses untuk CPU), Anda harus dapat untuk mendorong melalui sejumlah besar tes dalam waktu yang sangat sedikit.
sumber