The road to Abyss Engine 4.0

The road to Abyss Engine 4.0

By Johannes Kuhlmann, DS Fishlabs

September 29th 2016 at 2:48PM

Johannes Kuhlmann, head of core technologies at Deep Silver Fishlabs explains why the studio spent ten years honing its proprietary technology

Developing and building upon a proprietary in-house game engine has a long tradition at Deep Silver Fishlabs.

We have been working on our Abyss Engine since 2006. By now, it has gone through a number of versions and iterations; each time improving on the previous version by applying new lessons learned and incorporating novel technologies. 

It all started back in the Java "dumb" phone era with the first Abyss Engine for the original Galaxy on Fire (powered by JSR-184). Both the game and the engine were eventually ported to C++.

Today, a full decade after its initial release on the App Store, you can still download and play the first Galaxy on Fire title on the iPhone. From there, we went on to develop Abyss Engine 2, which powers Galaxy on Fire 2 – a title many fans and reviewers still consider a benchmark for space action gaming on mobile. Next up was Abyss Engine 3, which served as the underlying technology for a variety of titles, including Galaxy on Fire - Alliances, Sports Car Challenge 2, or Snowboard Hero. 

Milestone 4.0: Creating an all-new engine

If you look at the launch dates of the aforementioned apps, you see that they were all released in 2013 or earlier. That is three years ago or more – an eternity in today’s swift and agile mobile games market. When we realised where Galaxy on Fire 3: Manticore was headed and what this game could become, we knew that we would need a new generation of our engine to push the limits once more.

In 2013, we set out to rework core systems and substantial parts of the engine to be able to leverage all the power the mobile devices of future generations would offer. To achieve the ambitious goals we had set for ourselves, we needed a completely new architecture and a stronger focus on performance as well as more flexibility. Today, we are happy and relieved to proclaim the reach of the major milestone we had set for ourselves almost 36 months ago: Our Abyss Engine has reached version 4.0.

Compared to the previous version, we have replaced or removed around 95 per cent of the source code, which makes version 4.0 more than just an update. Instead, we like to think of it as an all-new engine. With all the stuff we added, customised and optimised, Abyss Engine 4.0 is not only a perfect fit for Galaxy on Fire 3: Manticore but also a very good foundation for our future endeavours.

Tour of the engine

Abyss Engine 4.0 covers a great range of functionalities that you need to create a game. It offers window, graphics context and configuration management. It supports reading inputs from devices like mice, keyboards, gamepads, and touch screens. It provides low-level device information as well as a thin platform abstraction for everything that can be hidden from developers without impacting performance. The engine also includes essential systems for resource management, rendering, and task scheduling. An entity-component-system makes up the scene graph and allows for easy gameplay integration.

Our programming language of choice is C++, which makes up almost 100 per cent of our code base. Additionally, some Objective-C and Java is used for certain platforms. While game developers can wield the full power of C++ when implementing their games with our engine, Lua is also supported as an efficient scripting language.

We replaced or removed 95 per cent of the source code, making 4.0 more than just an update. We think of it as an all-new engine.

The renderer of the Abyss Engine 4.0 is very flexible. It is split up into two integral parts, the rendering pipeline and the renderer itself. The rendering pipeline is configurable by users of the engine. Its responsibilities include culling, sorting, draw call generation and other rendering preparations.

The renderer itself receives and processes output of the pipeline. In its implementation, we resorted to the usage of different graphics APIs (such as Metal, OpenGL, OpenGL ES) on different platforms. Since we are always eager to leverage cutting-edge technology, our renderer takes full advantage of the latest generation of 3D APIs such as Metal, Vulkan, or DirectX 12.

All of the engine’s work is distributed over multiple threads and CPU cores using a generic task scheduler. For example, the renderer is completely independent from any game logic and resources are always loaded asynchronously. These tasks run parallel to all other things that make up the game.

Another area where the Abyss Engine 4.0 has a lot to offer is debugging tools and statistics. We have great support the investigation of the activities of most of the engine's subsystems. Furthermore, we also have a built-in profiler that indicates what code runs slow and what systems are in danger of being overloaded. Last but not least, on-device overlays give access to real-time data while a built-in debug server provides the user with more extensive statistics.

Abyss Engine 4.0 is a 3D game engine specifically made for mobile devices. We base our decisions on mobile CPUs, GPUs and APIs. The engine is tailored towards triple-A mobile titles with action-packed gameplay and elaborate 3D graphics – i.e. games that require a lot of power and advanced rendering techniques.

Constantly pushing the envelope on next-generation mobile devices, we like to speak of our Abyss Engine 4.0 as “the engine of today that allows us to craft the games of tomorrow”.