From 3f4e3f718fdc1163cc52a84d85978fa94b230211 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 28 Dec 2018 18:37:05 +0100 Subject: Cycles: restore old sample and material override settings for view layers. Since there will be no view layer overrides in 2.80, this is needed still. --- intern/cycles/blender/addon/properties.py | 2 +- intern/cycles/blender/addon/ui.py | 23 +++++++++++++++++++++++ intern/cycles/blender/blender_mesh.cpp | 15 ++++++++++++--- intern/cycles/blender/blender_session.cpp | 10 ++++++---- intern/cycles/blender/blender_sync.cpp | 19 +++++++++++++++++++ intern/cycles/blender/blender_sync.h | 13 ++++++++++--- 6 files changed, 71 insertions(+), 11 deletions(-) (limited to 'intern') diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 243e0571a97..3f6c6de5c5e 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -272,7 +272,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup): use_layer_samples: EnumProperty( name="Layer Samples", - description="How to use per render layer sample settings", + description="How to use per view layer sample settings", items=enum_use_layer_samples, default='USE', ) diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index f5e7e98b40e..667547633b4 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -244,6 +244,12 @@ class CYCLES_RENDER_PT_sampling_advanced(CyclesButtonsPanel, Panel): col.prop(cscene, "sample_all_lights_direct") col.prop(cscene, "sample_all_lights_indirect") + for view_layer in scene.view_layers: + if view_layer.samples > 0: + layout.separator() + layout.row().prop(cscene, "use_layer_samples") + break + class CYCLES_RENDER_PT_sampling_total(CyclesButtonsPanel, Panel): bl_label = "Total Samples" @@ -720,6 +726,22 @@ class CYCLES_RENDER_PT_filter(CyclesButtonsPanel, Panel): col.active = rd.use_freestyle +class CYCLES_RENDER_PT_override(CyclesButtonsPanel, Panel): + bl_label = "Override" + bl_options = {'DEFAULT_CLOSED'} + bl_context = "view_layer" + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + + layout.prop(view_layer, "material_override") + layout.prop(view_layer, "samples") + + class CYCLES_RENDER_PT_passes(CyclesButtonsPanel, Panel): bl_label = "Passes" bl_context = "view_layer" @@ -2098,6 +2120,7 @@ classes = ( CYCLES_RENDER_PT_performance_final_render, CYCLES_RENDER_PT_performance_viewport, CYCLES_RENDER_PT_filter, + CYCLES_RENDER_PT_override, CYCLES_RENDER_PT_passes, CYCLES_RENDER_PT_passes_data, CYCLES_RENDER_PT_passes_light, diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp index 701dba61b50..7a85ff27e53 100644 --- a/intern/cycles/blender/blender_mesh.cpp +++ b/intern/cycles/blender/blender_mesh.cpp @@ -985,18 +985,27 @@ Mesh *BlenderSync::sync_mesh(BL::Depsgraph& b_depsgraph, /* test if we can instance or if the object is modified */ BL::ID b_ob_data = b_ob.data(); BL::ID key = (BKE_object_is_modified(b_ob))? b_ob_instance: b_ob_data; + BL::Material material_override = view_layer.material_override; /* find shader indices */ vector used_shaders; BL::Object::material_slots_iterator slot; for(b_ob.material_slots.begin(slot); slot != b_ob.material_slots.end(); ++slot) { - BL::ID b_material(slot->material()); - find_shader(b_material, used_shaders, scene->default_surface); + if(material_override) { + find_shader(material_override, used_shaders, scene->default_surface); + } + else { + BL::ID b_material(slot->material()); + find_shader(b_material, used_shaders, scene->default_surface); + } } if(used_shaders.size() == 0) { - used_shaders.push_back(scene->default_surface); + if(material_override) + find_shader(material_override, used_shaders, scene->default_surface); + else + used_shaders.push_back(scene->default_surface); } /* test if we need to sync */ diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index 58d3b57a67e..f84eefd0233 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -481,13 +481,15 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_) scene->integrator->tag_update(scene); } - int effective_layer_samples = session_params.samples; + /* Update number of samples per layer. */ + int samples = sync->get_layer_samples(); + bool bound_samples = sync->get_layer_bound_samples(); + int effective_layer_samples; - /* TODO: Update number of samples per layer. */ -#if 0 if(samples != 0 && (!bound_samples || (samples < session_params.samples))) effective_layer_samples = samples; -#endif + else + effective_layer_samples = session_params.samples; /* Update tile manager if we're doing resumable render. */ update_resumable_tile_manager(effective_layer_samples); diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 38e0e66b91b..60192bfa8f8 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -372,6 +372,25 @@ void BlenderSync::sync_view_layer(BL::SpaceView3D& /*b_v3d*/, BL::ViewLayer& b_v view_layer.use_background_ao = b_view_layer.use_ao(); view_layer.use_surfaces = b_view_layer.use_solid(); view_layer.use_hair = b_view_layer.use_strand(); + + /* Material override. */ + view_layer.material_override = b_view_layer.material_override(); + + /* Sample override. */ + PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); + int use_layer_samples = get_enum(cscene, "use_layer_samples"); + + view_layer.bound_samples = (use_layer_samples == 1); + view_layer.samples = 0; + + if(use_layer_samples != 2) { + int samples = b_view_layer.samples(); + if(get_boolean(cscene, "use_square_samples")) + view_layer.samples = samples * samples; + else + view_layer.samples = samples; + } + } /* Images */ diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 7290ea0cee0..bf16de4a9c9 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -78,6 +78,8 @@ public: void sync_view(BL::SpaceView3D& b_v3d, BL::RegionView3D& b_rv3d, int width, int height); + inline int get_layer_samples() { return view_layer.samples; } + inline int get_layer_bound_samples() { return view_layer.bound_samples; } /* get parameters */ static SceneParams get_scene_params(BL::Scene& b_scene, @@ -191,18 +193,23 @@ private: struct RenderLayerInfo { RenderLayerInfo() - : use_background_shader(true), + : material_override(PointerRNA_NULL), + use_background_shader(true), use_background_ao(true), use_surfaces(true), - use_hair(true) + use_hair(true), + samples(0), + bound_samples(false) {} string name; - uint view_layer; + BL::Material material_override; bool use_background_shader; bool use_background_ao; bool use_surfaces; bool use_hair; + int samples; + bool bound_samples; } view_layer; Progress &progress; -- cgit v1.2.3