Returns a 2D sample from a particular pattern using correlated multi-jittered sampling [Kensler 2013]
| 421 | |
| 422 | // Returns a 2D sample from a particular pattern using correlated multi-jittered sampling [Kensler 2013] |
| 423 | Float2 SampleCMJ2D(uint32 sampleIdx, uint32 numSamplesX, uint32 numSamplesY, uint32 pattern) |
| 424 | { |
| 425 | uint32 N = numSamplesX * numSamplesY; |
| 426 | sampleIdx = CMJPermute(sampleIdx, N, pattern * 0x51633e2d); |
| 427 | uint32 sx = CMJPermute(sampleIdx % numSamplesX, numSamplesX, pattern * 0x68bc21eb); |
| 428 | uint32 sy = CMJPermute(sampleIdx / numSamplesX, numSamplesY, pattern * 0x02e5be93); |
| 429 | float jx = CMJRandFloat(sampleIdx, pattern * 0x967a889b); |
| 430 | float jy = CMJRandFloat(sampleIdx, pattern * 0x368cc8b7); |
| 431 | return Float2((sx + (sy + jx) / numSamplesY) / numSamplesX, (sampleIdx + jy) / N); |
| 432 | } |
| 433 | |
| 434 | void GenerateRandomSamples2D(Float2* samples, uint64 numSamples, Random& randomGenerator) |
| 435 | { |
no test coverage detected