¿Grabar la jugabilidad en el juego mismo?

8

Actualmente estoy trabajando en un juego de carreras de autos en 3D para la plataforma iOS. Tuve que implementar un sistema de reproducción y luego grabar esa reproducción en un archivo de video para subirlo a YouTube.

Solo tengo problemas con la parte de grabación, el resto está hecho. Lo que estoy haciendo es usar el glReadPixels()comando de OpenGL ES 1.1 para capturar el contenido del framebuffer y crear un video a partir de estos cuadros durante el tiempo de ejecución (usando el marco AVFoundation).

El problema al que me enfrento es que tengo que llamar glReadPixels()a cada actualización, que es muy lenta. Disminuye el FPS de alrededor de 30 a solo 2-3 ... ¿Hay alguna alternativa al glReadPixels()comando? ¿O alguien creó un sistema de reproducción y lo grabó en video?

Tornado
fuente

Respuestas:

8

Dado que tiene el sistema de reproducción en su lugar, le sugiero que solo almacene los datos de reproducción durante el juego y luego renderice un video de esa reproducción sin conexión. P.ej. después de que el juego haya finalizado y el usuario elija publicar la repetición como video, entonces renderizaría el video a partir de los datos de repetición (reproduciéndolo y utilizándolo glReadPixels).

bummzack
fuente
k este enfoque es nuevo y merece ser revisado ... hey, ¿has hecho esto antes?
Tornado
1
No, no he hecho esto antes. Pero implementaría el sistema de reproducción como se describe en esta pregunta y luego renderizaría los cuadros fuera de la pantalla, probablemente usando un enfoque de renderizado a textura después de que termine la carrera.
bummzack
2
Creo que la mayoría de los juegos hacen esto (Starcraft para uno definitivamente lo hace). Sin embargo, debe asegurarse de que su simulación sea totalmente determinista, es decir, al dar un cierto conjunto de entradas SIEMPRE tendrá la misma salida. Además, sus datos de reproducción son significativamente más pequeños y compartibles.
Pek
@bummzack - los enlaces que proporcionó me serán muy útiles ... gracias por eso
Tornado
0

Creo que la forma más sencilla es registrar las acciones y el estado de los usuarios y de la IA durante el juego, no los cuadros reales. Una vez que el juego ha finalizado, ya sea que el jugador complete la carrera o regrese al menú principal, se les da la opción de mirar una repetición (o guardar una) y solo entonces esas acciones se utilizan para recrear los cuadros al reproducir las acciones y Estado a través del motor del juego. Esto tiene el beneficio adicional de no (esencialmente) tener que dibujar cada fotograma completo varias veces adicionales durante el juego.

Casey
fuente
2
Básicamente di la misma respuesta. ¿Qué distingue tu enfoque del mío?
bummzack
La única advertencia aquí es si tienes una IA no determinista. Como se trata de un juego de carreras, debes asegurarte de que todos los corredores de IA se comporten de la misma manera cuando reproduzcas los datos de repetición del jugador.
Apreche