[Bf-blender-cvs] [8d9c4841525] blender2.8: Implement overridable scene render settings

Dalai Felinto noreply at git.blender.org
Fri May 5 18:14:08 CEST 2017


Commit: 8d9c48415257eca370dad5c163f0fec06e31dd6b
Author: Dalai Felinto
Date:   Fri May 5 16:27:31 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB8d9c48415257eca370dad5c163f0fec06e31dd6b

Implement overridable scene render settings

This add a new set of (possible) render settings that can be defined at
the scene level and overridable at the scene layer level.

Once we get workspaces we can either add workspace inbetween scene and
scene layer evaluation. Or to replace layer settings, to avoid extra
confusion to users.

An example of this setting is "samples", as implemented now for the clay
engine.

===================================================================

M	release/scripts/startup/bl_ui/properties_render.py
M	release/scripts/startup/bl_ui/properties_render_layer.py
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/draw/engines/basic/basic_engine.c
M	source/blender/draw/engines/clay/clay_engine.c
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/external/external_engine.c
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/paint_vertex_mode.c
M	source/blender/draw/modes/paint_weight_mode.c
M	source/blender/makesdna/DNA_layer_types.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blender/render/intern/source/external_engine.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index be7104163fd..51968860754 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -584,6 +584,18 @@ class RENDER_PT_bake(RenderButtonsPanel, Panel):
             sub.prop(rd, "bake_user_scale", text="User Scale")
 
 
+class RENDER_PT_clay_layer_settings(RenderButtonsPanel, Panel):
+    bl_label = "Clay Layer Settings"
+    COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+    def draw(self, context):
+        layout = self.layout
+        props = context.scene.layer_properties['BLENDER_CLAY']
+
+        col = layout.column()
+        col.prop(props, "ssao_samples")
+
+
 class RENDER_PT_clay_collection_settings(RenderButtonsPanel, Panel):
     bl_label = "Clay Collection Settings"
     COMPAT_ENGINES = {'BLENDER_CLAY'}
@@ -619,6 +631,7 @@ classes = (
     RENDER_PT_output,
     RENDER_PT_encoding,
     RENDER_PT_bake,
+    RENDER_PT_clay_layer_settings,
     RENDER_PT_clay_collection_settings,
 )
 
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index d6905cd1975..73b87ae96a1 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -130,11 +130,32 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
             row.prop(rv, "camera_suffix", text="")
 
 
+class RENDERLAYER_PT_clay_settings(RenderLayerButtonsPanel, Panel):
+    bl_label = "Render Settings"
+    COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+    @classmethod
+    def poll(cls, context):
+        scene = context.scene
+        return scene and (scene.render.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        scene_props = scene.layer_properties['BLENDER_CLAY']
+        layer = bpy.context.render_layer
+        layer_props = layer.engine_overrides['BLENDER_CLAY']
+
+        col = layout.column()
+        col.template_override_property(layer_props, scene_props, "ssao_samples")
+
+
 classes = (
     RENDERLAYER_UL_renderlayers,
     RENDERLAYER_PT_layers,
     RENDERLAYER_UL_renderviews,
     RENDERLAYER_PT_views,
+    RENDERLAYER_PT_clay_settings,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index c5a2eb8351d..b6a8cb04ec8 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -108,16 +108,26 @@ void BKE_layer_sync_object_unlink(const struct Scene *scene, struct SceneCollect
 void BKE_collection_override_datablock_add(struct LayerCollection *lc, const char *data_path, struct ID *id);
 
 /* engine settings */
-typedef void (*CollectionEngineSettingsCB)(struct RenderEngine *engine, struct IDProperty *props);
-struct IDProperty *BKE_layer_collection_engine_get(struct LayerCollection *lc, const int type, const char *engine_name);
-struct IDProperty *BKE_object_collection_engine_get(struct Object *ob, const int type, const char *engine_name);
-struct IDProperty *BKE_scene_collection_engine_get(struct Scene *scene, const int type, const char *engine_name);
-void BKE_layer_collection_engine_settings_callback_register(struct Main *bmain, const char *engine_name, CollectionEngineSettingsCB func);
+typedef void (*EngineSettingsCB)(struct RenderEngine *engine, struct IDProperty *props);
+
+struct IDProperty *BKE_layer_collection_engine_evaluated_get(struct Object *ob, const int type, const char *engine_name);
+struct IDProperty *BKE_layer_collection_engine_collection_get(struct LayerCollection *lc, const int type, const char *engine_name);
+struct IDProperty *BKE_layer_collection_engine_scene_get(struct Scene *scene, const int type, const char *engine_name);
+void BKE_layer_collection_engine_settings_callback_register(struct Main *bmain, const char *engine_name, EngineSettingsCB func);
 void BKE_layer_collection_engine_settings_callback_free(void);
 void BKE_layer_collection_engine_settings_create(struct IDProperty *root);
 void BKE_layer_collection_engine_settings_validate_scene(struct Scene *scene);
 void BKE_layer_collection_engine_settings_validate_collection(struct LayerCollection *lc);
 
+struct IDProperty *BKE_scene_layer_engine_evaluated_get(struct SceneLayer *sl, const int type, const char *engine_name);
+struct IDProperty *BKE_scene_layer_engine_layer_get(struct SceneLayer *sl, const int type, const char *engine_name);
+struct IDProperty *BKE_scene_layer_engine_scene_get(struct Scene *scene, const int type, const char *engine_name);
+void BKE_scene_layer_engine_settings_callback_register(struct Main *bmain, const char *engine_name, EngineSettingsCB func);
+void BKE_scene_layer_engine_settings_callback_free(void);
+void BKE_scene_layer_engine_settings_validate_scene(struct Scene *scene);
+void BKE_scene_layer_engine_settings_validate_layer(struct SceneLayer *sl);
+void BKE_scene_layer_engine_settings_create(struct IDProperty *root);
+
 void BKE_collection_engine_property_add_float(struct IDProperty *props, const char *name, float value);
 void BKE_collection_engine_property_add_int(struct IDProperty *props, const char *name, int value);
 void BKE_collection_engine_property_add_bool(struct IDProperty *props, const char *name, bool value);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index a136728ecc4..13ec6ccbe75 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -52,13 +52,14 @@
 #define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
 
 /* prototype */
-struct CollectionEngineSettingsCB_Type;
+struct EngineSettingsCB_Type;
 static void layer_collection_free(SceneLayer *sl, LayerCollection *lc);
 static LayerCollection *layer_collection_add(SceneLayer *sl, LayerCollection *parent, SceneCollection *sc);
 static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc);
-static IDProperty *collection_engine_settings_create(struct CollectionEngineSettingsCB_Type *ces_type, const bool populate);
+static IDProperty *collection_engine_settings_create(struct EngineSettingsCB_Type *ces_type, const bool populate);
 static IDProperty *collection_engine_get(IDProperty *root, const int type, const char *engine_name);
 static void collection_engine_settings_init(IDProperty *root, const bool populate);
+static void layer_engine_settings_init(IDProperty *root, const bool populate);
 static void object_bases_Iterator_next(Iterator *iter, const int flag);
 
 /* RenderLayer */
@@ -95,9 +96,13 @@ SceneLayer *BKE_scene_layer_add(Scene *scene, const char *name)
 		name = DATA_("Render Layer");
 	}
 
+	IDPropertyTemplate val = {0};
 	SceneLayer *sl = MEM_callocN(sizeof(SceneLayer), "Scene Layer");
 	sl->flag |= SCENE_LAYER_RENDER;
 
+	sl->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+	layer_engine_settings_init(sl->properties, false);
+
 	BLI_addtail(&scene->render_layers, sl);
 
 	/* unique name */
@@ -160,6 +165,16 @@ void BKE_scene_layer_free(SceneLayer *sl)
 		layer_collection_free(NULL, lc);
 	}
 	BLI_freelistN(&sl->layer_collections);
