f0e5d538b7
Use non-Owen-scrambled samples for motion blur and DoF.
...
This gives notably better results because it avoids what I'm
calling "sample overlap", which is an issue with jittering
approaches like Owen scrambling. In general, of course, Owen
scrambling improves things. But particularly for motion blur
it seems to cause issues.
2022-08-17 00:09:02 -07:00
76781eb639
Use new fast hash for base-4 Owen scrambling.
2022-08-14 13:29:14 -07:00
c603e24633
Make World own its own memory, along with distant disk lights.
2022-08-07 13:54:18 -07:00
fc7b8da17d
Remove unused imports.
2022-08-07 13:29:40 -07:00
b5bf580b96
Make Camera own its own memory.
2022-08-07 13:28:00 -07:00
e244664b32
Move shader bindings to objects rather than instances.
2022-08-07 11:05:34 -07:00
d132e6a015
Some minor cleanup in the Blender/Psychopath communication code.
2022-08-07 08:25:10 -07:00
e1c983a7e6
Added benchmarks to rrand sub-crate.
...
Also misc naming cleanup.
2022-08-04 11:52:49 -07:00
a12de4c3d7
Wrap sampling logic/tracking in a struct.
2022-08-04 11:11:25 -07:00
167d70b8df
Made the hilbert spiral order a little more pleasant.
2022-08-03 10:55:51 -07:00
9569f772f0
Fix incorrect background color handling in glossy reflections.
...
Bug introduced in the previous refector removing the LightPath struct.
2022-08-03 00:07:03 -07:00
77ac8ef9f2
Implement "hilbert spiral" bucket rendering order.
2022-08-02 23:58:56 -07:00
7c750dcded
Directly specify bucket size instead of inferring from sample count.
...
Since we aren't doing breadth-first ray tracing anymore, this makes
a lot more sense.
2022-08-02 19:41:23 -07:00
72b8397e9d
Finished getting rid of the LightPath struct.
...
Also misc cleanup of related code.
2022-08-02 18:55:25 -07:00
6ccd4e306d
WIP getting rid of LightPath struct.
...
Committing at this point because:
1. It compiles.
2. Rendering is totally wrong, but in a cool way.
2022-08-02 17:29:05 -07:00
608fe8bda1
Switch to colorbox and jakob upsampling for color handling.
2022-08-02 00:18:12 -07:00
5d246e66fa
Remove stats that we can't reasonably collect anymore.
2022-08-01 22:57:13 -07:00
8bc6b24004
Switch to CIE XYZ lookup tables.
2022-08-01 22:04:14 -07:00
caed4c67de
Do depth-first instead of breadth-first ray tracing.
...
This simplifies a lot of code, and will make experimenting with
other things a lot more straightforward.
2022-08-01 15:26:38 -07:00
98a9aeb374
Minor tweaks to Owen scrambling functions.
2022-07-25 15:43:07 -07:00
ef489c1ca2
Minor cleanup of the Owen scramble code.
2022-07-23 14:17:38 -07:00
f95e869848
Give Owen scramble functions their own hash.
...
This lets us move the seeding overhead outside the main loop,
which in turn lets us avoid taking it every round.
2022-07-23 13:24:24 -07:00
40d643b334
Put hilbert and morton code into one module.
2022-07-23 12:57:57 -07:00
0df18ce908
New hash seeding approach.
...
There didn't seem to be any issues in practice with the last
approach, but I thought of some other ways things could in theory
interact badly. This fixes that.
2022-07-21 14:18:55 -07:00
570878d052
Eliminate branch in per-bit Owen scrambling functions.
2022-07-21 12:28:47 -07:00
f5a0210cdf
More principled seeding approach in the hash functions.
2022-07-21 12:15:36 -07:00
7082f2d7f4
Update hash functions to known good ones instead of bespoke ones.
2022-07-21 05:22:22 -07:00
0d71ae86db
Noticed that z-scrambling is actually just base-4 Owen scrambling.
...
Updated function name and comments to reflect that.
2022-07-21 04:44:05 -07:00
6b7538e25f
Make the z-scrambling table smaller with bit fiddling.
...
This gets it down to 24 bytes.
2022-07-21 04:20:03 -07:00
ec9a121e72
Implement screen-space blue-noise sampling properly.
2022-07-21 03:59:47 -07:00
83b48f722d
Simpler way to implement screen-space blue-noise sampling.
...
We now do the index scrambling at the top of the sampling loop,
which is also faster since we only have to run it once per pixel
instead of once per sample.
2022-07-20 18:54:38 -07:00
86814dbf8f
Minor rearrangement of ray generation sampling code.
2022-07-17 21:18:46 -07:00
89429ed9f0
Fix silly bug in light transforms introduced during the switch to RMath.
2022-07-17 17:40:14 -07:00
d55ec9b025
Update psychopath code to work with RMath changes.
2022-07-17 17:24:58 -07:00
e2044e6579
Implement simple screen-space blue-noise diffusion sampling.
...
From the paper "Screen-Space Blue-Noise Diffusion of Monte Carlo
Sampling Error via Hierarchical Ordering of Pixels" by Ahmed et al.
2022-07-16 19:35:23 -07:00
ea4ba81110
Use faster routines where precision isn't needed.
2022-07-16 01:09:33 -07:00
08e2e6eb06
Convert Psychopath over to use new RMath library.
2022-07-15 21:42:35 -07:00
e0ee0d6dff
Change to using a dedicated affine transform type.
...
This lets certain operations, especially matrix inversion, be
quite a bit faster. And we don't need anything beyond affine
transformations anyway.
2021-05-14 13:30:28 -07:00
e6f9af9336
Update to latest glam.
2021-05-14 12:22:46 -07:00
89fc80b99b
Update to the latest version of sobol_burley.
2021-05-14 11:30:48 -07:00
63d661f8ce
Update sobol_burley dependency.
2021-05-11 20:17:51 -07:00
706902dc8e
Move sobol crate outside of Psychopath into its own repo.
2021-05-11 13:35:17 -07:00
3d85ce8005
Consolidate all of the compact value storage formats into one crate.
2020-12-30 20:41:56 +09:00
6586b38dc9
Use an external crate for fast approximate math functions.
2020-12-26 10:03:35 +09:00
8c738b2f39
Use FloatLuv32 in Psychopath for encoding XYZ colors.
2020-09-20 11:04:37 +09:00
45241784fb
Code tidying on the Sobol sampler.
...
Also swapped the sample index and dimension paramater in the function
signature. This feels more intuitive.
2020-04-30 22:46:47 +09:00
0dfe916523
Preparing for SIMD accelerated Sobol sampling.
...
This implements the 4-wide API, and moves the renderer over to it.
But the actual implementation is still scalar.
2020-04-24 21:05:29 +09:00
2c68e18bd6
Use golden ratio sampling for wavelength again.
...
Now that the Sobol sequence can be decorrelated, this doesn't
introduce sampling correlation problems anymore, so it's mostly
just a win.
2020-04-23 14:46:21 +09:00
29fcc69ae1
Move seed hashing into the lk_scramble function.
2020-04-23 13:36:04 +09:00
c0a8c955c4
Make LightPath::new() harder to mis-use.
2020-04-23 08:32:44 +09:00