Heuristic42
Blog
Opengl
Meta
Rendering
0
edited
Sep 17 at 23:20
Writing custom C++ containers, iterators and value references
Generic containers are awesome. 1. The effort required to wr…
–
pknowles
created
Sep 17 at 23:16
Writing custom C++ containers, iterators and value references
Generic containers are awesome. 1. The effort required to wr…
–
pknowles
comment
Sep 15 at 19:08
DerBard: Custom Split Mechanical Keyboard Prototype
Hey. Thanks for your interest! I've uploaded the files here, bu…
–
pknowles
comment
Sep 13 at 15:06
DerBard: Custom Split Mechanical Keyboard Prototype
Hi! Is it possible to get some models so I can also make it?
–
anonymous
edited
Aug 14 at 17:55
On docker stealing routes and breaking the internet
Boy this is frustrating. The internet just doesn't work with do…
–
pknowles
edited
Aug 14 at 16:55
On docker stealing routes and breaking the internet
Boy this is frustrating. The internet just doesn't work with do…
–
pknowles
created
Aug 14 at 16:52
On docker stealing routes and breaking the internet
Boy this is frustrating. The internet just doesn't work with do…
–
pknowles
comment
Jul 13 at 6:48
Matrices
[deleted]
–
anonymous
comment
Jul 6 at 0:39
Matrices
[deleted]
–
anonymous
edited
Jun 19 at 20:22
DerBard: Custom Split Mechanical Keyboard Prototype
![DerBard Cover Image][1] In my last post I presented my que…
–
pknowles
comment
Jun 2 at 11:49
Matrices
[deleted]
–
anonymous
comment
Jun 2 at 10:31
Matrices
[deleted]
–
anonymous
created
May 30 at 5:22
Calling Babel from Django for React+JSX
Sharing my frustrations so you can enjoy them too... :) As o…
–
pknowles
edited
May 22 at 18:57
Microsoft Natural Ergonomic 4000 Replacement
![my old natural 4k][1] **They stopped making it!** I'm actu…
–
pknowles
comment
May 22 at 16:00
Prime Mover - Processor (final problem) [Spoilers!]
this should be fixed now
–
pknowles
edited
May 18 at 22:15
Clip Space
Clip space is a linearly dependent vector space between eye spa…
–
pknowles
created
May 18 at 21:56
Clip Space
Clip space is a linearly dependent vector space between eye spa…
–
pknowles
edited
May 18 at 19:50
Vector Spaces
A number of vector spaces are discussed below and widely used i…
–
pknowles
edited
May 18 at 19:43
Projection Matrix
A projection is fundamental to [cameras](/8/rendering/cameras/)…
–
pknowles
edited
May 18 at 18:32
Matrices
Matrices are 2D arrays of numbers, grouped as such to enable hi…
–
pknowles
edited
May 14 at 21:47
DerBard: Custom Split Mechanical Keyboard Prototype
In my last post I talked about a [MS Natural 4K replacement](/b…
–
pknowles
created
May 14 at 21:46
Matching complex shapes for a custom keyboard in Fusion360
For my [custom mechanical keyboard](/blog/55/derbard-custom-spl…
–
pknowles
comment
May 8 at 0:32
Matrices
[deleted]
–
anonymous
comment
May 7 at 23:30
Microsoft Natural Ergonomic 4000 Replacement
Yes indeed :). Thanks for the reminder. I found some time to wr…
–
pknowles
…
View All
Log in
CPU Raytracer
leave this field blank to prove your humanity
Article title
*
Article revisions must have a non-empty title
Article body
*
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] # Debugging 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
Toggle Preview
Edit message
*
A description of the changes made
Discard Draft
Save Draft
leave this field blank to prove your humanity
Flag
the thing you clicked
for moderator attention.
Reason choice:
Spam, promoting, advertising without disclosure
Rude, inappropriate, generally offensive
Too arrogant or demeaning to others
Other
Reason:
The reason for raising the flag
Error