Jump to content
  • Advertisement
Sign in to follow this  
B_old

"Random Digit Scrambling" for quasi montecarlo sampling

This topic is 1335 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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?

Share this post


Link to post
Share on other sites
Advertisement

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!