A speedrunning FPS-game where you use your bow and arrow, and magical abilities to traverse a temple, in search for a treasure.



  • All effects

  • All custom shaders

  • UI Shaders

  • Tessellation

  • Ocean

  • Skyboxes

  • Parallax corrected cubemaps

  • Decals


  • FPS

  • Created in 10 weeks - at 50% (4 hours/day)

  • Custom in-house engine


  • 7 Programmers

  • 3 Level Designers

  • 4 Artists

  • 2 Technical Artists

HLSL Preprocessor directives

I rewrote some of the shaders so that they use preprocessor directives to allow me to more easily add or remove features from a shader. I added directives for features such as subsurface scattering and tessellation on regular mesh shaders, and spritesheet animation and interpolated blending between frames for particles. I also refactored the GPU-particles that Alexander Aschan wrote to be able to use the same vertex->pixel shaders as CPU-particles.


I was pretty keen on implementing local cubemaps in this game, since ambient lighting is fairly important for a believable world. As with many features, this was not something I could do alone, Morris did all of the hard lifting, and I acted more as a support. I did the Unity bit with exporting the positions, and generating a unique and persistent ID to assign the generated textures to since I didn’t trust Unity’s instance IDs. I also found and configured cmft for generating the blurred mip maps via command line instead of Lys like we did before, which doesn’t work via command line. That’s a bummer. Fortunately, cmft has another advantage, namely the fact that it is open source, fast and easy to use, and generates everything we need.


Our group wanted decals in the previous game, but we simply did not have time. In this game, we made it a priority to do it properly. I set up the Unity portion, creating a system that makes it super easy for anyone to import textures and generate all of the necessary materials and prefab files that are required to actually place a decal. We don’t use Unity’s render pipeline, which apparently has support for decals, because the fact that it did was really obscured when I researched it. Instead, I use a modified version of this blog post, where I added culling and made sure it doesn’t stop updating decals when the manager-object is out of the camera’s view. In engine, I fixed some bugs with the initial implementation, such as making sure PBR-decals only work when all textures are correct.