Enregistrer le gameplay dans le jeu lui-même?

8

Je travaille actuellement sur un jeu de course automobile 3D pour la plateforme iOS. J'ai dû implémenter un système de relecture, puis enregistrer cette relecture dans un fichier vidéo pour le télécharger sur YouTube.

Je n'ai que des problèmes avec la partie enregistrement, le reste est fait. Ce que je fais, c'est utiliser la glReadPixels()commande d'OpenGL ES 1.1 pour capturer le contenu du framebuffer et créer une vidéo à partir de ces images pendant l'exécution (en utilisant le framework AVFoundation).

Le problème auquel je suis confronté est que je dois appeler glReadPixels()chaque mise à jour, ce qui est très lent. Cela diminue le FPS d'environ 30 à seulement 2-3 ... Y a-t-il une alternative à la glReadPixels()commande? Ou quelqu'un a-t-il créé un système de relecture et enregistré sur vidéo?

Tornade
la source

Réponses:

8

Étant donné que le système de relecture est en place, je vous suggère de stocker uniquement les données de relecture pendant le jeu, puis de rendre une vidéo de cette relecture hors ligne. Par exemple. une fois le jeu terminé et l'utilisateur choisit de publier la relecture en tant que vidéo, vous devez alors restituer la vidéo à partir des données de relecture (en lisant la relecture et en utilisant glReadPixels).

bummzack
la source
k cette approche est nouvelle et méritait d'être vérifiée ... hé vous avez fait ça avant?
Tornado
1
Non, je ne l'ai jamais fait auparavant. Mais je voudrais implémenter le système de relecture comme indiqué dans cette question , puis rendre les images hors écran, en utilisant probablement une approche de rendu à texture après la fin de la course.
bummzack
2
Je pense que la plupart des jeux le font (Starcraft pour l'un le fait certainement). Cependant, vous devez vous assurer que votre simulation est totalement déterministe, c'est-à-dire qu'en donnant un certain ensemble d'entrées, vous aurez TOUJOURS la même sortie. De plus, vos données de relecture sont considérablement plus petites et partageables.
pek
@bummzack - les liens que vous avez fournis me seront très utiles ... merci pour cela
Tornado
0

Je pense que le moyen le plus simple est d'enregistrer les actions et l'état de l'utilisateur et de l'IA pendant le jeu, pas les images réelles. Une fois le jeu terminé, soit le joueur terminant la course, soit en revenant au menu principal, il a la possibilité de regarder une relecture (ou d'en sauvegarder une) et ce n'est qu'à ce moment-là que ces actions sont utilisées pour recréer les images en lisant les actions et état via le moteur de jeu. Cela a l'avantage supplémentaire de ne pas (essentiellement) avoir à dessiner chaque image complète plusieurs fois supplémentaires pendant le jeu.

Casey
la source
2
J'ai essentiellement donné la même réponse. Qu'est-ce qui distingue votre approche de la mienne?
bummzack
La seule mise en garde ici est si vous avez une IA non déterministe. Puisqu'il s'agit d'un jeu de course, vous devez vous assurer que tous les coureurs IA se comportent exactement de la même manière lorsque vous lisez les données de relecture du joueur.
Apreche