February 8, 2026
8‑bit, big glow
I put a real-time 3D shader on the Game Boy Color
Game Boy Color gets a “3D” glow‑up and the internet freaks out
TLDR: A developer made the Game Boy Color look 3D by lighting pre-made images in real time. Comments split between awe and “not real 3D” nitpicks, but most call it brilliant retro hacking—and they want it running on the Analogue Pocket.
The retro crowd is losing its collective mind because developer Danny Spencer made a 1998 Game Boy Color look like it’s doing real‑time 3D lighting. One stunned fan blurted, “I can’t believe it,” while another swooned, “This is why HN exists,” like they’d just time‑traveled back to the glory days of tech mags. But the comments aren’t just cheers—there’s a spicy debate over whether it’s “real 3D” or a clever illusion. One explainer points out it’s lit pre‑made normal maps (color images that describe surface direction) rather than true 3D shapes, linking the frames for proof: GitHub. Cue the semantic slapfight: purists nitpick, fans shout wizardry, and everyone agrees the result looks awesome.
The hacker crowd is high‑fiving the math flex. The Game Boy’s tiny chip doesn’t even do multiplication, so Danny used logarithms—yes, the school‑math you forgot—to fake it, and let the player move a light around for a dramatic orbiting glow. Nostalgia is thick: commenters say this is the kind of raw hacker material they came to Hacker News for, and hardware heads are already plotting to run it on the Analogue Pocket. Memes flew—“Can it run Doom?” was replaced with “Can it run Blender?”—and the vibe is pure retro joy with a side of nerdy debate. Whether you call it “real 3D” or a “3D‑looking trick,” the community verdict is simple: it slaps.
Key Points
- •Danny Spencer created a Game Boy Color game that applies real-time lighting to prerendered normal-map frames.
- •He used Blender, cryptomattes, and custom shaders to generate and composite normal maps, including normal AOV exports.
- •Lambert shading is computed via the dot product, reformulated in spherical coordinates for efficiency.
- •He fixed the light’s elevation (Lθ) and allows player control of azimuth (Lφ), enabling an orbiting light effect.
- •Each pixel in the ROM is encoded as (Nφ, log(m), b) to accommodate the SM83 CPU’s lack of multiply and floats.