Scratching pixels
In the past few weeks, I’ve been learning about computer graphics.
While mindlessly browsing the depths of the internet, I one day stumbled upon this little gem of a website called Scratchapixel. It’s an educational resource to learn all things related to 3D rendering techniques, with a focus on ray tracing. It covers the geometry basics, explains concepts with simple and clear language, provides pseudo code, working source code and a generous amount of illustrations. The writer is a CG industry veteran, so you also get an insider glimpse on the popularity and usage of various techniques and practices.
Being (as I understand it) a solo project, it also inherently suffers from a few shortcomings. The website is currently in a half finished v2 state, and it doesn’t look like anyone maintaining it anymore. For a bunch of static content, it weirdly takes forever to load, some sections are missing, others are not really in the right place, and you will certainly see more typos and broken links than in your average textbook. But in terms of keeping the reader engaged with the right level of details and context, I’m pretty sure this is one of the best computer graphics resources out there.
So there’s a variety of reasons that pushed me to explore this topic. First it’s always interesting to understand the technology that powers some of the stuff you like (on this instance: video games and animation movies). Second, it’s a subject that gives plenty of opportunities for some fun side projects. While I don’t nourish the ambition of creating a Pixar film from my sofa, the simple prospect of creating some scenes and playing around with various rendering techniques sounds pretty entertaining to me.
So I’ve started by reading a well needed recap of the geometry fundamentals and then progressed through the section about the Foundations of 3D rendering. There’s still a lot of content I haven’t read but I decided to pause the reading for now and consolidate the accumulated knowledge by writing my own ray tracer, which I will talk about in an upcoming post!