Registrare il gameplay nel gioco stesso?


8

Attualmente sto lavorando a un gioco di corse automobilistiche 3D per la piattaforma iOS. Ho dovuto implementare un sistema di riproduzione e quindi registrare tale riproduzione in un file video per caricarlo su YouTube.

Ho solo problemi con la parte di registrazione, il resto è fatto. Quello che sto facendo è usare il glReadPixels()comando di OpenGL ES 1.1 per acquisire il contenuto del framebuffer e creare un video da questi frame durante il runtime (usando il framework AVFoundation).

Il problema che sto affrontando è che devo chiamare glReadPixels()ogni aggiornamento che è molto lento. Riduce l'FPS da circa 30 a solo 2-3 ... Esiste un'alternativa al glReadPixels()comando? O qualcuno ha creato un sistema di riproduzione e registrato su video?

Risposte:


8

Dato che hai installato il sistema di replay, ti suggerisco di memorizzare i dati di replay solo durante il gioco e quindi di renderizzare un video da quel replay offline. Per esempio. dopo che il gioco è finito e l'utente sceglie di pubblicare il replay come video, quindi si renderizzerebbe il video dai dati di replay (riproducendo il replay e usando glReadPixels).


k questo approccio è nuovo e merita di essere verificato ... ehi l'hai già fatto?
Tornado,

1
No, non l'ho mai fatto prima. Ma implementerei il sistema di replay come indicato in questa domanda e poi renderei i frame fuori dallo schermo, probabilmente usando un approccio di rendering alla trama dopo la fine della gara.
bummzack,

2
Penso che la maggior parte dei giochi faccia questo (Starcraft per uno lo fa sicuramente). Tuttavia, devi assicurarti che la tua simulazione sia totalmente deterministica, ovvero, dando un certo set di input avrai SEMPRE lo stesso output. Inoltre, i tuoi dati di riproduzione sono notevolmente più piccoli e condivisibili.
pek

@bummzack - i link che hai fornito mi saranno molto utili ... grazie per quello
Tornado

0

Penso che il modo più semplice sia registrare le azioni e lo stato dell'utente e dell'IA durante il gameplay, non i frame effettivi. Dopo che il gioco è terminato, al giocatore che completa la gara o che esce dal menu principale viene data la possibilità di guardare un replay (o salvarne uno) e solo allora quelle azioni vengono usate per ricreare i frame riproducendo le azioni e stato attraverso il motore di gioco. Ciò ha l'ulteriore vantaggio di non dover (essenzialmente) disegnare ogni fotogramma completo più volte durante il gioco.


2
Praticamente ho dato la stessa risposta. Cosa distingue il tuo approccio dal mio?
bummzack,

L'unica avvertenza qui è se hai un'intelligenza artificiale non deterministica. Dato che si tratta di un gioco di corse, è necessario assicurarsi che tutti i corridori di intelligenza artificiale si comportino esattamente allo stesso modo quando si riproducono i dati di riproduzione del giocatore.
Apreche,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.