A 2D Game Rewind-System Using Godot Game Engine, Performance Comparison and Analysis
2021 (English)Independent thesis Advanced level (professional degree), 20 credits / 30 HE credits
Student thesis
Abstract [en]
Background. A time-rewind system in a game will allow the player to go back in game time to replay a certain level or session. In games such a Forza Horizon 4, the rewind system is implemented in the game itself. Most games uses an underlying game engine, where some are private while others are fully open source. The Godot engine is published under the MIT-licence and is very popular among indie developers and hobbyist. For such an audience, the engine is supposed to be as user friendly as possible as well as offering multiple built in functionalities to increase the accessibility of the engine. This thesis paper investigates the possibility of implementing a generalized time-rewind system to be incorporated within the Godot engine.
Objectives. This paper aims to explore and analyze the possibility of a generalized rewind system in the Godot engine. More specifically an attempt to serialize a Godot scene tree into a binary format and later deserialize the binary data in order to recreate the scene tree. Furthermore, this paper aims to identify the difficulties with such a system and comparing the performance metrics with a game-specific implementation to explore any possible overhead.
Methods. Two different implementations has been made, one generalized and one game-specific. A modified 2D-platformer game is executed on both implementations where performance metrics are gathered and later analyzed. The game has been modified to include three different complexity levels in order to mimic different complexities of games. To further validate the generalize method, five games where tested and visually compared.
Results. The results showed that implementing a generalized rewind system in the Godot engine is possible. By comparing screenshots from the five tested games, one captured during the original state and one during the rewound state, one could observe minor visual differences between the two states. The comparison between the generalized implementation and the game-specific implementation confirmed that there is a significant overhead when trying to generalize a rewind method.
Conclusions. In conclusion there were multiple challenges regarding the generalized implementation. The two most challenging was serializing non-primitive properties and to block the game from executing code while extracting and injecting data, such as re-initialization. As there exist significant performance overhead in the generalized implementation, it needs further optimization regarding serialization and to make better use of the hardware to make it more appealing to be used in Game engines.
Abstract [sv]
Bakgrund. Ett system för att spola tillbaka tiden i ett spel ger spelaren möjligheten att spela om en nivå eller en session. De flesta spel använder en underliggande spelmotor, där några av dessa spelmotorer är privata medans andra har en helt öppen källkod, likt Godot som är väldigt populär bland indieutvecklare och hobbyister. För en sådan målgrupp är användarvänlighet, tillgängligheten, och erbjudna funktionaliteter viktigt. Detta examensarbete undersöker möjligheterna av ett generellt tillbakaspolningssystem integrerat i Godots motor.
Syfte. Detta arbete syftar till att utforska möjligheterna kring en generaliserad metod för att spola tillbaka tiden i Godots motor. Mer specifikt görs ett försök att serialisera ett scenträd i Godot till ett binärt format för att sedan deserialisera den binära datan och återskapa scenträdet. Vidare syftar arbetet till att identifiera de svårigheter ett sådant system medför och därefter jämföra prestandamätvärden med en spelspecifik implementation för att finna eventuella prestandakostnader.
Metod. Två implementationer utfördes, en generaliserad och en spelspecifik. För att samla data gällande prestandamätvärden exekeverades de båda implementationerna på ett modifierat 2D-platformspel. Spelet inkluderar tre olika komplexitetsnivåer för att efterlikna spel med varierande spelkomplexitet. För att validera den generaliserade implementationen, testades och visuellt jämfördes fem andra spel.
Resultat. Resultaten visade på att ett tillbakaspolningssystem är möjligt. Genom att jämföra skärmbilder tagna före och efter tillbakaspolning, kunde små visuella skillnader identifieras mellan de båda tillstånden. Jämförelsen mellan den generaliserade- och den spelspecifika implementationen antydde på att där existerar signifikanta prestandakostnader vid exekevering av den generaliserade implementationen.
Slutsatser. Sammanfattningsvis existerar det ett flertal utmaningar angående den generella implementationen. De mest noterbara utmaningarna var att serialisera icke-primitiva attribut och att hindra spelet från att exekvera kod under tiden som data extraherades och injicerades, så som åter initialisering. Eftersom det existerar signifikanta prestandakostnader i den generella implementationen, krävs ytterligare omptimeringar relaterat serialisering samt se till att hårdvaran utnyttjas bättre för att göra systemet mer attraktivt för användning i spelmotorer.
Place, publisher, year, edition, pages
2021. , p. 72
Keywords [en]
Rewind System, Game Engine, Generalized Functionality, Performance Overhead, Serialization, Godot
Keywords [sv]
Tillbakaspolningssytem, Spelmotorer, Generaliserad funktionalitet, Prestandakostnader, Serialisering, Godot
National Category
Software Engineering
Identifiers
URN: urn:nbn:se:bth-21767OAI: oai:DiVA.org:bth-21767DiVA, id: diva2:1571915
External cooperation
Macaroni Studios
Subject / course
Degree Project in Master of Science in Engineering 30,0 hp
Educational program
PAACI Master of Science in Game and Software Engineering
Supervisors
Examiners
2021-06-282021-06-232022-05-12Bibliographically approved