Das Gameplay im Spiel selbst aufzeichnen?

8

Ich arbeite derzeit an einem 3D-Autorennspiel für die iOS-Plattform. Ich musste ein Wiedergabesystem implementieren und diese Wiederholung dann in einer Videodatei aufzeichnen, um sie auf YouTube hochzuladen.

Ich habe nur Probleme mit dem Aufnahmeteil, der Rest ist erledigt. Was ich tue , ist die Verwendung von glReadPixels()Befehl von OpenGL ES 1.1 den Framebuffer Inhalte zu erfassen und ein Video von dieser Rahmen während der Laufzeit zu schaffen (AVFoundation Framework).

Das Problem, mit dem ich konfrontiert bin, ist, dass ich glReadPixels()jedes Update aufrufen muss, das sehr langsam ist. Es verringert die FPS von ungefähr 30 auf nur 2-3 ... Gibt es eine Alternative zum glReadPixels()Befehl? Oder hat jemand ein Wiedergabesystem erstellt und auf Video aufgezeichnet?

Tornado
quelle

Antworten:

8

Da Sie das Wiedergabesystem installiert haben, würde ich vorschlagen, dass Sie die Wiedergabedaten nur während des Spiels speichern und dann ein Video von dieser Wiedergabe offline rendern. Z.B. Nachdem das Spiel beendet ist und der Benutzer die Wiedergabe als Video veröffentlicht, rendern Sie das Video aus den Wiedergabedaten (indem Sie die Wiedergabe abspielen und verwenden glReadPixels).

bummzack
quelle
k Dieser Ansatz ist neu und verdient eine Überprüfung ... Hey, haben Sie das schon einmal gemacht?
Tornado
1
Nein, das habe ich noch nie gemacht. Aber ich würde das Wiedergabesystem wie in dieser Frage beschrieben implementieren und dann die Frames außerhalb des Bildschirms rendern, wahrscheinlich unter Verwendung eines Render-to-Texture-Ansatzes, nachdem das Rennen vorbei ist.
Bummzack
2
Ich denke, die meisten Spiele machen das (Starcraft macht es definitiv). Sie müssen jedoch sicherstellen, dass Ihre Simulation vollständig deterministisch ist, dh, wenn Sie einen bestimmten Satz von Eingaben angeben, haben Sie IMMER dieselbe Ausgabe. Darüber hinaus sind Ihre Wiedergabedaten erheblich kleiner und gemeinsam nutzbar.
Pek
@ Bummzack - die Links, die Sie bereitgestellt haben, werden für mich sehr nützlich sein ... danke dafür
Tornado
0

Ich denke, der einfachste Weg ist, Benutzer- und KI-Aktionen und -Zustände während des Spiels aufzuzeichnen, nicht tatsächliche Frames. Nachdem das Spiel beendet ist, hat der Spieler, der das Rennen beendet oder zum Hauptmenü zurückkehrt, die Möglichkeit, eine Wiederholung anzusehen (oder eine zu speichern). Erst dann werden diese Aktionen verwendet, um die Frames durch Wiedergabe der Aktionen und wiederherzustellen Zustand durch die Spiel-Engine. Dies hat den zusätzlichen Vorteil, dass nicht (im Wesentlichen) jedes Vollbild während des Spiels mehrere zusätzliche Male gezeichnet werden muss.

Casey
quelle
2
Ich gab im Grunde die gleiche Antwort. Was unterscheidet Ihren Ansatz von meinem?
Bummzack
Die einzige Einschränkung hier ist, wenn Sie eine nicht deterministische KI haben. Da es sich um ein Rennspiel handelt, müssen Sie sicherstellen, dass sich alle KI-Rennfahrer genauso verhalten, wenn Sie die Wiederholungsdaten des Spielers wiedergeben.
Apreche