Project: DAG-based Rendering Pipelines
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:
A complete list of my commits can be found here. The pull requests that are relevant to the project:
|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:
|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|
- 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.