Generates a full list of sample points for all integration types
| 205 | |
| 206 | // Generates a full list of sample points for all integration types |
| 207 | void GenerateIntegrationSamples(IntegrationSamples& samples, uint64 sqrtNumSamples, uint64 tileSizeX, uint64 tileSizeY, |
| 208 | SampleModes sampleMode, uint64 numIntegrationTypes, Random& rng) |
| 209 | { |
| 210 | const uint64 numSamplesPerPixel = sqrtNumSamples * sqrtNumSamples; |
| 211 | const uint64 numTilePixels = tileSizeX * tileSizeY; |
| 212 | const uint64 numSamplesPerTile = numSamplesPerPixel * numTilePixels; |
| 213 | samples.Init(numTilePixels, numIntegrationTypes, numSamplesPerPixel); |
| 214 | |
| 215 | for(uint64 pixelIdx = 0; pixelIdx < numTilePixels; ++pixelIdx) |
| 216 | { |
| 217 | for(uint64 typeIdx = 0; typeIdx < numIntegrationTypes; ++typeIdx) |
| 218 | { |
| 219 | Float2* typeSamples = samples.GetSamplesForType(pixelIdx, typeIdx); |
| 220 | if(sampleMode == SampleModes::Stratified) |
| 221 | { |
| 222 | GenerateStratifiedSamples2D(typeSamples, sqrtNumSamples, sqrtNumSamples, rng); |
| 223 | Shuffle(typeSamples, numSamplesPerPixel, rng); |
| 224 | } |
| 225 | else if(sampleMode == SampleModes::UniformGrid) |
| 226 | { |
| 227 | GenerateGridSamples2D(typeSamples, sqrtNumSamples, sqrtNumSamples); |
| 228 | Shuffle(typeSamples, numSamplesPerPixel, rng); |
| 229 | } |
| 230 | else if(sampleMode == SampleModes::Hammersley) |
| 231 | { |
| 232 | GenerateHammersleySamples2D(typeSamples, numSamplesPerPixel, typeIdx); |
| 233 | Shuffle(typeSamples, numSamplesPerPixel, rng); |
| 234 | } |
| 235 | else if(sampleMode == SampleModes::CMJ) |
| 236 | { |
| 237 | GenerateCMJSamples2D(typeSamples, sqrtNumSamples, sqrtNumSamples, rng.RandomUint()); |
| 238 | Shuffle(typeSamples, numSamplesPerPixel, rng); |
| 239 | } |
| 240 | else |
| 241 | { |
| 242 | GenerateRandomSamples2D(typeSamples, numSamplesPerPixel, rng); |
| 243 | } |
| 244 | } |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | // Returns the incoming radiance along the ray specified by params.RayDir, computed using unidirectional |
| 249 | // path tracing |
no test coverage detected