Ke grafik adegan atau tidak ke grafik adegan?


10

Saya telah bergumul dengan keputusan tentang apakah akan menerapkan grafik adegan dalam permainan saya atau tidak. Saya memiliki beberapa kasus penggunaan yang memerlukan alat seperti itu, tetapi saya belum dapat melewati beberapa detail implementasi.

Beberapa latar belakang: Saya sedang menulis game jenis penembak ruang yang ditargetkan pada platform seluler (Android, terutama) dan kode saya hampir seluruhnya C ++. Saya tidak menggunakan middleware apa pun; mesin rendering dan fisika khususnya adalah kreasi saya sendiri. Mesin fisika saya memperbarui lokasi objek berdasarkan kekuatan dan impuls. Saya belum memiliki sistem animasi tetapi dapat mengunjungi ini di beberapa titik (yang mungkin atau mungkin tidak ada hubungannya dengan diskusi ini).

Pertama, saya akan menjelaskan kasus penggunaan yang baik. Saya ingin memiliki bos yang terdiri dari beberapa bagian terpisah, yang masing-masing dapat rusak / dihancurkan secara mandiri. Sebagai contoh, saya mungkin memiliki bos yang memiliki lengan yang dapat menerima kerusakan secara independen dari entitas bos lainnya. Ketika lengan dihancurkan, efek partikel api yang terletak di bahu bos bisa menunjukkan bahwa lengan itu sekarang hancur.

Karena itu, saya telah memutuskan untuk mencoba memecahkan masalah seperti itu dengan kendala pada mesin fisika saya untuk menyatukan benda-benda majemuk tersebut. Salah satu kendala tersebut memberikan 0 derajat kebebasan dan pada dasarnya adalah matriks transformasi. Ini benar-benar upaya untuk menghindari masalah yang pada akhirnya membuat saya mematikan grafik adegan, yang dijelaskan di bawah ini.

Alasan utama saya berpaling dari penggunaan grafik adegan adalah karena saya tidak bisa menemukan cara yang efisien untuk menjaga objek bersarang (objek yang mewarisi transformasi dari orang tua mereka) di dunia fisika dan adegan rendering. Dunia fisika membutuhkan objek untuk berada di ruang-dunia (atau setidaknya ruang yang sama) sedangkan adegan rendering membutuhkan objek di ruang-induk. Melacak lokasi di kedua ruang mungkin membantu (dan tidak terhindarkan) tetapi menimbulkan kekhawatirannya sendiri, tidak sedikit yang terkait dengan kinerja.

Namun, mengingat kasus penggunaan seperti yang dijelaskan di atas, saya pikir bisa 'bekerja' di ruang induk akan menjadi sangat penting, dan mencoba untuk memaksa mesin fisika saya untuk mempertahankan hubungan ini melalui penggunaan kendala akan menjadi masalah.

Mengingat use case dan kesulitan yang dijelaskan di atas, haruskah saya menggunakan struktur grafik untuk meneruskan transformasi dari satu objek ke objek lainnya? Jika demikian, bagaimana seharusnya mesin fisika saya menghitung lokasi baru dan melakukan tes persimpangan untuk objek di ruang yang berbeda?

Jawaban:


11

Sudahkah Anda benar-benar mencoba grafik hierarkis dan mengukur kinerjanya?

Sudahkah Anda menyelidiki mesin fisika sederhana untuk melihat bagaimana mereka menangani masalah, bahkan mesin 2D yang memiliki keterkaitan antara objek akan membantu memandu Anda ke arah yang terbukti.

Saya tidak akan mencoba menjalankan fisika Anda di beberapa ruang, kompleksitasnya akan menakutkan. Jalankan fisika di ruang dunia dan tambahkan fungsionalitas untuk membuat transformasi hierarki Anda untuk memindahkan objek ruang lokal ke ruang dunia dan kembali. Batasan Anda, tentu saja, harus berada di ruang lokal relatif terhadap objek induk.

Sebagai catatan samping, bahkan array murni objek adalah "grafik adegan", hanya yang sangat sederhana. Jangan takut untuk mengatur data dengan cara memecahkan masalah dan terutama tidak memutuskan bahwa kinerja organisasi data itu adalah faktor tanpa mengukur kinerja itu.


Saya mencoba untuk bekerja bukan karena kinerja tetapi karena waktu. Ketika Anda indie, terjebak pada sesuatu untuk waktu yang lama dapat merusak kemajuan dan pola pikir. Saya melihat melalui mesin Spring RTS sedikit tetapi tidak menemukan apa yang saya cari. Jadi jika saya memberikan grafik, di mesin fisika saya perlu memperbarui lokasi objek di ruang lokal, lalu menghitung orientasi ruang dunia dan tetap menggunakannya untuk digunakan dengan deteksi tabrakan. Anda menyebutkan "dan kembali," meskipun - yang membutuhkan menghitung matriks terbalik, kan? Kapan saya harus melakukan itu?
notlesh

Saya telah berpikir bahwa jika waktu adalah masalah maka menggunakan perpustakaan fisika akan lebih cepat, untuk menghemat waktu debugging. Jika Anda hanya melakukan 2D maka box2d.org mungkin? Saya menyarankan "dan kembali" karena itu hanya kebalikan, seperti yang Anda duga. Pada titik tertentu, Anda mungkin ingin mengambil sesuatu di ruang dunia dan menempelkannya ke model lain, yang membutuhkannya.
Patrick Hughes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.