Saya membuat game OpenGL untuk Android. Sampai sekarang saya hanya menggunakan pipeline fungsi tetap, tapi saya merender hal-hal sederhana.
Pipeline fungsi tetap mencakup banyak hal yang tidak saya butuhkan. Jadi saya berpikir tentang mengimplementasikan shader dalam game saya untuk menyederhanakan pipa OpenGL jika itu dapat membuat kinerja yang lebih baik.
Kinerja lebih baik = daya tahan baterai lebih baik, kecuali jika fps dibatasi oleh batas perangkat lunak, bukan daya perangkat keras.
opengl
android
shaders
performance
kravemir
sumber
sumber
Jawaban:
Sebenarnya tidak ada pertanyaan di sini kecuali dalam subjek, tetapi peningkatan kinerja dan peningkatan daya tahan baterai bisa menjadi hal yang sama sekali berbeda. Juga, ditingkatkan dibandingkan dengan apa? Dibandingkan dengan pipa fungsi tetap? Dibandingkan dengan shader kompleks?
Shader sederhana harus memberikan framerate yang lebih tinggi (dengan asumsi framerate Anda dibatasi oleh throughput GPU daripada kecepatan penyegaran layar) bila dibandingkan dengan shader kompleks, yang Anda mungkin mempertimbangkan kinerja yang lebih baik. Namun itu tidak akan meningkatkan masa pakai baterai, Anda masih bisa menggunakan daya 100% gpu / cpu, tetapi Anda akan memiliki tingkat bingkai yang lebih tinggi karena ada lebih sedikit untuk melakukan setiap frame.
Dibandingkan dengan pipa fungsi tetap ... siapa yang tahu? Banyak vendor perangkat keras saat ini menerapkan pipeline fungsi tetap dalam hal shader, jadi Anda hanya membandingkan shader sederhana vs kompleks lagi.
sumber
Saya tidak memiliki angka-angka terbaru tentang konsumsi daya smartphone, tetapi saya pikir CPU dan GPU harus berada di suatu tempat pada tingkat yang sama. Koreksi saya, jika saya salah.
Secara umum, mencoba mengoptimalkan bagian kode Anda yang mengandalkan kinerja selalu merupakan hal yang baik, tidak hanya karena Anda menghemat masa pakai baterai, tetapi juga karena Anda dapat menjangkau perangkat dengan perangkat keras yang kurang kuat. Saya juga selalu mendorong orang untuk menggunakan OpenGL ES 2.0 / OpenGL 3.0 untuk game, karena kekuatan shader adalah, seperti yang Anda katakan, untuk mengurangi upaya seminimal mungkin dan untuk memberikan lebih banyak fleksibilitas.
Tetapi, berdasarkan asumsi Anda membuat beberapa sprite 2D, saya akan mengatakan bahwa GPU sebagian besar dalam keadaan siaga. Itu berarti bahwa CPU mungkin akan memiliki dampak lebih pada daya tahan baterai daripada GPU, jadi Anda tidak boleh mengharapkan hasil yang terlalu positif di sini. Saya akan merekomendasikan Anda mencoba untuk meningkatkan algoritma Anda berjalan pada CPU sebelum Anda mengoptimalkan yang ada di GPU, tapi saya akan menggunakan shader juga demi fleksibilitas. Setidaknya jika Anda dapat mengabaikan perangkat di luar sana tanpa dukungan untuk OpenGL ES 2.0 (sekali lagi, saya tidak memiliki angka ^^).
sumber