If you want to play with ray tracing implementation, it's surprisingly easy to write one by yourself. There's a great free book (<a href="https://raytracing.github.io/books/RayTracingInOneWeekend.html" rel="nofollow">https://raytracing.github.io/books/RayTracingInOneWeekend.ht...</a>) or, if you know a bit of Unity a very nice GPU-based tutorial (<a href="https://medium.com/@jcowles/gpu-ray-tracing-in-one-weekend-3e7d874b3b0f" rel="nofollow">https://medium.com/@jcowles/gpu-ray-tracing-in-one-weekend-3...</a>). The Unity version is easier to tinker with, because you have scene preview and other GUI that makes moving camera around so much easier. There are many implementations based of these sources if you don't want to write one from scratch, although doing so is definitely worth it.<p>I spent some great time playing with the base implementation. Making the rays act as particles* that bend their path to/away from objects, making them "remember" the last angle of bounce and use it in the next material hit etc. Most of them looked bad, but I still got some intuition what I was looking at. Moving the camera by a notch was also very helpful.<p>A lot of fun, great for a small recreational programming project.<p>* Unless there's an intersection with an object, then set the maximum length of the ray to some small amount, then shoot many rays from that point around and for each hit apply something similar to the gravity equation. Of course this is slow and just an approximation, but it's easy and you can implement a "black hole" type of object that will bend light in the scene.