Passion Project Progress: When the 3D Engine Starts to Purr

May 21, 2025

It’s been a few months since I first shared my ambitious plan to build a 3D engine from scratch. Remember that post about passion projects and naptimes? Well, I’m happy to report that this particular project has been getting more than just catnaps!

A nice scene of a fully metallic scene with SSR and DoF applied, lit by an area light.

The journey has been exactly as expected – a mix of exhilarating breakthroughs and “what was I thinking?” moments. But thanks to the help of AI pair programming, we’ve made some real progress. It’s been far from the “vibe-coding” stereotype of blindly accepting AI suggestions. Instead, it’s forced me to dive deep into research papers, study reference implementations, and polish my math skills. Each suggestion from the AI becomes a starting point for deeper learning – whether it’s understanding the mathematical foundations of quaternion rotations or studying how different engines handle scene graph optimizations or post effects like screen space reflections (SSR) or depth of field (DoF). It’s like having a research assistant who points you in the right direction, but you still need to do the heavy lifting of understanding and implementation. The real win is that the tedious boilerplate code is now much faster to generate, giving me more time to focus on the interesting architectural decisions and optimizations.

The Good News

The engine’s basic architecture is starting to take shape. We’ve got:

  • Deferred renderer
  • Basic material management (full PBR pipeline)
  • Directional, Spot, Point and Area Light support
  • Directional light shadows (more to come)
  • A functional gizmo system for object manipulation (translate, scale and rotate)
  • Post processing support (SSR, DoF and FXAA)

The editor interface, while still rough around the edges, is becoming more intuitive. It’s amazing how much you can accomplish in 30-minute coding sessions when you have a clear goal and the right tools.

The editor aleady allows for editing a lot of settings for PBR, post and scene logic.

The Reality Check

Of course, it hasn’t all been smooth sailing. I’ve had to:

  • Rewrite the post-process pipeline several times (turns out combining effect upon effect comes with its own challenges)
  • Battle with WebGL API as all of this runs just as smooth in all web-browsers with WebGL 2.0 support

Look ma, it runs in the browser too!

The AI Factor

One of the most interesting aspects has been working with AI coding assistants. They’re like having a brilliant but sometimes overenthusiastic coding partner. They’ll suggest solutions that are technically correct but might be overkill for our needs. Sometimes, taking those suggestions can lead you down a rabbit hole—only to realize later that it wasn’t the right approach after all. But even those detours are a great learning experience, helping clarify what actually needs to be done. Another thing I’ve learned is how important context is: figuring out how much background to give the AI, and how to frame the problem, is a skill that only comes with continuous use and experience.

What’s Next?

The dream of submitting to Revision 2026 is still alive, though I’ve learned to be more realistic about the scope but I still have plenty of time 😂 I’ll keep sharing updates as we progress. For now you can look at the provided screenshots. It’s not much to look at yet, but it’s a great start!