P57 Devlog 03 - From Unity to Unreal

From the beginning of this project, the Unity game engine has given me nothing but problems. While I appreciate the speed at which one can get up and running with C# scripting and a very modular GameObject/Component system. Unity makes compromises in many other areas.

I'll start off with the render engine itself. Modern game engines have certain features that are required in a graphically realistic game. These features, however, were not added in until late 2018 - 2019 and still aren't remotely stable. Before this, the only option to add these features to your game was to download assets from the store or design it yourself in custom sharers (in a modified version of HLSL with very poor documentation). To be clear I'm not talking about next-gen features like Ray-Tracing or DLSS...

Here are some examples:

  • Modern ambient occlusion
  • Modern realtime lighting
  • DX12 and Vulkan
  • Texture Streaming
  • Contact Shadows
  • Volumetric Lighting
  • Modern antialiasing (TAA/SMAA)

The list goes on... These features were hacked into a very rushed version of Unity and for about a year, if you wanted to make a game that's not a stylized low poly indie title, you had to use a buggy, horrible version of Unity that would crash almost constantly. These features have been in Unreal for much longer.

However, as more and more people started using HDRP and bug reports started coming in, it did get better. But this wasn't enough, having dealt with all these issues for so long, It was tempting to look at Unreal. A free and open source game engine built with speed and graphical fidelity in mind. To me, it was a breath of fresh air, while almost everything in Unity (that's not tech from 2010) felt like a hack put together at the last minute. Using Unreal is like standing on a solid concrete foundation, sure  I still run into issues every now and then, but it's almost never the engine's fault, it's always some programming/logic error of mine.

But by far, the biggest impact Unreal has had on my workflow is the editor. Unreal uses a node based material/shader system where you can design the look of your game without having to worry about shader sytax. This is how every game engine should work, if you look at some of the top 3D software used to create award winning animations and VFX, they do the same.

In conclusion, I made the choice to port P57 to Unreal, not because Unity is inherently bad, but because Unity is simply behind current technology. Unreal has always been on the forefront of real time graphics, Unity, not so much.