Long time, no SIMD #Haskell
JK, the naivest stupidest binary tree blows fancy 4-way SIMDed BVH out of the water.
Actually, it may be slower by itself, but multicore apparently *destroys* wide instruction performance. At the same time cache^W completely oblivious scalar traversal is happy to run on all the capabilities available.
High ceremony 4-wide or primitive 10-/20-/whatever-wide?
There are 3 types of Visitor:
* Standard Visitor: that are very easy to contain or do not need many resources to contain. It does not mean that the visitor is harmless, just simple to contain.
* Marriage/Civil partnership: that require more resources to contain completely or where containment isn't always reliable. Usually this is because the relationship is insufficiently understood or is inherently unpredictable.
* DELETED.
* Transit visitor: that are very difficult to contain or haven't yet been contained. Generally, the resources used to contain those are often very limited, yet they need much of the resources to contain it. This doesn't mean the visitor is dangerous; just difficult to contain.
https://www.gov.uk/guidance/immigration-rules/immigration-rules-appendix-v-visitor
BVH is love, BVH is life
Ramped up samples, bounces, and resolution and the rendering time is still less than the first attemts with the linear traversal of all objects in the world.
Converting interaction event into a single-constructor with additive, multiplicative, and scatter components helped a little too.
Also, skipped ray bouncing when attenuation drops below 10-bit range. The limit practically remains to prevent infinite bounces between perfect mirrors.
Cornell box, here I come!
Textures are just `Material a` combinators concerned with producing stuff at hit points.
Since the Material is a Monad now, no need for special cases for colors and then another bunch of combinators for materials.
A sampler can be used to pick entire materials if needed.
(Ooops, I actually CPSd a little...)
OTOH, the human visual system is quite shite^W noisy in low light too. And that's even with all the built-in "neural denoising".
Maybe if it's neurons were activated by light instead of being suppressed (yes, it's inverted in there too) there would be far less noise. But that may push it out to bright light instead. And being activated most of the time will give higher levels of oxidative stress/faster degradation.
Tradeoffs everywhere...
Been fever-dreamin' some DIY material layering and light sources (before I get to the chapter 7 of the second book).
The amount of noise from emissive materials is.. ugh. Apparently this is why we bother with "light sources" instead of just dropping some light bulbs here and there.
Now I wonder what artifacts should be there for this to count as a successful kata/exercise.
Should I be able to reproduce it from scratch now? Teach how to do it?
Publish some packages?
Blog about how silly it is to use C++ for teaching stuff?
Take some jabs at course material (some quirks survived into v4.0 of it)?
So many options, so little time... What should have best return on time invested?
Toots as he pleases.