Day 56 - 📖 Learning - Week 8 Reflection

General / 23 July 2026

Writing the BRDF end-to-end showed me how much I'd remembered. Writing the metalness showed me what I was still missing.


What clicked

The BRDF series was eight years in the making, in a sense. I'd implemented something similar back then but never stopped to understand each term properly. Writing it from scratch this time, term by term, was different. The moment the full shader started producing expected output, the individual pieces (diffuse, specular, ambient, roughness) made sense as a system rather than a checklist.

That was the specific shift: not "here is what GGX does" but why each term exists and what breaks when you remove it. Seeing it work end-to-end in code made that real in a way that reading about it never quite did.


What flopped

The metalness experiments. Frustrating and instructive in equal measure. The math was working. The problem was the environment: the shader previewer doesn't support texture sampling, so proper specular reflection was off the table entirely. Knowing that it's an environment constraint and not a math problem is a useful thing to understand. It still wasn't the result I wanted.


Into the final stretch

Block 5 is less about technical depth and more about closing the arc. What the last few posts need to do is say something about what 60 days of this actually felt like, not just what was learned. The technical body of work is there. The final posts are for the other part.


© 2026 Stefan Groenewoud. All views are my own, not those of my employer.