+
+	if (sl->properties) {
+		IDP_FreeProperty(sl->properties);
+		MEM_freeN(sl->properties);
+	}
+
+	if (sl->properties_evaluated) {
+		IDP_FreeProperty(sl->properties_evaluated);
+		MEM_freeN(sl->properties_evaluated);
+	}
 }
 
 /**
@@ -957,83 +972,140 @@ void BKE_collection_override_datablock_add(LayerCollection *UNUSED(lc), const ch
 /* ---------------------------------------------------------------------- */
 /* Engine Settings */
 
-ListBase R_engines_settings_callbacks = {NULL, NULL};
+ListBase R_layer_collection_engines_settings_callbacks = {NULL, NULL};
+ListBase R_scene_layer_engines_settings_callbacks = {NULL, NULL};
 
-typedef struct CollectionEngineSettingsCB_Type {
-	struct CollectionEngineSettingsCB_Type *next, *prev;
+typedef struct EngineSettingsCB_Type {
+	struct EngineSettingsCB_Type *next, *prev;
 
 	char name[MAX_NAME]; /* engine name */
 
-	CollectionEngineSettingsCB callback;
+	EngineSettingsCB callback;
 
-} CollectionEngineSettingsCB_Type;
+} EngineSettingsCB_Type;
 
-static void create_engine_settings_scene(Scene *scene, CollectionEngineSettingsCB_Type *ces_type)
+static void create_engine_settings_scene(IDProperty *root, EngineSettingsCB_Type *es_type)
 {
-	if (collection_engine_get(scene->collection_properties, COLLECTION_MODE_NONE, ces_type->name)) {
+	if (collection_engine_get(root, COLLECTION_MODE_NONE, es_type->name)) {
 		return;
 	}
 
-	IDProperty *props = collection_engine_settings_create(ces_type, true);
-	IDP_AddToGroup(scene->collection_properties, props);
+	IDProperty *props = collection_engine_settings_create(es_type, true);
+	IDP_AddToGroup(root, props);
+}
+
+static void create_layer_collection_engine_settings_scene(Scene *scene, EngineSettingsCB_Type *es_type)
+{
+	create_engine_settings_scene(scene->collection_properties, es_type);
 }
 
-static void create_engine_settings_layer_collection(LayerCollection *lc, CollectionEngineSettingsCB_Type *ces_type)
+static void create_scene_layer_engine_settings_scene(Scene *scene, EngineSettingsCB_Type *es_type)
 {
-	if (BKE_layer_collection_engine_get(lc, COLLECTION_MODE_NONE, ces_type->name)) {
+	create_engine_settings_scene(scene->layer_properties, es_type);
+}
+
+static void create_layer_collection_engine_settings_collection(LayerCollection *lc, EngineSettingsCB_Type *es_type)
+{
+	if (BKE_layer_collection_engine_collection_get(lc, COLLECTION_MODE_NONE, es_type->name)) {
 		return;
 	}
 
-	IDProperty *props = collection_engine_settings_create(ces_type, false);
+	IDProperty *props = collection_engine_settings_create(es_type, false);
 	IDP_AddToGroup(lc->properties, props);
 
 	for (LayerCollection *lcn = lc->layer_collections.first; lcn; lcn = lcn->next) {
-		create_engine_settings_layer_collection(lcn, ces_type);
+		create_layer_collection_engine_settings_collection(lcn, es_type);
 	}
 }
 
-static void create_engines_settings_scene(Scene *scene, CollectionEngineSettingsCB_Type 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list