Dataflow

Dataflow is a custom game engine made with a total of 7 programmers and 1 Visual artist, used to create the Dataflow game shown in the video on the page. The total development of the engine was 24 weeks, though most productivity took place in the last 4 weeks, more on this in the Takeaways and processes.

Group members: 7 programmers and 1 artist.
Platforms: Windows (Itch.io) and Nintendo switch (not published).
Span: February 2021 – June 2021
API/Engine: Custom - OpenGL, Switch API, GLFW, FMOD
Software/Tools: Blender, Houdini (exporting), Visual studio 2019, Perforce, Jira, Swarm, Jenkins.

My contributions as Graphics programmer

- Scene representation, using GLTF2.0
- Graphics API agnostic interface for abstraction purposes.
- PBR shading (diffuse only due to time constraints)
- Bloom
- Line renderer/debug rendering
- Art export pipeline for the visual artist.
- Profiling performance on the Nintendo switch, both on CPU and GPU (GPU using Renderdoc) and increasing the performance based on results.
- Solving graphical problems.

My responsibilities as scrum master

- Designing and integrating the Jira workflow, through time logging by the team, watching and managing team velocity and grooming the backlog with the product owner.
- Managing standups
- Planning sprint goals with the product owner, setting up sprints in a scrum environment and communicating this to the team through Jira.

Image context: The final render made in blender by the artist, our graphics effects, decisions and priorities throughout the final weeks of the project were based on this image.


Takeaways and processes

The main takeaway from the project, was that if you use your resources effectively, you can get a lot done in the allotted time. During the last few weeks of this project, we went from a bad top-down 3D tower defense game to an orthonormal tower defense game, with polished (and optimized) bloom, height fog and particles!

This happened, because the art pipeline was working well, together with the level generation of the gameplay programmers. Through the communication with them, the other graphics programmer and I managed to come up with a way to load full environments and render those accordingly. Once we had this, the time remaining was around 2 to 3 weeks in which our productivity spiked.

With the art pipeline in place, we asked our visual artist if he could deliver a final render of the quality of the game. Using Blender he created the image shown on this page, which we used to prioritize our decisions throughout the last weeks of the project. We had to cut some corners to make our game look similar to his render: Volumetric fog, became height fog and we also skipped screen space reflections, since we were at the time also profiling on the switch in order to increase the performance.

In the end I am incredibly happy with how the project turned out, I had a blast working on the game and am proud of the product. If there however was anything I would approach differently it would be the selected graphics API. We choose OpenGL because of it's simplicity, so we could focus on model loading and the shader effects of the game. I am however quite certain we could've gotten more out of it by switching to DirectX and the Switch propriety graphics API. Another thing I would've done if I had more time, is looking into ways to optimize the PBR shader, it ran well on Windows, but not so well on the switch. After optimizing multiple things that was the final verdict we got left with.