15th December 2023
In the dynamic world of game development, choosing the right tools and technologies is a crucial decision that can significantly impact the outcome of a project. While Unity has long been a popular choice for its ease of use and rapid development capabilities, recent developments with their pricing model have singlehandedly destroyed their reputation in the larger industry. This has resulted in a plethora of developers flocking to new engines as alternatives such as Godot, Unreal, and GameMaker experience a sudden resurgence. One such engine to keep an eye on in particular is Godot which has experienced a veritable revolution of activity with recent releases and promises to be the next open source success story as the Blender of game engines.
All this buzz about game development and weighing the pros and cons of different engines got me thinking about the recent developments in hardware and software that drives the advancement of computer graphics. In particular the lack of cross-platform representation between Mac and Windows. Recently it seems like RISC-V ARM revolution is in full swing with big players investing in the technology such as Nvidia and AMD following in Apple's footsteps (with Intel also potentially soon to follow). As a personal advocate for the powerful, mobile, and efficiency that the MX line of Macbooks that have released I've become accustomed to as well as the raw capabilities of the machines, it seems like a massive waste that each platform must adopt their own implementation.
While its true that common graphics APIs such as OpenGL and Vulkan provide a basic interface for all platforms, in order to fully profit from the hardware features introduced in modern chipsets the commonly supported Windows and x86 platforms are often prioritised as they are adopted by the general consumer market and additionally have the most vibrant ecosystem of developer frameworks and libraries built for development as a result. Even though current rendering-backend agnostic frameworks exist such as bgfx project that wrap around any chose, there remain the same fundamental roadblocks exists in the choice of backend.
Enter WebGPU, a specification for an up and coming API that aims to unite all our hardware under a common banner—be it the mobile device running a Snapdragon Adreno 660, the Macbook Air with the M2 chip, or the custom built PC with a RTX 4060 card. As I mentioned in a previous post WebGPU is being developed as a joint project between some of the biggest names in software engineering as a collaboration between Google and Mozilla. It works by detecting the capabilities of the card and adapting the rendering pipeline to suit the unique specifications of each device. Establishing the requirements and platform of the device, the API provides an interface to dynamically target the application to the device's capabilities—referencing the appropriate native API.
I believe in the flexibility of the browser to deliver seamless experiences and deliver them quickly. The beauty of the API is its multifaceted applicability from web apps and native targets as well. With the rise of WASM for the web with Emscripten for C++ development and a blossoming ecosystem in Rust, WebGPU may create a resurgence in browser games and a new era of cross-platform interoperability in graphical applications.
With this in mind, I've decided to jump aboard the train out of unity and, with inspiration from the Godot, Unreal, and Bevy projects, have set course to develop a custom game engine in C to learn more about low-level development and gain experience with graphics and game design patterns such as the Entity Component System and rendering optimisations. At the core of the project will be the fundamental principles of cross-platform integration and minimalism.
But what will I make in this newfound engine? Recently, I've become enamoured with the potential of procedural generation particularly from the works of RujiK with his 'Beast Socket' project and the creation of virtual creatures and animations as well as other games such as Rain World and Spore which create meaningful emergent and immersive interactions between characters. In a similar vein, I hope to combine these elements with another genre which I find enthralling of MMORPGs like the niche permadeath roguelike game called 'Realm of the Mad God' which I grew up playing and MOBAs like 'League of Legends'. These games are limited by their roster or character selection, but I would like to experiment with the idea of creating a unique character for each player, each with their own shared lore, cohesive motif (potentially even music), abilities and mechanics, and game balance in a shared universe—such as can be witnessed in the likes of titans such as 'Dwarf Fortress'. It could also be a great way to test new advances in AI with generative asset creation, reinforcement learning of enemies, and self-optimising game balancing systems. A bespoke engine would give me the complete control over the pipeline for graphics/animation and networking, creating ample room for optimisation to run smoothly on all platforms.
Another idea I have would be to rewrite and further build upon my infant voxel engine, 'Cubism'. Inspired by creators such as John Lin with their high voxel fidelity, amazing lighting system, and realistic physics simulation as well as Atomontage's fully featured engine. What struck me was the performance achieved on antiquated hardware that the technology can run with its compelling graphics and its contrasting lack of usage in the industry.
Considering the possibility of just these two, perhaps this engine would become the bedrock of all my future app-based projects and provide a foundation to learn more and add features as and when is necessary.
What more appropriate a name is there for an engine, which is to programmers as a paintbrushes are to painters painter, than that of the greek god of dreams—which could be thought of as being procedurally generated experiences themselves—Morpheus.