Riko Ophorst
Rendering & Software Engineer
4+ years professional experience (incl. internships) Started working professionally in Sep 2018, including my initial internship at OTOY. Does not include internships from before that date.
Vulkan, Metal, D3D11/12, CUDA, CMake, RTX, Windows, macOS, Linux
Raytracing & pathtracing
Realtime 3D rendering
R&D in Emerging Technologies
Cross-platform & porting
GPU & CPU optimizations
2 shipped products
4 shipped games
5 game jams
Creative Media & Game Technologies (BSc, July 2019)
At Breda University in the Netherlands
Blowbox 2017
  • C++ / DirectX 12
  • Custom Personal Engine
  • Advanced rendering architecture
  • Debugging tools
What is Blowbox 2017?
Blowbox 2017 is a 3D game engine built using DirectX 12. It is in it's infancy stages functionality wise, but the architecture of the engine is very solid.

I should mention that the renderer in this engine is originally based on the same renderer used in my Tremble project, although it is heavily modified now.
  • Advanced & dynamic DX12 command list management.
  • Easy to use GPU resources.
  • DX12 API completely abstracted for user-friendly interface.
  • ImGui for debug drawing and tools.
  • Runtime debugging tools such as frame performance profiling, memory usage profiling, live scene graph viewing, live material viewing.
  • Completely documented using Doxygen.
  • EASTL for optimized data structures.
  • Blinn-phong lighting.
  • Project configured using CMake.
  • Dynamic model loading using Assimp.
Technical specifications
  • CMake
  • C++
  • DirectX 12
  • ImGui
  • Doxygen
  • 5 weeks of development
View the source code on GitHub
Advanced & dynamic DirectX 12 command list management
This is the second time that I've worked with DirectX 12. The renderer was originally based off my Tremble project, but has since been heavily modified and upgraded.

I built an advanced wrapper around the DirectX 12 CommandList and CommandQueue objects. It is an absolute godsend. You can now easily start a new command list, start recording commands and send it over to the GPU in less than 5 lines of code! And the CPU-GPU syncing is still completely flexible, you can still decide how the synchronization between CPU and GPU should happen. It is quite a nice and dynamic system. I'm quite fond of it - if you couldn't tell.

You can checkout the implementation here.

Easy to use GPU resources
Managing GPU resources can be a pain in plain DirectX 12. That's why I wrapped the most common types of GPU resources, such as:
  • StructuredBuffers
  • TypedBuffers
  • UploadBuffers
  • ByteAddressBuffers
  • ColorBuffers
  • DepthBuffers
All those types of buffers automatically have descriptors generated and attached to them, so you don't ever need to worry about descriptors again. It's all taken care of.

You can checkout the implementation here.

ImGui for debug drawing and tools
I am using ImGui as my go-to way of doing debug drawing and creating tools for this project. There actually isn't any official implementation for ImGui in DirectX 12, so I built my own.

You can checkout the implementation here.

Runtime debugging tools
In Blowbox 2017 I built a few tools to help make developing in the engine easier. They are all built using ImGui as their frontend. Some of the tools include:
  • Frame performance profiling & statistics
  • Memory usage profiling & statistics (CPU and GPU)
  • Live scene graph hierarchy viewer and editor
  • Live material viewer and editor
You can checkout the implementation of the various tools here.

Complete documentation using Doxygen
Everything in Blowbox 2017 is completely documented using Doxygen. It is extremely nice to have such an automated way of generating documentation for a project.

You can checkout generated documentation here.

Project configured with CMake
The entirety of the project is configured using CMake. It is an amazing tool for project configuration. It's the first time that I am actually using CMake, and I wish I had started using it like 3 years ago. CMake will also make it easier to go cross-platform, if I ever decide to go down that route.

You can checkout the implementation here.