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
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-12-28 20:37:05 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-12-28 20:59:33 +0300
commit3f4e3f718fdc1163cc52a84d85978fa94b230211 (patch)
tree21bdaae3f63721ac481493a58d9abd37395243ce /intern
parenta7c5f4f20657e12b43337e32bc62a876cbbe6292 (diff)
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.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/addon/properties.py2
-rw-r--r--intern/cycles/blender/addon/ui.py23
-rw-r--r--intern/cycles/blender/blender_mesh.cpp15
-rw-r--r--intern/cycles/blender/blender_session.cpp10
-rw-r--r--intern/cycles/blender/blender_sync.cpp19
-rw-r--r--intern/cycles/blender/blender_sync.h13
6 files changed, 71 insertions, 11 deletions
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<Shader*> 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;