Gravando a jogabilidade no próprio jogo?

8

Atualmente, estou trabalhando em um jogo de corrida de carros em 3D para a plataforma iOS. Eu tive que implementar um sistema de reprodução e gravar essa reprodução em um arquivo de vídeo para enviá-lo ao YouTube.

Só estou tendo problemas com a parte da gravação, o resto está feito. O que estou fazendo é usar o glReadPixels()comando do OpenGL ES 1.1 para capturar o conteúdo do buffer de quadros e criar um vídeo a partir desses quadros durante o tempo de execução (usando a estrutura AVFoundation).

O problema que estou enfrentando é que preciso chamar glReadPixels()cada atualização que é muito lenta. Diminui o FPS de cerca de 30 para apenas 2-3 ... Existe alguma alternativa ao glReadPixels()comando? Ou alguém criou um sistema de reprodução e gravou em vídeo?

Tornado
fonte

Respostas:

8

Como você possui o sistema de reprodução, eu sugiro que você armazene apenas os dados de reprodução durante o jogo e depois renderize um vídeo dessa reprodução offline. Por exemplo. depois que o jogo terminar e o usuário optar por postar a reprodução como vídeo, você renderizará o vídeo a partir dos dados de reprodução (reproduzindo e usando glReadPixels).

bummzack
fonte
k Essa abordagem é nova e merece ser verificada ... Ei, você já fez isso antes?
Tornado
11
Não, eu não fiz isso antes. Mas eu implementaria o sistema de reprodução conforme descrito nesta pergunta e depois renderizaria os quadros fora da tela, provavelmente usando uma abordagem de renderização para textura depois que a corrida terminasse.
bummzack
2
Eu acho que a maioria dos jogos faz isso (o Starcraft definitivamente faz). No entanto, você deve garantir que sua simulação seja totalmente determinística, ou seja, ao fornecer um determinado conjunto de entradas, você SEMPRE terá a mesma saída. Além disso, seus dados de reprodução são significativamente menores e compartilháveis.
pek 23/08
@bummzack - os links que você forneceu será muito útil para mim ... obrigado por isso
Tornado
0

Eu acho que a maneira mais simples é registrar as ações do usuário e da IA ​​e o estado durante o jogo, não os quadros reais. Depois que o jogo termina, o jogador que completa a corrida ou volta ao menu principal recebe a opção de assistir a uma repetição (ou salvar uma) e somente então essas ações são usadas para recriar os quadros, reproduzindo as ações e estado através do mecanismo de jogo. Isso tem o benefício adicional de não ter (essencialmente) de desenhar cada quadro inteiro várias vezes adicionais durante o jogo.

Casey
fonte
2
Basicamente, dei a mesma resposta. O que distingue sua abordagem da minha?
bummzack
A única ressalva aqui é se você tem uma IA não determinística. Como é um jogo de corrida, você precisa garantir que todos os pilotos de IA se comportem exatamente da mesma maneira quando reproduzir os dados de reprodução do jogador.
Apreche 23/08