Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2017-10-10 03:28:23 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2017-10-21 21:29:21 +0300
commit6199a606a6fad1722d1f4b2152e895d655db4757 (patch)
treeeff3cad138e56fc9a7bc2912c47fed1102f0b11a /intern/cycles/blender
parentdc9eb8234fe4c9c561a3bfb9a8e3a3cefe77d5e3 (diff)
Cycles: disable progressive refine if denoising or save buffers is used.
Progressive refine undoes memory saving from save buffers, so enabling both does not make much sense. Previously enabling progressive refine would disable denoising, but it should be the other way around since denoise actually affects the render result. Includes some code refactor for progressive refine render buffers, and avoids recomputing tiles for each progressive sample.
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/addon/ui.py10
-rw-r--r--intern/cycles/blender/blender_session.cpp14
-rw-r--r--intern/cycles/blender/blender_sync.cpp23
3 files changed, 31 insertions, 16 deletions
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 7d19bccae4e..67f1029acb9 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -405,7 +405,12 @@ class CYCLES_RENDER_PT_performance(CyclesButtonsPanel, Panel):
sub.prop(rd, "tile_x", text="X")
sub.prop(rd, "tile_y", text="Y")
- sub.prop(cscene, "use_progressive_refine")
+ subsub = sub.column()
+ subsub.active = not rd.use_save_buffers
+ for rl in rd.layers:
+ if rl.cycles.use_denoising:
+ subsub.active = False
+ subsub.prop(cscene, "use_progressive_refine")
col = split.column()
@@ -595,7 +600,6 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
cscene = context.scene.cycles
layout = self.layout
- layout.active = not cscene.use_progressive_refine
layout.prop(crl, "use_denoising", text="")
def draw(self, context):
@@ -607,7 +611,7 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
rl = rd.layers.active
crl = rl.cycles
- layout.active = crl.use_denoising and not cscene.use_progressive_refine
+ layout.active = crl.use_denoising
split = layout.split()
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 9e54b7de573..f1226388a62 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -305,11 +305,10 @@ static void end_render_result(BL::RenderEngine& b_engine,
void BlenderSession::do_write_update_render_tile(RenderTile& rtile, bool do_update_only, bool highlight)
{
- BufferParams& params = rtile.buffers->params;
- int x = params.full_x - session->tile_manager.params.full_x;
- int y = params.full_y - session->tile_manager.params.full_y;
- int w = params.width;
- int h = params.height;
+ int x = rtile.x - session->tile_manager.params.full_x;
+ int y = rtile.y - session->tile_manager.params.full_y;
+ int w = rtile.w;
+ int h = rtile.h;
/* get render result */
BL::RenderResult b_rr = begin_render_result(b_engine, x, y, w, h, b_rlay_name.c_str(), b_rview_name.c_str());
@@ -401,7 +400,7 @@ void BlenderSession::render()
buffer_params.passes = passes;
PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles");
- bool use_denoising = !session_params.progressive_refine && get_boolean(crl, "use_denoising");
+ bool use_denoising = get_boolean(crl, "use_denoising");
buffer_params.denoising_data_pass = use_denoising;
session->tile_manager.schedule_denoising = use_denoising;
session->params.use_denoising = use_denoising;
@@ -659,10 +658,9 @@ void BlenderSession::do_write_update_render_result(BL::RenderResult& b_rr,
if(!buffers->copy_from_device())
return;
- BufferParams& params = buffers->params;
float exposure = scene->film->exposure;
- vector<float> pixels(params.width*params.height*4);
+ vector<float> pixels(rtile.w*rtile.h*4);
/* Adjust absolute sample number to the range. */
int sample = rtile.sample;
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 5eddf189468..b070bf89d44 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -573,8 +573,7 @@ array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles");
if(get_boolean(crp, "denoising_store_passes") &&
- get_boolean(crp, "use_denoising") &&
- !session_params.progressive_refine) {
+ get_boolean(crp, "use_denoising")) {
b_engine.add_pass("Denoising Normal", 3, "XYZ", b_srlay.name().c_str());
b_engine.add_pass("Denoising Normal Variance", 3, "XYZ", b_srlay.name().c_str());
b_engine.add_pass("Denoising Albedo", 3, "RGB", b_srlay.name().c_str());
@@ -676,8 +675,9 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
params.experimental = (get_enum(cscene, "feature_set") != 0);
/* threads */
- if(b_scene.render().threads_mode() == BL::RenderSettings::threads_mode_FIXED)
- params.threads = b_scene.render().threads();
+ BL::RenderSettings b_r = b_scene.render();
+ if(b_r.threads_mode() == BL::RenderSettings::threads_mode_FIXED)
+ params.threads = b_r.threads();
else
params.threads = 0;
@@ -819,11 +819,24 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
params.start_resolution = get_int(cscene, "preview_start_resolution");
params.pixel_size = b_engine.get_preview_pixel_size(b_scene);
+ /* other parameters */
params.cancel_timeout = (double)get_float(cscene, "debug_cancel_timeout");
params.reset_timeout = (double)get_float(cscene, "debug_reset_timeout");
params.text_timeout = (double)get_float(cscene, "debug_text_timeout");
- params.progressive_refine = get_boolean(cscene, "use_progressive_refine");
+ /* progressive refine */
+ params.progressive_refine = get_boolean(cscene, "use_progressive_refine") &&
+ !b_r.use_save_buffers();
+
+ if(params.progressive_refine) {
+ BL::RenderSettings::layers_iterator b_rlay;
+ for(b_r.layers.begin(b_rlay); b_rlay != b_r.layers.end(); ++b_rlay) {
+ PointerRNA crl = RNA_pointer_get(&b_rlay->ptr, "cycles");
+ if(get_boolean(crl, "use_denoising")) {
+ params.progressive_refine = false;
+ }
+ }
+ }
if(background) {
if(params.progressive_refine)