I've decided to start looking at rendering again to help me learn a new programming language, Rust. I haven't learnt a new language for a while and Rust sounds like a good one to learn. It has some nice concepts, especially around enforcing lifetimes, that I've been wanting from a language for a while now. A lot of the concepts are related to the memory model I've been designing for Oakley too so it would be good to see how another language does things to get ideas. And it might give me a kick up the behind to get back into regular blogging as I won't be in a position to write new blog posts about Oakley for a while, given I'm rebuilding it from scratch...

I've started again with ray tracing, however this time I'm using libraries (nalgebra and ncollide) for all the geometry and maths rather than hand rolling it. I'm not following the same progress path as my previous C++ version so I can try out a few new things early on. For example I currently have no reflections but I have implemented spherical lights, which I'll write a blog post on soon.

The source code can be found at https://github.com/MrKWatkins/rust-rendering for anyone interested, and here is a quick teaser image showing the progress so far which demonstrates the soft shadows caused by using spherical lights instead of point lights:

Ray traced image created with Rust demonstrating soft shadows.