To continue sharing rusty things from last year, I did some experimenting with Vulkan and put the code here: github.com/sjb3d/caldera/. Has a very basic render graph and some probably terrible use of rust async/.await.
Conversation
The goal was to try out Vulkan ray tracing/mesh shaders/bindless/etc, but I also implemented "Coherent Parallel Hashing" (ggg.udg.edu/publicacions/U) since it is a useful technique for GPU hash tables. Code for that is here: github.com/sjb3d/caldera/
1
13
I also got a bit carried away and implemented a spectral path tracer using Vulkan ray tracing here: github.com/sjb3d/caldera/. It implements "Practical Hash-based Owen Scrambling" for sampling, and a few different BRDFs. Some renders below:
4
36
199
Replying to
Thanks, for reflectance data it is piecewise linear data baked to textures. Where I only have RGB I convert using the method by Brian Smits. Integration importance samples 3 wavelengths and traces them together (no dispersion yet).
1
1
Replying to
Are you using hero wavelength sampling for integration? Sampling 4 wavelengths rather than 3 significantly improves colour noise at no extra cost (assuming simd)
1
Replying to
I am importance sampling 3 wavelengths independently (the code does compare with hero wavelength sampling though). Is running on GPU so 3 wavelengths is a perf win vs 4. :)
1
Replying to
I just mean that there is no unused SIMD lane, going from 3 to 4 will be more instructions and register pressure, so there will be perf cost. I tried to compare with hero wavelength sampling (for F10 illuminant as a test) here: github.com/sjb3d/caldera/
2
1
Those images looks awesome! How long was the render times (roughly)?
1
Thanks, on a GTX 2060 with 1024 samples per pixel each took about 20-40 seconds. (Staircase is 1080x1080, others are 1080p.)
Nice! I can't wait to get an RTX GPU to unleash the all power.
1
I wanted to check how long it would take to render staircase in my ray-tracer, but then realized that my unidirectional GPU path tracer does not have a mechanism to stop at certain SPP value :)
1


