Grafik adegan berisi simpul game yang mewakili objek game. Pada pandangan pertama, mungkin tampak praktis untuk menggunakan Grafik Scene sebagai wadah fisik untuk dalam objek game, daripada std :: vector <> misalnya.
Pertanyaan saya adalah, apakah praktis untuk menggunakan Scene Graph untuk memuat objek-objek game , atau haruskah itu digunakan hanya untuk mendefinisikan objek-objek adegan / simpul-simpul, sementara menyimpan objek-objek yang disimpan dalam wadah yang terpisah, seperti std :: vector <>?
architecture
scene-graph
Bunkai.Satori
sumber
sumber
Jawaban:
Memutuskan jenis manajemen adegan yang akan digunakan sangat bergantung pada jenis logika apa yang Anda coba jalankan. Pertimbangkan berbagai konsumen adegan Anda:
Memberikan Konsumen
Perender mungkin hanya ingin tahu apa yang saat ini terlihat oleh pengguna pada titik tertentu. Ia menginginkan hierarki volume yang terikat untuk pemusnahan cepat ( artikel wiki BVH) sehingga dapat mengetahui bahwa kursi di dalam kapal tidak perlu ditarik karena batas-batas kapal berada di luar pandangan frustum. Ini mungkin tertanam ke dalam sebuah octree .
Mungkin juga ingin memiliki gagasan bahwa kursi berada di punggungnya di dalam kapal, dan bahwa perahu itu berguling-guling di atas beberapa ombak ketika akhirnya terlihat. Dengan cara itu untuk menemukan koordinat dunia akhir dari simpul kursi, ia dapat menggabungkan transformasi kursi dan kapal dan dilakukan dengannya (ini juga membuat pekerjaan Anda sebagai programmer lebih mudah).
Namun cara lain untuk melihat masalah ini adalah bahwa penyaji mungkin menjalankan kartu yang bagus, dan akhirnya hanya ingin setumpuk segitiga diurutkan sehingga meminimalkan tekstur, shader, material, pencahayaan, dan mengubah perubahan keadaan. Yang terakhir ini mungkin akan membantu Anda lebih dari BVH, berdasarkan kinerja.
Pengguna Logika Game
Logika gim mungkin hanya menginginkan daftar datar hal-hal yang dapat saling berbicara dengan sistem pesan, sehingga std :: vector mungkin baik-baik saja.
Gim ini mungkin juga menginginkan cara untuk melacak siapa yang paling dekat dengan apa, jadi semacam informasi [tetangga terdekat] [3] mungkin bisa membantu dalam kasus itu. Ini dapat disediakan oleh BVH juga, tetapi harus naik turun grafik mungkin mengganggu.
Gim ini bahkan mungkin hanya ingin tahu bahwa ketika bergerak A, item A harus bergerak juga ... dalam hal ini kita kembali ke semacam hierarki transformasi.
Konsumen Fisika
Fisika gim Anda mungkin ingin memiliki [representasi khusus] [4] ruang dalam ruangan untuk deteksi tabrakan yang sangat cepat. Bergantian mungkin menggunakan semacam octree atau [hashing spasial] [5] untuk secara efisien menemukan hal-hal yang mungkin bertabrakan.
Tidak ada struktur data fisika di atas yang benar-benar terlihat seperti "grafik adegan" dalam arti Java3D.
Konsumen Audio
Mesin audio hanya ingin geometri, mungkin set yang berpotensi terlihat (terdengar), atau semacam hierarki volume yang terikat untuk menghitung pelemahan dan penyebaran suara. Sekali lagi, tidak benar-benar semacam grafik adegan, meskipun mungkin grafik geometri dalam adegan Anda.
Pada akhirnya ... ... itu benar-benar hanya tergantung pada kebutuhan aplikasi Anda. Saya sarankan menggunakan daftar datar untuk memulai, dan melihat di mana masalah Anda muncul. Anda bahkan dapat mencoba daftar datar dengan hierarki transformasi, karena itu mungkin satu jenis naskah yang berguna untuk alasan selain efisiensi.
Semoga berhasil!
sumber
Ada satu alasan bagus untuk tidak menggunakan grafik adegan sebagai wadah untuk objek game, dan itu adalah instancing. Jika Anda ingin menggunakan kembali beberapa sumber daya, jauh lebih masuk akal untuk hanya merujuk ke sumber daya dari grafik adegan Anda beberapa kali daripada memiliki beberapa salinan yang sebenarnya.
sumber
Memisahkan objectmodel dan viewmodel Anda (scenegraph) biasanya merupakan ide yang bagus.
Lihat artikel ini pada subjek.
Di antara banyak hal ini akan memungkinkan untuk penggunaan objek kolam. Yang mungkin penting untuk manajemen memori yang efisien.
sumber