From 76c56e16f941e9b0b88e9f8eae6f6941d58d4bb7 Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Wed, 17 Aug 2022 15:24:20 -0700 Subject: [PATCH] Add some (commented out) experiments with Halton. Halton has less correlation artifacts than Sobol for DoF, but converges slower. --- src/renderer.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/renderer.rs b/src/renderer.rs index 5123670..d383c42 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -243,6 +243,12 @@ impl<'a> Renderer<'a> { let d0 = golden_ratio_sample( 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(); sample_gen.inc_padding(); 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)) } +// 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)] struct BucketJob { x: u32,