Technology

Blog/Videos

Follow the development of our engine:

Papers and Presentations

Papers and presentations about the Bitsquid engine.

Read more...

Our Philosophy

The design of the Bitsquid engine is shaped by our core ideas: simplicity, openness, flat data, job parallelism and flexibility.

Read more...

Motivation

The Bitsquid engine was created to enable quick workflows and take advantage of the multi-core/multi-processor future of high-end gaming.

Read more...


Papers and Presentations

Presentations

  • Working Together: Solutions for Collaborative Asset Creation (GDC 2013)

  • Practical Particle Lighting (GDC 2012)

  • Flexible Rendering for Multiple Platforms (GDC 2012)

  • Cutting the Pipe: Achieving Sub-Second Iteration Times (GDC 2012)

  • Flow: Data-Oriented Implementation of a Visual Scripting Language

  • Benefits of a Data-Driven Renderer

  • Practical Examples in Data Oriented Design


Our Philosophy

Simplicity

Keeping the engine design as simple as possible allows rapid experimentation, which is the key to future proof technology. We will identify the few key areas where complex designs are necessary for maximum performance. In all other areas we use the simplest design possible. This includes:

  • Standardized data formats (JSON)
  • Maximum system decoupling (all coupling made at a higher abstraction layer)
  • Explicit parameter passing and object construction (no statics or globals)
  • Clear, readable and documented code

Openness

We will document our design decisions publicly, post news about the development and encourage others to participate. If people know about, discuss and copy our techniques, that will add value to, rather than detract value from our engine.

Flat simple data structures

Run time data is kept in flat, simple data structures. We avoid complex object hierarchies, subclassing and virtual calls. Such tools may simplify the design in the short run, but in the long run we believe them to be counter productive. They belong in the high-level interfacing part of the engine, not in the low-level data structures.

When operating only with (nearly) raw data, it is easy to repack it for maximum efficiency, and to create efficient algorithms that operate on it. This optimizes memory performance (which is often the bottleneck in modern CPUs). It also allows quick DMA-transfers to co-processors, GPUs, etc to parallelize the processing.

Job parallelism

Multi-core systems are the future. All bulk workloads in the engine are run through a job system which provides data parallelism for an arbitrary number of CPU cores or co-processors (SPUs). Data is laid out and algorithms designed so that pointer chasing and job interdependencies are kept to a minimum.

Data driven

To create great games you need a workflow that allows you to iterate fast over the content. Content, in our mind, is everything from the low-level configuration of the engine (rendering layers, post-processors, memory layout, etc) to high-level art assets, such as textures. The engine is completely configurable through data files, and supports hot-reloading of content as far as possible.


Motivation

The Bitsquid engine is a new game engine written from the ground up by the former lead developers of GRIN to accommodate the multi-core/multi-processor future of high-end gaming.

Four CPU cores is already the standard for high-end gaming computers. In the not so distant future 8, 16 and 32 cores will be standard. At the same time GPUs, which already have a large numbers of cores, are becoming more and more general purpose, offering an additional multi-core co-processor environment. Consoles are expected to move in the same direction, as can be seen with the PS3 SPUs, for instance. Engineering a high performance game engine in such an environment demands an architecture that parallelizes efficiently across different multi-core architectures.

The Bitsquid engine accomplishes this by being completely job-based with no explicit thread synchronization points except the mandated frame flipping. Jobs operate on abstract data streams of simple struct data, which enables them to run transparently on co-processors through DMA transfer. The massive parallelism will enable motion and world interaction at a much larger scale than previously possible, which will open up many interesting avenues for innovative game design.

At the same time the design of the Bitsquid engine is characterized by simplicity, transparency and generality. The engine is not limited to a single game type, but is intended to be licensed out to many different game developers and be used for a wide variety of purposes.