DataFlow

Role
UI & Engine Programmer

Tech
Custom Engine

Members
7 Programmers
1 Tech Artist

Duration
8 Weeks

Responsibilities

  • Maintaining the input system
    • Ensuring the game is fully navigable with gamepads
  • Developing the camera system
    • Perspective/Orthographic view calculations
    • Dynamic level bounds clamping
    • Camera in-game & debug modes
  • Developing the in-game UI
    • 3D cursor
    • Dynamically changing input graphics based on active input device
    • Create canvases for main-menu, game, settings and credits
    • Communicate and plan where UI elements need to be linked with other areas of development (e.g. bug reporting, gameplay mechanics and art)
  • Optimizing UI systems
  • Supporting the engine and gameplay team
  • Reviewing code through Swarm
  • Solving problems!

This engine uses an entity component system called EnTT. We made use of Perforce as our source control software, Swarm for our code reviews, Jira for our project management tool, and Jenkins for managing our builds.

Credits System
Developed a system for adding roles/people to our credits page. Role and name order is considered. Might want to change numbers into enums in the future
How it looks like in-game
Gamepad live input switching
Input graphic change based on the active input device
This image has an empty alt attribute; its file name is image-8.png
On occasions, I had to manually change the order of glyphs using Font Forge
Optimizing the UI system

All canvases were renderer at all times, which is not a big issue when there isn’t much content in them. However, as the canvases were growing the draw calls started to steadily increase.

Furthermore, all text elements were rendered glyph by glyph causing the draw calls to grow to a staggering 468 calls! At this point, the text render system was a big bottleneck.

I had to get these draw calls lower before the final release.

Using RenderDoc to debug frames

Hiding a canvas was done by scaling its root entity down to zero. To decrease draw-calls I recursively deactivated the text render components of all child entities of the canvases that are supposed to be hidden.

This resulted in draw calls decrease by ~75%.

The main menu has 82 draw calls
The Gameplay canvas has 120 draw calls

Our Graphics programmer of the team brought these numbers even further down by drawing the text in one big batch instead of the performant heavy glyph by glyph.

draw calls have dropped from ~468 to ~4