Add some (commented out) experiments with Halton.
Halton has less correlation artifacts than Sobol for DoF, but converges slower.
This commit is contained in:
parent
4058c63637
commit
76c56e16f9
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user