Merekam gameplay dalam game itu sendiri?

8

Saat ini saya sedang mengerjakan game balap mobil 3D untuk platform iOS. Saya harus menerapkan sistem replay dan kemudian merekam replay itu dalam file video untuk mengunggahnya ke YouTube.

Saya hanya mengalami masalah dengan bagian rekaman, sisanya selesai. Apa yang saya lakukan adalah menggunakan glReadPixels()perintah OpenGL ES 1.1 untuk menangkap konten framebuffer dan membuat video dari frame ini selama runtime (menggunakan kerangka kerja AVFoundation).

Masalah yang saya hadapi adalah saya harus memanggil glReadPixels()setiap pembaruan yang sangat lambat. Ini mengurangi FPS dari sekitar 30 menjadi hanya 2-3 ... Apakah ada alternatif untuk glReadPixels()perintah? Atau apakah ada yang membuat sistem replay dan direkam ke video?

Angin topan
sumber

Jawaban:

8

Karena Anda memiliki sistem replay, saya sarankan Anda hanya menyimpan data replay selama bermain game dan kemudian membuat video dari replay offline. Misalnya. setelah game selesai dan pengguna memilih untuk memposting replay sebagai video, maka Anda akan membuat video dari data replay (dengan memainkan replay dan menggunakan glReadPixels).

bummzack
sumber
Apakah pendekatan ini baru dan pantas untuk diperiksa ... hei Anda pernah melakukan ini sebelumnya?
Tornado
1
Tidak, saya belum pernah melakukan ini sebelumnya. Tapi saya akan menerapkan sistem replay seperti yang dijabarkan dalam pertanyaan ini dan kemudian membuat frame offscreen, mungkin menggunakan pendekatan render to tekstur setelah balapan berakhir.
bummzack
2
Saya pikir sebagian besar game melakukan ini (Starcraft for one pasti melakukannya). Namun, Anda harus memastikan bahwa simulasi Anda benar-benar deterministik, yaitu, memberikan serangkaian input tertentu yang akan SELALU memiliki output yang sama. Selain itu, data replay Anda secara signifikan lebih kecil dan dapat dibagikan.
pek
@bummzack - tautan yang Anda berikan akan sangat berguna bagi saya ... terima kasih untuk itu
Tornado
0

Saya pikir cara paling sederhana adalah merekam tindakan pengguna dan AI dan menyatakan selama bermain game, bukan frame yang sebenarnya. Setelah gameplay selesai, baik pemain menyelesaikan balapan atau berhenti kembali ke menu utama mereka diberi pilihan untuk melihat replay (atau menyimpan satu) dan hanya kemudian tindakan-tindakan yang digunakan untuk menciptakan kembali frame dengan memainkan kembali aksi dan nyatakan melalui mesin game. Ini memiliki manfaat tambahan karena tidak (pada dasarnya) harus menggambar setiap frame penuh beberapa kali tambahan selama bermain game.

Casey
sumber
2
Saya pada dasarnya memberikan jawaban yang sama. Apa yang membedakan pendekatan Anda dari pendekatan saya?
bummzack
Satu peringatan di sini adalah jika Anda memiliki AI non-deterministik. Karena ini adalah game balapan, Anda harus memastikan semua pembalap AI berperilaku dengan cara yang sama persis ketika Anda memutar ulang data replay pemain.
Apreche