TGA Project 4
Bloom Eternal
About
A corruption has consumed your home. As the forest’s last hope, solve puzzles and fight corrupted bugs to restore what once was.
Info
Engine: TGE (TGA:s in-house C++ Framework)
Export Tool: Unity Engine used as a level exporter.
Duration: 7 Weeks (20h/week)
Team Size: 14
Contributions
Import/Export
Same as during Bardo all programmers added to the import and export as needed. Early into the project our artists didn’t want to maintain assets both in the Unity project and TGE which made me take on the task of exporting all assets needed from Unity to TGE. During export the export script sweeped all relevant asset folders in TGE and copied files to their appropriate directories in TGE.
One unforseeable aspect this approach caused was a larger reliance on Unity. You first had to get the latest version on Perforce and then export the assets from Unity to see the most recent changes in game.


Rendering Pipeline
I also developed the rendering pipeline this project, mostly because the change from 2D to 3D peeked my interest. As all other assets materials were exported from Unity. The interface in TGE required materials to be JSON files which were created during export.
The material was then associated with the correct model when loading a level and the rest was already implemented in TGE.
Animation Implementation
The animation implementation was made using a data driven state machine approach where the animators could configure what animations a certain object, the behaviour of the animations as well as transitions which animations could transition to which.
I’m quite satisfied with how to animation system turned out and how it interfaced with the other systems such as the player.

Water shader used to create waterflow
Custom Shaders
The environments in the game were inspired by forests and so the artists felt like water would give the environments a more immersive feeling. Given the capabilities of TGE and the time of the project I together with the responsible artist quickly decided that scolling textures would be the best solution. The artists also wanted control over the direction the water would scroll to form the water in different directions.
I began with just prototyping a simple scrolling textures shader by adding the UV with a certain direction, using frac to loop it and sampling with a trilinear clamp sampler. Later on in the project this caused artifacts when two objects with the shader were close to eachother. I solved this by just not taking the fraction of the result and sampling with a point wrap sampler instead.
Reflections
One thing I noticed with the animation implementation was that it took quite a while to get working which was largely due to the data driven approach to the state machine and the fact that the responsibility became mine after one of the programmers left fairly early into the project. Considering that, I would’ve definitely tried to scope smaller and more precise after the bare minimum since this project was by far the most stressful one.
Another thing that I regretted was not asking the animators how they wanted to work with the animations this project, as the data driven approach resulted in me having to sit quite a bit with the state machines when I could’ve just asked how they wanted to work and design based on that. Having this conversation could’ve possibly resulted in a faster implementation, with room for iteration later if needed, and reduced some of the stress i was under during this project.