Website powered by

Our 2021 Epic Megajam submission | Tech Breakdown

Making Of / 06 September 2021

Joining the 2021 Epic Megajam

Hey there travel.. readers!

Another year has passed, another Epic Megajam has happened! This year's theme was "Running out of space" and we made a game based on the literal meaning of it. Bomb - o - Mastoras is a fast-paced, local multiplayer arena brawler, where up to 4 players can compete against each other in order to decide who's the last ghost standing. I feel like I'm starting to repeat myself here, but this game jam was an amazing learning experience, and this is the blog post where I tell you all about it! So without further ado, let's get into the juicy stuff!

NVisionary Environments

Participating in the NVisionary Environments special category was an amazing excus... I mean opportunity to test all those fancy raytracing features in a semi-production environment. We wanted the best visual fidelity possible but at a reasonable performance cost. In the end we ended up utilizing RTGI (Global Illumination), RTAO (Ambient Occlusion) & RT Shadows. Lastly, we opted out of using RT Reflections, due to their limited visual impact in our specific case. Having a fully dynamic direct & indirect lighting setup gave us the flexibility to iterate a lot on the look of the game and we tried to implement as much dynamic environmental elements as possible. Some examples of that are the randomly-generated, lways-floating islands in the background, as well as the constantly-rotating sky light. 

Raytracing & WPO

Using WPO with Raytracing was a tricky one. I had to go through some fairly hidden CVARs in order to make it raytracing work with WPO meshes (actually blueprints in that case). I'm not sure if this was a raytracing limitation before, but we used the latest UE4.27 just to make sure that we have the latest features and the best possible performance in terms of raytracing. In any case, these are the two console commands that you need to change in order to have raytracing evaluate meshes that have WPO:

r.RayTracing.Geometry.StaticMeshes.WPO 1//This enables WPO evaluation in all static meshes. This can also be done on a per-actor level if you don't want to enable it globally.
r.RayTracing.Geometry.StaticMeshes.WPO.Culling 0//This disables the Culling of WPO meshes. Defaults to 1, presumably for performance reasons.

Lightweight, stylized clouds

Everyone knows that you can't have a floating island complex without fluffy, soft clouds to fill in the sky. These clouds were one of the first things that I wanted to tackle in this game jam and I really love the flexibility that the material properties give me. 

And here's how the master material looks. For extra performance gains, I used the Additive Blend Mode, an Unlit shading model, enabled Two Sided shading and disabled an Raytraced shadowing & decal response to this material. This allowed me to use the material  without any heavy performance impact, even when applied in fairly high-density meshes such as my smoothed-cube clouds. Lastly, as you can also see in the video above, I set up some LODs for the cloud meshes, in order to further optimize them in great distances.

Cloth physics

Having a secondary cloth simulation was not part of the initial roadmap but at some point we realized that it would give an extra sense of fluidity to our ghost characters. Thankfully, Unreal has a really solid and straightforward way to paint out the affected cloth areas and tweak a few settings to get accurate, game-ready cloth physics. In the video below, you can see how big of a difference it makes!

Camera Shakes

If you know me, you know that I always have a soft spot for subtle camera shakes. Camera shakes are one of the easiest and most effective tools in your arsenal to make any game alive and dynamic! In this game, we utilized a layered approach of two MatineeCameraShake classes (I hope that's the technical term) in our camera blueprint. The first is responsible for the subtle, base camera shake that is effective at all times and the second one is a more intense, snappy camera shake that is triggered only when a bomb explodes in the arena. 

And with that said, try not to overdo it! That's also a note to myself. I may have had too much fun with camera shakes in this jam...

That's all for now folks! Stay tuned for an update on my next collaboration project with Pat and Greg soon-ish!

Later days!