Saya sedang mengembangkan game 2D berbasis sprite untuk platform mobile dan saya menggunakan OpenGL (well, sebenarnya Irrlicht) untuk membuat grafik. Pertama saya mengimplementasikan rendering sprite dengan cara sederhana: setiap objek game dirender sebagai quad dengan panggilan draw GPU-nya sendiri, artinya jika saya memiliki 200 objek game, saya membuat 200 draw draw per frame. Tentu saja ini adalah pilihan yang buruk dan permainan saya benar-benar terikat CPU karena ada sedikit overhead CPU yang dikaitkan dalam setiap panggilan draw GPU. GPU sebagian besar tidak digunakan.
Sekarang, saya pikir saya bisa meningkatkan kinerja dengan mengumpulkan benda-benda ke dalam kelompok besar dan membuat kelompok ini hanya dengan beberapa panggilan menarik. Saya menerapkan batching (sehingga setiap objek game yang berbagi tekstur yang sama diberikan dalam batch yang sama) dan berpikir bahwa masalah saya hilang ... hanya untuk mengetahui bahwa frame rate saya bahkan lebih rendah dari sebelumnya.
Mengapa? Yah, saya punya 200 (atau lebih) objek game, dan mereka diperbarui 60 kali per detik. Setiap frame saya harus menghitung ulang posisi baru (terjemahan dan rotasi) untuk simpul dalam CPU (GPU pada platform seluler tidak mendukung instancing jadi saya tidak bisa melakukannya di sana), dan melakukan perhitungan ini 48000 per detik (200 * 60 * 4 sejak setiap sprite memiliki 4 simpul) sepertinya terlalu lambat.
Apa yang bisa saya lakukan untuk meningkatkan kinerja? Semua objek game bergerak / berputar (hampir) setiap frame jadi saya benar-benar harus menghitung ulang posisi vertex. Hanya optimasi yang dapat saya pikirkan adalah tabel pencarian untuk rotasi sehingga saya tidak perlu menghitungnya. Apakah sprite titik membantu? Adakah hack jahat? Ada yang lain?
Terima kasih.