Skip to main content
GameDev.net gamedev.net
🔒 Locked 🤖 Godot

"Random Digit Scrambling" for quasi montecarlo sampling

Started by B_old Oct 22, 2014 at 12:03 PM 1 replies 1.7k views
Original Post
B_old
B_old

In the paper Efficient Multidimensional Sampling the authors describe a technique they call Random Digit Scrambling (RDS). Has someone more implementation details on this algorithm? The paper gives source code for three different radical inverse functions that can be used to implement RDS but I don't understand how they should be applied.

I especially don't understand how they jump from Hammersley samples to RDS.


func Hammersley(i, numSamples uint32) Vector2 {
	return MakeVector2(float32(i) / float32(numSamples), radicalInverse_vdC(i))
}

Can the above snippet easily be changed to something that generates RDS?

LorenzoGatti
LorenzoGatti

It looks like you are trying to understand someone else's code without understanding, or even reading, the paper: it is clearly stated in section 7 that

Randomized digit scrambling (section 3.2.3) is realized by just calling the routines with a random integer instead of the default parameter uint r = 0.

Hammersley sequences or the like are a higher level construct than radical inverse functions (in fact the "end product" of the whole algorithm), not a low-level primitive.

Omae Wa Mou Shindeiru
B_old
B_old

It looks like you are trying to understand someone else's code without understanding, or even reading, the paper: it is clearly stated in section 7 that

Randomized digit scrambling (section 3.2.3) is realized by just calling the routines with a random integer instead of the default parameter uint r = 0.

Hammersley sequences or the like are a higher level construct than radical inverse functions (in fact the "end product" of the whole algorithm), not a low-level primitive.

I read the paper and don't understand how they combine the routines to get their RDS.

The scrambled part still makes sense to me.


func ScrambledHammersley(i, numSamples, r uint32) Vector2 {
	return MakeVector2(float32(i) / float32(numSamples), ScrambledRadicalInverse_vdC(i, r))
}

But apparently they are combining all of the three radical inverse functions to get some result.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.