I’ve gone back and forth on building a video game as a hobby for years. I’ve tinkered with just about every commercial engine out there, hoping for a bolt of inspiration to strike and push me to build the next great indie hit.

Game engine render
3D Rendering of textured cubes in WGPU.

That spark hasn’t come—but I’ve learned a lot about what excites me, and what doesn’t. In theory, game design sounds thrilling: invent mechanics, test them with players, refine through feedback. But in practice, it doesn’t click for me—my interest fades fast.

So, I did what any self-respecting software dev eventually does: I started writing my own engine. Yes, I know. The advice to anyone taking on this behemoth of a task is typically, “DON’T!” (CAPITALISED, boldened and underlined). It’s solid advice—but I’m not chasing an outcome. I just want to learn.

And learn I have. Building an engine is a nonstop learning spree. There are so many complicated processes to learn that I never run out of interesting threads to pull and follow. Of course this is time consuming but anything worth it is time consuming (or so they say).

Which brings me to what I’ve actually been up to—the titular point of this post. Beyond setting up a server at home for personal use (might write a blog about that later), I’ve been delving (can I even use that word anymore without people thinking AI wrote this) into Rust, where I’ve been learning how to build a 3D renderer from scratch.

A fantastic resource exists from Mattia Samiolo over at https://sotrh.github.io/learn-wgpu/. This is a wonderful resource to start out and take you from nothing to something. Specifically, a grid of rendered cubes with a Blinn Phong shaded model for simulating reflectivity.

So yeah—that’s what I’ve been up to lately. Just plodding along and trying to deepen my knowledge of all concepts presented in here. This typically leads to being confronted with a topic (linear algebra required for projecting 3D space onto 2D) and then learning about why and how (furiously googling and googling and reading and reading till it all makes sense). It’s definitely not the most efficient process—but it’s a process. Of some kind?

Anyway, I’ve rambled enough. I’ll be back soon with another post—hopefully with some working examples (and maybe even a video or two).