debug images
... here][9] # Tech At the core of the raytracer is the spatial data structure. I didn't mess around with any BVH nonsense :P. This thing was made to render one mesh only. I decided I wanted a kd-tree + surface area heuristic (SAH). I then followed and implemented the algorithm described by: *On building fast kd-Trees for Ray Tracing, and on doing that in O(N log N)*. It also includes the technique described in *Tracing Ray Differentials* to anti-aliase texture sampling. You'll note crisp checkerboard filtering in the image of the gold rings despite aliasing at geometry edges. That's just one ray per pixel! [1]: https://img.heuristic42.com/img/d95f7ef7524f.jpg [2]: https://img.heuristic42.com/img/04e5e5fbd6ca.jpg [3]: https://img.heuristic42.com/img/27129cfee4ec.jpg [4]: https://img.heuristic42.com/img/6a02c8586563.jpg [5]: https://img.heuristic42.com/img/dd33bbf1c5b1.jpg [6]: https://img.heuristic42.com/img/334138ea9ca1.jpg [7]: https://img.heuristic42.com/img/a760f01abaea.png [8]: https://img.heuristic42.com/img/64891f82e614.png [9]: https://img.heuristic42.com/img/a97f0b6cfa25.jpgDebugging Finding good ways to visualize what's happening in 3D graphics is one of the most useful skills. ![enter image description here][10] ![enter image description here][11] ![enter image description here][12] ![enter image description here][13] # Tech At the core of the raytracer is the spatial data structure. I didn't mess around with any BVH nonsense :P. This thing was made to render one mesh only with no animation. I decided I wanted a kd-tree + surface area heuristic (SAH). I then followed and implemented the algorithm described by: *On building fast kd-Trees for Ray Tracing, and on doing that in O(N log N)*. It also includes the technique described in *Tracing Ray Differentials* to anti-aliase texture sampling. You'll note crisp checkerboard filtering in the image of the gold rings despite aliasing at geometry edges. That's just one ray per pixel! [1]: https://img.heuristic42.com/img/d95f7ef7524f.jpg [2]: https://img.heuristic42.com/img/04e5e5fbd6ca.jpg [3]: https://img.heuristic42.com/img/27129cfee4ec.jpg [4]: https://img.heuristic42.com/img/6a02c8586563.jpg [5]: https://img.heuristic42.com/img/dd33bbf1c5b1.jpg [6]: https://img.heuristic42.com/img/334138ea9ca1.jpg [7]: https://img.heuristic42.com/img/a760f01abaea.png [8]: https://img.heuristic42.com/img/64891f82e614.png [9]: https://img.heuristic42.com/img/a97f0b6cfa25.jpg [10]: https://img.heuristic42.com/img/06ddd64cb93c.jpg [11]: https://img.heuristic42.com/img/256fefd9aced.jpg [12]: https://img.heuristic42.com/img/f712616c2a59.jpg [13]: https://img.heuristic42.com/img/3df8c8fb667a.jpg
copy/paste from old university website
I hear all graphics programmers have made one. Well, after some years of OpenGL so did I. At the time I decided I didn't like the randomness and duplication of typical Monte Carlo raytracers and tried my hand at the older and slower recursive branching kind. The code is still available on [github](https://github.com/pknowles/pyarlib/blob/master/trace.h). Sorry. I started work on a this in Oct 2012, mainly just for fun but also for a comparison to shader based approximations. I'm sure it could be much faster with a GPU. I chose not to use one. I'll post rendering times when I'm good and ready. # Gallery ![enter image description here][1] ![enter image description here][2] ![enter image description here][3] ![enter image description here][4] ![enter image description here][5] ![enter image description here][6] ![enter image description here][7] ![enter image description here][8] ![enter image description here][9] # Tech At the core of the raytracer is the spatial data structure. I didn't mess around with any BVH nonsense :P. This thing was made to render one mesh only. I decided I wanted a kd-tree + surface area heuristic (SAH). I then followed and implemented the algorithm described by: *On building fast kd-Trees for Ray Tracing, and on doing that in O(N log N)*. It also includes the technique described in *Tracing Ray Differentials* to anti-aliase texture sampling. You'll note crisp checkerboard filtering in the image of the gold rings despite aliasing at geometry edges. That's just one ray per pixel! [1]: https://img.heuristic42.com/img/d95f7ef7524f.jpg [2]: https://img.heuristic42.com/img/04e5e5fbd6ca.jpg [3]: https://img.heuristic42.com/img/27129cfee4ec.jpg [4]: https://img.heuristic42.com/img/6a02c8586563.jpg [5]: https://img.heuristic42.com/img/dd33bbf1c5b1.jpg [6]: https://img.heuristic42.com/img/334138ea9ca1.jpg [7]: https://img.heuristic42.com/img/a760f01abaea.png [8]: https://img.heuristic42.com/img/64891f82e614.png [9]: https://img.heuristic42.com/img/a97f0b6cfa25.jpg