Cycles: improved rounding of sample chunks for resumable renders
authorSybren A. Stüvel <sybren@stuvel.eu>
Tue, 29 Jan 2019 17:08:12 +0000 (18:08 +0100)
committerSybren A. Stüvel <sybren@stuvel.eu>
Wed, 30 Jan 2019 09:51:06 +0000 (10:51 +0100)
commit7744203b7fde35a074faf232dda3595b78c5f14c
treecab842b5fe8176706e9e4b032bd94836f191e824
parentfbfe360cb13df5a6b47a86bf4cabd16e3bd92262
Cycles: improved rounding of sample chunks for resumable renders

When using `--cycles-resumable-num-chunks N` to render a subset of the
samples, having N close to the total number of samples causes rounding
issues.

For example, a file configured for 250 samples and 150 chunks should
have 1.6666 sample per chunk. The old code rounded this to 2 samples per
chunk, which would result in too many samples being rendered. When
rendering a single chunk this doesn't matter much, but when larger chunk
ranges are rendered with `--cycles-resumable-start-chunk` and
`--cycles-resumable-end-chunk` the rounding errors start to add up.

By multiplying with the number of chunks to render first, and only round
to integers after that, this issue is solved. In the above example,
rendering 3 chunks will correctly render 5 samples rather than 6.

When the requested number of chunks is larger than the number of samples
there will be duplicate samples (that is, sample N appearing both in
chunk M and M+1). In this case a warning is printed to stderr.

This is needed for T50977 Progressive render: use non-uniform sample
chunks.

Reviewed by: sergey

Differential Revision: https://developer.blender.org/D4282
intern/cycles/blender/blender_session.cpp