projects

OpenGL Icon WebGL-based voxel raymarcher

This website is the largest hobby project I've written. The idea was to write a voxel renderer that doesn't rely on meshing / marching cubes. Instead, I have a raycaster, intersecting chunks and using DDA to march through the voxel space. There are multiple advantages to this approach. First, a lot more voxels can be rendered compared to meshing, especially in the case where they are discontinuous (when voxels aren't connected or of different color). Moreover, the CPU idles at all times, because the workload is entirely on the GPU. I have written a thorough explanation of the algorithms and data structures here. You can enable the debug menu to this website by clicking .

C++ Icon Control Software of a quantum computer

During my PhD, I developed the control system for our neutral atom based quantum computer at the Max-Planck Institute for Quantum Optics. I have dedicated a full chapter to the system in my thesis here.

Rendering laser schematics in Typst

Laser systems often require complex assemblies of optical components. To visually represent these, we ordinarily used publicly available SVG images of optics and assembled them in Inkscape. That becomes tedious, especially when optics need to be placed off-grid or when something in the optics path changes. My thesis is written in Typst, so I've written a plugin instead to programatically create laser schematics. The plugin is available here.

OpenGL Icon Genetic Algorithm to Solve Super Mario Bros. 3

Back in 2016 when Machine Learning was the new exciting thing, I tipped my toes into the topic as well. I created a neural network, which modified its neurons based on a genetic algorithm, allowing the computer to play through the first level of the Nintendo Game Super Mario Bros. 3. MarioBros3-GA on Codeberg

Game Jams

I have taken part in a few Ludum Dare game jams, where the objective is to make a game completely from scratch in 48 hours. I used LÖVE (Love2D) and Godot to make a few games, which you can check out here: