Google Summer of Code 2016 – Final Report


Gooey with party hat, Terasology’s mascot celebrating!

Organization: MovingBlocks
Project: DAG-based Rendering Pipelines
Product: Terasology

Terasology is an open-source sandbox videogame, originally created as a Minecraft-inspired tech demo, it has grown into a powerful engine for voxel-based gameplay. The project is currently focused on architecture and extensibility, but as of early 2016 has released a first Alpha version to be a baseline engine for creating content and building gameplay.

Previously Terasology’s rendering engine was monolithic, rendering tasks were closely coupled (see diagram) and the rendering pipeline could only be altered by directly modifying the source code. Throughout summer (for my original project proposal please check here) I carefully extracted all rendering tasks, wrapped them inside into well-structured nodes and defined the OpenGL state changes that the nodes now use (diagram of the abstraction). Without changes to the visual output the engine generates, at the end of the project not only the engine can automatically reduce the number of redundant OpenGL state changes, but it can now enable third-party modules to insert their own nodes into the pipeline, something I demonstrated in the last days of the project with proof-of-concept code introducing a number of simple post-processing effects at runtime.

Finally, on final days of my project I enabled module developers to insert their own effects into the rendering engine without making substantial modifications. A video regarding to this:

Contribution Summary

Screen Shot 2016-08-23 at 05.03.15

A complete list of my commits can be found here. The pull requests that are relevant to the project:

PR ID Summary
2325  Wrapping ShadowMap and WorldReflection into a "Node"
2362  Backdrop and Skybands Nodes for DAG
2388  Post-Processing Nodes for DAG
2399  Architecture for Redundant State Elimination
2421  Finalize SetWireframe StateChange
2425  A Minor Refactor in StateChanges
2427  New StateChanges for DAG
2431  Nodes use FBOConfig to add their desired FBOs to FBM
2449  Introduces API for module developers to add graphical tweaks to their mods

The other pull requests during or before the project:

PR ID Summary
2195  Add animated water and grass options remove environment effects option
2211  Add fog volumetric fog and particle effect limit options
2286  Add auto complete for "showScreen" command
2288  Visually distinct UI elements for enabled/disabled
2316 Open up the DebugOverlay to add/remove MetricsModes

Future Plans:

  • Making module developers life easier by proposing annotations
  • There are still some nodes needs special care, planning to split them.
  • Introducing new missing state changes
  • Adding OSVR support


It was a very enriching journey. I am very grateful to have such extraordinary mentors,  Emanuel D’Arrigo, Rasmus Praestholm and Martin Steiger. There were always there for me, like a family. 😀 I also want to thank Google for arranging this programme, without their support I wouldn’t be able to meet & work with this amazing community.

Tags: ,

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.