diff options
author | Dalai Felinto <dalai@blender.org> | 2020-08-26 12:18:41 +0300 |
---|---|---|
committer | Dalai Felinto <dalai@blender.org> | 2020-08-26 12:18:41 +0300 |
commit | c44251c7d705015f40d2e73d703c7ae3a99178ba (patch) | |
tree | 0d05a110c29a974f638f12f35f1c8ffff14f12f1 /intern | |
parent | 0e50b6529cf8b43d4ff7a738bf201e6058ca5ba6 (diff) | |
parent | 8ddf8cfa6f3af7e59396986b81e49bd013bf9336 (diff) |
Merge remote-tracking branch 'origin/blender-v2.90-release'
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 3 | ||||
-rw-r--r-- | intern/cycles/render/buffers.cpp | 15 | ||||
-rw-r--r-- | intern/cycles/render/buffers.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/film.cpp | 2 |
4 files changed, 17 insertions, 5 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index fb704b2a24a..bf9fc784d79 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -363,7 +363,8 @@ void BlenderSession::do_write_update_render_tile(RenderTile &rtile, PassType pass_type = BlenderSync::get_pass_type(b_pass); int components = b_pass.channels(); - rtile.buffers->set_pass_rect(pass_type, components, (float *)b_pass.rect()); + rtile.buffers->set_pass_rect( + pass_type, components, (float *)b_pass.rect(), rtile.num_samples); } end_render_result(b_engine, b_rr, false, false, false); diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp index b26366af852..3607300cee6 100644 --- a/intern/cycles/render/buffers.cpp +++ b/intern/cycles/render/buffers.cpp @@ -459,7 +459,7 @@ bool RenderBuffers::get_pass_rect( return false; } -bool RenderBuffers::set_pass_rect(PassType type, int components, float *pixels) +bool RenderBuffers::set_pass_rect(PassType type, int components, float *pixels, int samples) { if (buffer.data() == NULL) { return false; @@ -482,8 +482,17 @@ bool RenderBuffers::set_pass_rect(PassType type, int components, float *pixels) assert(pass.components == components); for (int i = 0; i < size; i++, out += pass_stride, pixels += components) { - for (int j = 0; j < components; j++) { - out[j] = pixels[j]; + if (pass.filter) { + /* Scale by the number of samples, inverse of what we do in get_pass_rect. + * A better solution would be to remove the need for set_pass_rect entirely, + * and change baking to bake multiple objects in a tile at once. */ + for (int j = 0; j < components; j++) { + out[j] = pixels[j] * samples; + } + } + else { + /* For non-filtered passes just straight copy, these may contain non-float data. */ + memcpy(out, pixels, sizeof(float) * components); } } diff --git a/intern/cycles/render/buffers.h b/intern/cycles/render/buffers.h index 06b6094e6c9..425400a2c08 100644 --- a/intern/cycles/render/buffers.h +++ b/intern/cycles/render/buffers.h @@ -92,7 +92,7 @@ class RenderBuffers { const string &name, float exposure, int sample, int components, float *pixels); bool get_denoising_pass_rect( int offset, float exposure, int sample, int components, float *pixels); - bool set_pass_rect(PassType type, int components, float *pixels); + bool set_pass_rect(PassType type, int components, float *pixels, int samples); }; /* Display Buffer diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp index 7072fff4892..2da28222a7f 100644 --- a/intern/cycles/render/film.cpp +++ b/intern/cycles/render/film.cpp @@ -253,6 +253,8 @@ void Pass::add(PassType type, vector<Pass> &passes, const char *name) case PASS_BAKE_PRIMITIVE: case PASS_BAKE_DIFFERENTIAL: pass.components = 4; + pass.exposure = false; + pass.filter = false; break; default: assert(false); |