Data-Oriented Game Engine Design: What Is It All About?

Traditionally, a video game is designed around an orientation of an object. Because we’re currently living in an advanced tech word, there’s now a new concept in game engine design called data orientation. There are an increasing number of developers who feel this is the way to build games. The mindset will allow far greater performance than previous designs.

Object Oriented Programming

This has been of great benefit to the increasingly large companies that dominate the world of gaming. Bigger teams designing a game make it harder to control all the aspects. Potentially one rogue programmer could seriously damage a game’s development. Object orientation does not allow this to happen. Tools on developing these games have made it possible for programmers to be easily replaced, each one only handling a specific part of the game. This reduces the risk of damage to a game – deliberate or not. Effectively, each programmer works on one layer of the game and does not have to worry about the other layers or how they interact. This is ideal for a big team environment churning out bigger and better games year by year.

The heart of this programming relies on you to keep state within an object. To work on multiple threads you need the introduction of concepts such as synchronization primitives. This creates an issue for the memory access patterns as each virtual function call you make needs a new level of indirection. In essence, object programming focuses on using the GPU and not the CPU of a device. Even if the CPU is dual or quad core, a game programmed this way will not use the power available. This is due to the fact the game is programmed in a non-parallel way so it can never maximize the power in the computer.

Design Orientated Programming

The emphasis of this type of programming is on the parallel. The GPU works in parallel and the vast majority of new computers have two, three or four cores which can potentially speed the game play up and improve the graphics as more of the available power is utilized. Using this technique the programming code is designed around the data structure required, not the other way round. This is a case of turning current programming models upside down.

Data can be constructed for each movement a player makes, a concept known as data churning.  This can be further broken down into many sub processes. Effectively, every bit of data is manipulated to produce another bit of data. Designing a program this way allows data to be organized in big arrays with good, cache coherent brute force algorithms. Huge rewards are given when performing frames per second. As the name suggests, this method is all about the data. The more you think about it the more you will be excited about the possibilities it opens up.

Parallelization & Vectorization

In simple terms, data orientation allows us to have several data blocks, each having its own thread. These threads are all dealt with by their own CPU core. Multiple cores equates to multiple threads being processed simultaneously. Ultimately, the threads can be rejoined to send to the GPU. This is using the parallel resources available.

Combining classes and Objects

Data orientation design does not seek to oust object orientation. It can be used alongside it to improve the performance and the experience in general. There is an increasing amount of speculation about this type of game production. There are a few early examples available on the market and there are developers trying out games using it.

However, many still prefer the old methods and are resistant to change like As the bigger companies may need additional control to ensure the programming is right, it may never be adopted fully. As with most good ideals, it takes time for them to be recognized.

Recommend to friends
  • gplus
  • pinterest