"As a corporate astronaut, jump around colourful planets to collect your lost cargo. Avoid the clingy goobers and become employee of the month!"
This was the second game project I worked on at The Game Assembly. I worked closely together with my fellow Technical Artist Elias and Technical Animator Jonas. Together we developed tools and created shaders and VFX for the project.
I am someone who enjoys learning new things, whether it is new programs, shader techniques, or leadership skills. Because of that, I was very happy to take on the role of Project Coordinatorfor this project. It gave me the opportunity to improve my leadership skills and help manage a larger team of more than 20 people. I feel like I learned a lot from this experience.
Alongside being Project Coordinator, my main responsibilities were pipeline creation, documentation, pipeline tools, as well as shaders and VFX.
Landscapes and DDS
In our previous game project, me and my fellow Technical Artist had a strong focus on creating visual effects. It was a great learning experience where I learned how far simple sprites and cubes can be pushed by reusing textures and emitters.
For this project I instead wanted to focus more on pipelines, tooling, and improving the overall workflow for the team.
One of the main things I worked on was the landscape pipeline together with Albin, one of our programmers. In our previous project we did not use landscapes and instead built the game using modular kits. For this project we wanted to support landscapes in our engine.
I suggested using landscape data from Unreal. The landscape can be exported as a heightmap, while the landscape painting can be exported as weightmaps. After comparing different ideas we decided to go with this approach. Albin then created a plugin that automatically exports the heightmap and weightmaps from Unreal and rebuilds the landscape with its textures in our engine. I documented how to use the tool and created the landscape material in Unreal.
I added support for converting and compressing heightmaps and weightmaps in the DDS converter, though this feature was ultimately not used since Albin integrated that functionality directly into the Unreal plugin. I also iterated on the tool to support converting entire folders, so textures no longer needed to be placed individually in the input folder, and the DDS files are output alongside the original PNG or TGA files.

First iteration of landscape created by Albin
Skybox and Cubemaps

Final iteration of landscape with the correct materials
I set up the pipeline for our cubemaps and skyboxes. The graphics team created the skybox textures and provided both HDR and PNG images depending on the layer. The HDR images were used for the base layer since they do not require an alpha channel and provide higher quality lighting information. Elements such as clouds and stars were delivered as PNGs so they could use an alpha channel and appear in front of the base layer.
The HDR images were converted in Lys to cubemaps and used as the base skybox in the engine. The PNG images were converted to DDS using my DDS tool so they could be used as additional sky layers with transparency. In the engine, the textures are sampled on an environment cube using spherical UV calculations so the result appears as a skybox surrounding the scene.
I also created the shader used for the skyboxes. I initially added support for flowmaps, allowing the sky textures to flow across the surface and create effects such as clouds being pulled toward a central point or large storm-like movements.
However, creating skyboxes that flowed correctly into themselves would have required more time than we had available. Instead, we used a simpler setup with three panners in the shader, letting the sky layers move at different speeds and directions to create a subtle parallax effect
Flowmap using a flowmap texture on a custom skybox
VFX and Shaders
Spore effect for all the mushrooms
Waterfall shader panning two textures along V, with added distortion to give a more random, natural look. Simple mist VFX at the bottom simulates water hitting the surface. With some help from Elias I also added so waterfall uses depth fade as a mask to soften areas where the water intersects with objects.
Final skybox using cubemaps, three skybox layers and panners.
Electric trap VFX using a texture with four different flipbooks packed into the RGBA channels. Spawned randomly at a fast pace to create a electricity effect. I also created the flipbook shader with simple controls for adjusting size and FPS.
The lake has a shader with a Voronoi function to create ripples in the water. Like the waterfall, this shader also uses depth fade as a mask to create a soft transition between the water and other objects. To add subtle movement, I included a small vertex offset that makes the water surface wobble slightly. I also got help from Svante to give the water actual depth fade, adding a sense of depth.
I also added real-time controls with Svante’s help, allowing us to adjust the watercolor, ripple color, and depth fade multiplier in real time.
I am part of The Game Assembly’s internship program. As per the agreement between the Games Industry and The Game Assembly, neither student nor company may be in contact with one another regarding internships before April 15th. Any internship offers can be made on April 27th, at the earliest.