At the very beginning
This is a journal about how a young student decided to start implementing a path tracer.
I'm Arjan, a 23 year old CSE master student from the Netherlands. Having worked for Triumph Studios (the creators of the Overlord and Age of Wonders series) and starting a one man software development company (without many projects, I can tell ya ), I do have at least some work field experience under my belt. So to spice up my humble portfolio, I decided to implement a path tracer.
Why? Because this whole physically based rendering thing seems awesome! No more cheating and hacking to approximate real world visual effects. Instead, let's try to simulate the behaviour of light as closely as possible.
So I got my hands on a copy of Physically Based Rendering: From Theory to Implementation. However, after the first 2 or 3 chapters, I felt like I was just copying how someone else had written his path tracer. I'd much rather be explained the basic concepts, implement those, see pretty pictures and then just improve from there on. This is why I put down the book and fired up the internet. I try to get familiar with the basic concepts and implement them. Whenever I'm stuck, I ask the lovely GameDev'ers around here.
Now, it's image time! Every body loves pretty images! Or, well.. my first attempt wasn't all that pretty:
Turns out I messed up my intersection code. You can imagine my joy when I fixed it and came to this:
Now, a couple days later, I had found my time to implement a mirror material and anti-aliasing. Just look at how pretty those spheres are:
Well, that's all for now! In the future, I plan to implement more features and keep the world updated through this journal. Some of those features would be:
- An extra direct lighting sample instead of just one random sample in a hemisphere
- Dielectric material
- More primitives, so far I only have triangles and spheres.
- Camera with a lens instead of a pinhole camera
- Some tree structure to speed up the intersection check
- Support for participating media
- Subsurface scattering
- Run it on the GPU, with those fancy CUDA core thingies