Thorium

Thorium was an engine I worked on together with 4 other programmers. The goal was to make a cross platform game engine with one of the newer graphics APIs, our assigned ones being DirectX12 and the PS4. As main reference I used the blog posts of 3dgep, a graphics blog. Together with a set of lectures, I managed to deliver a cross platform renderer capable of rendering models without textures, due to time constraint,.

Group members: 1 graphics programmer, 2 engine programmers and 2 game programmers.
Platforms: Windows
Span: September 2020 - December 2020
API/Engine: DirectX/PlayStation 4
Software: Visual studio 2019, Blender, Maya (Babylon export tool), Perforce, Jira, PlayStation4 debug/profiling tools, PIX, Nvidia Nsights.
Role(s): Product owner and Graphics programmer.

My responsibilities as Product owner:

- Steering the programmers through the development of the project, using Jira as planning tool to provide tasks that each is able to work on.
- Scheduling and organizing team meetings, together with daily standups/check-ins to see how the project is progressing.

My responsibilities as Graphics programmer:

- Designing and abstracting a cross platform framework capable of rendering on Windows and the PlayStation 4 using the proprietary development tools.
- Wavefront model loading.
- Profiling and debugging graphics errors through PIX/Nvidia Nsights/PS4 tools.

Image Context: The custom tools we had during the development of thorium. On the left is the scene hierarchy shown, with on the bottom a console which we could potentially log to.


Evaluation

The main takeaway of this project would be to never try to learn 2 graphics API's at the same time. It was difficult as we suffered a lot from the lack of experience on both the Playstation4 SDK and the Direct3D12 API.

I started this journey using the blog posts on 3dgep, a DirectX graphics programmer blog. Using the blog I was able to implement a WinApi window and a very basic renderer using Direct3D12. However, when the deadline started closing in I realized that it was time to shift my focus to the PlayStation4 renderer. This led me to not only drop the implementation of textures.. In order to accommodate for the lack of textures we used an asset pack that didn't use them, instead we used vertex coloring, which was a lot easier-and quicker to implement.

Apart from the APIs themselves the abstraction in the engine was minimal, everything was done with preprocessor statements. This was looking back at the learning journey of that block the right choice, since it allowed us to very quickly add cross platform classes to the project. In the Dataflow project I would learn that there are more effective ways to abstract graphics APIs, such as abstracting them behind an API agnostic interface.