2D Global illumination
OpenGL
GLSL
Raymarching
For my final year dissertation, I chose to focus on a topic that reflects my core interest—graphics programming. I decided to explore Global Illumination, taking inspiration from Alexander Sannikov’s early work on Radiance Cascades. Rather than tackling the full complexity of 3D GI, I focused on something more stylized and manageable: 2D Global Illumination tailored for pixel art indie games.
I built a lightweight renderer using OpenGL that could simulate real-time global illumination in a 2D scene. The idea was to find a balance between performance and visual quality, while keeping the system simple enough to integrate into small-scale games.
The technique works by generating a signed distance field (SDF) for the scene’s geometry (computed using a GPU-accelerated Jump Flooding Algorithm), then performing raymarching against the SDF using noise-based sampling. The resulting GI texture can be left raw for that sharp pixel art feel, or optionally blurred and upscaled depending on the desired look.
The goal was to design something practical—fast enough for real-time use, easy to integrate, and flexible for different visual styles. It was a rewarding project that helped me dig deeper into real-time lighting techniques, while building something that could actually be used in production for 2D games.
About me
I’m a C/C++ developer with a strong focus on graphics programming, low-level engine work, and optimization. I enjoy working close to the hardware, whether it’s refining rendering pipelines, improving performance, or just figuring out how to make things run better. Lately, I’ve been exploring the PS5, getting a feel for what modern consoles bring to the table.
What drives me is building systems that let others create without limitations, whether that’s artists bringing their vision to life or developers pushing their projects further. I like clean, efficient code, and I’m always looking for ways to make things more seamless, more performant, and more intuitive.
juansalvadoraviles@gmail.com