Add some (commented out) experiments with Halton.

Halton has less correlation artifacts than Sobol for DoF, but
converges slower.
This commit is contained in:
Nathan Vegdahl 2022-08-17 15:24:20 -07:00
parent 4058c63637
commit 76c56e16f9

View File

@ -243,6 +243,12 @@ impl<'a> Renderer<'a> {
let d0 = golden_ratio_sample( let d0 = golden_ratio_sample(
sii.wrapping_add(rrand::mix32_seed(self.seed, 1111)), sii.wrapping_add(rrand::mix32_seed(self.seed, 1111)),
); );
// let siii = crate::scramble::owen2(sii, rrand::mix32_seed(self.seed, 2222));
// let d1 = halton_2(siii, rrand::mix32_seed(self.seed, 3333));
// let d2 = halton_3(siii, rrand::mix32_seed(self.seed, 4444));
// let d3 = halton_5(siii, rrand::mix32_seed(self.seed, 5555));
let [d1, d2, d3, _] = sample_gen.next_dims_no_owen(); let [d1, d2, d3, _] = sample_gen.next_dims_no_owen();
sample_gen.inc_padding(); sample_gen.inc_padding();
let [d4, d5, _, _] = sample_gen.next_dims(); let [d4, d5, _, _] = sample_gen.next_dims();
@ -609,6 +615,41 @@ fn golden_ratio_sample(i: u32) -> f32 {
u32_to_f32_norm(i.wrapping_mul(2654435769)) u32_to_f32_norm(i.wrapping_mul(2654435769))
} }
// fn halton_2(i: u32, offset: u32) -> f32 {
// sobol_burley::parts::u32_to_f32_norm(
// i.reverse_bits().wrapping_add(offset)
// )
// }
// fn halton_3(mut i: u32, offset: u32) -> f32 {
// const BASE: u32 = 3;
// const MAX: u32 = 3486784401;
// let mut result = 0;
// for _ in 0..20 {
// let next = i / BASE;
// result *= BASE;
// result += i - (next * BASE);
// i = next;
// }
// ((result as u64 + offset as u64) % MAX as u64) as f32 * (1.0 / MAX as f32)
// }
// fn halton_5(mut i: u32, offset: u32) -> f32 {
// const BASE: u32 = 5;
// const MAX: u32 = 1220703125;
// const ORDER: [u32; 5] = [0, 3, 1, 4, 2];
// let mut result = 0;
// for _ in 0..13 {
// let next = i / BASE;
// result *= BASE;
// result += ORDER[(i - (next * BASE)) as usize];
// i = next;
// }
// ((result as u64 + offset as u64) % MAX as u64) as f32 * (1.0 / MAX as f32)
// }
#[derive(Debug)] #[derive(Debug)]
struct BucketJob { struct BucketJob {
x: u32, x: u32,