Returns a 2D sample from a particular pattern using correlated multi-jittered sampling [Kensler 2013]
| 145 | |
| 146 | // Returns a 2D sample from a particular pattern using correlated multi-jittered sampling [Kensler 2013] |
| 147 | Float2 SampleCMJ2D(int32 sampleIdx, int32 numSamplesX, int32 numSamplesY, int32 pattern) |
| 148 | { |
| 149 | int32 N = numSamplesX * numSamplesY; |
| 150 | sampleIdx = CMJPermute(sampleIdx, N, pattern * 0x51633e2d); |
| 151 | int32 sx = CMJPermute(sampleIdx % numSamplesX, numSamplesX, pattern * 0x68bc21eb); |
| 152 | int32 sy = CMJPermute(sampleIdx / numSamplesX, numSamplesY, pattern * 0x02e5be93); |
| 153 | float jx = CMJRandFloat(sampleIdx, pattern * 0x967a889b); |
| 154 | float jy = CMJRandFloat(sampleIdx, pattern * 0x368cc8b7); |
| 155 | return Float2((sx + (sy + jx) / numSamplesY) / numSamplesX, (sampleIdx + jy) / N); |
| 156 | } |
| 157 | |
| 158 | void GenerateCMJSamples2D(Float2* samples, uint64 numSamplesX, uint64 numSamplesY, uint32 pattern) |
| 159 | { |
no test coverage detected