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. --- source/blender/blenkernel/BKE_layer.h | 10 ------- source/blender/blenkernel/intern/layer.c | 33 ---------------------- source/blender/blenkernel/intern/library_query.c | 2 ++ source/blender/blenloader/intern/versioning_280.c | 27 ++---------------- .../intern/builder/deg_builder_nodes_view_layer.cc | 4 +++ .../builder/deg_builder_relations_view_layer.cc | 4 +++ source/blender/makesdna/DNA_layer_types.h | 3 +- source/blender/makesdna/DNA_scene_types.h | 4 +-- source/blender/makesrna/intern/rna_internal.h | 1 + source/blender/makesrna/intern/rna_scene.c | 20 +++++++++++++ .../blender/render/intern/source/render_result.c | 1 - 11 files changed, 37 insertions(+), 72 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h index 2abdaf103f9..9ac0c56d93f 100644 --- a/source/blender/blenkernel/BKE_layer.h +++ b/source/blender/blenkernel/BKE_layer.h @@ -117,16 +117,6 @@ bool BKE_layer_collection_has_selected_objects( void BKE_base_set_visible(struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, bool extend); void BKE_layer_collection_set_visible(struct Scene *scene, struct ViewLayer *view_layer, struct LayerCollection *lc, bool extend); -/* override */ - -void BKE_override_view_layer_datablock_add( - struct ViewLayer *view_layer, int id_type, const char *data_path, const struct ID *owner_id); -void BKE_override_view_layer_int_add( - struct ViewLayer *view_layer, int id_type, const char *data_path, const int value); - -void BKE_override_layer_collection_boolean_add( - struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value); - /* evaluation */ void BKE_layer_eval_view_layer( diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 3fedd380f72..572dba4d83b 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -1057,39 +1057,6 @@ bool BKE_scene_has_object(Scene *scene, Object *ob) return false; } -/* ---------------------------------------------------------------------- */ -/* Override */ - -/** - * Add a new datablock override - */ -void BKE_override_view_layer_datablock_add( - ViewLayer *view_layer, int id_type, const char *data_path, const ID *owner_id) -{ - UNUSED_VARS(view_layer, id_type, data_path, owner_id); - TODO_LAYER_OVERRIDE; -} - -/** - * Add a new int override - */ -void BKE_override_view_layer_int_add( - ViewLayer *view_layer, int id_type, const char *data_path, const int value) -{ - UNUSED_VARS(view_layer, id_type, data_path, value); - TODO_LAYER_OVERRIDE; -} - -/** - * Add a new boolean override - */ -void BKE_override_layer_collection_boolean_add( - struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value) -{ - UNUSED_VARS(layer_collection, id_type, data_path, value); - TODO_LAYER_OVERRIDE; -} - /** \} */ /* Iterators */ diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c index ab50cf8b0a8..2134c02b63d 100644 --- a/source/blender/blenkernel/intern/library_query.c +++ b/source/blender/blenkernel/intern/library_query.c @@ -438,6 +438,8 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call ViewLayer *view_layer; for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) { + CALLBACK_INVOKE(view_layer->mat_override, IDWALK_CB_USER); + for (Base *base = view_layer->object_bases.first; base; base = base->next) { CALLBACK_INVOKE(base->object, IDWALK_CB_NOP); } diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 1529e6693fb..ab5f1a30d04 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -460,28 +460,6 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene) for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { ViewLayer *view_layer = BKE_view_layer_add(scene, srl->name); - if (srl->samples != 0) { - have_override = true; - - /* It is up to the external engine to handle - * its own doversion in this case. */ - BKE_override_view_layer_int_add( - view_layer, - ID_SCE, - "samples", - srl->samples); - } - - if (srl->mat_override) { - have_override = true; - - BKE_override_view_layer_datablock_add( - view_layer, - ID_MA, - "self", - (ID *)srl->mat_override); - } - if (srl->layflag & SCE_LAY_DISABLE) { view_layer->flag &= ~VIEW_LAYER_RENDER; } @@ -490,12 +468,11 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene) view_layer->flag &= ~VIEW_LAYER_FREESTYLE; } - /* XXX If we are to keep layflag it should be merged with flag (dfelinto). */ view_layer->layflag = srl->layflag; - /* XXX Not sure if we should keep the passes (dfelinto). */ view_layer->passflag = srl->passflag; - view_layer->pass_xor = srl->pass_xor; view_layer->pass_alpha_threshold = srl->pass_alpha_threshold; + view_layer->samples = srl->samples; + view_layer->mat_override = srl->mat_override; BKE_freestyle_config_free(&view_layer->freestyle_config, true); view_layer->freestyle_config = srl->freestyleConfig; diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc index 70bd533647c..ce3b2538274 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc @@ -151,6 +151,10 @@ void DepsgraphNodeBuilder::build_view_layer( LISTBASE_FOREACH (MovieClip *, clip, &bmain_->movieclip) { build_movieclip(clip); } + /* Material override. */ + if (view_layer->mat_override != NULL) { + build_material(view_layer->mat_override); + } /* Collections. */ add_operation_node(&scene->id, DEG_NODE_TYPE_LAYER_COLLECTIONS, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc index 866b5e63031..f77d47874a2 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc @@ -132,6 +132,10 @@ void DepsgraphRelationBuilder::build_view_layer(Scene *scene, ViewLayer *view_la LISTBASE_FOREACH (MovieClip *, clip, &bmain_->movieclip) { build_movieclip(clip); } + /* Material override. */ + if (view_layer->mat_override != NULL) { + build_material(view_layer->mat_override); + } /* Build all set scenes. */ if (scene->set != NULL) { ViewLayer *set_view_layer = BKE_view_layer_default_render(scene->set); diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h index c3e819c5538..d959d54b07f 100644 --- a/source/blender/makesdna/DNA_layer_types.h +++ b/source/blender/makesdna/DNA_layer_types.h @@ -76,9 +76,10 @@ typedef struct ViewLayer { /* Old SceneRenderLayer data. */ int layflag; int passflag; /* pass_xor has to be after passflag */ - int pass_xor; float pass_alpha_threshold; + int samples; + struct Material *mat_override; struct IDProperty *id_properties; /* Equivalent to datablocks ID properties. */ struct FreestyleConfig freestyle_config; diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 2d0838a04c5..d100449c353 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -194,7 +194,7 @@ typedef struct SceneRenderLayer { char name[64] DNA_DEPRECATED; /* MAX_NAME */ - struct Material *mat_override DNA_DEPRECATED; /* Converted to ViewLayer override. */ + struct Material *mat_override DNA_DEPRECATED; /* Converted to ViewLayer setting. */ unsigned int lay DNA_DEPRECATED; /* Converted to LayerCollection cycles camera visibility override. */ unsigned int lay_zmask DNA_DEPRECATED; /* Converted to LayerCollection cycles holdout override. */ @@ -205,7 +205,7 @@ typedef struct SceneRenderLayer { int passflag DNA_DEPRECATED; /* pass_xor has to be after passflag */ int pass_xor DNA_DEPRECATED; /* Converted to ViewLayer passflag and flag. */ - int samples DNA_DEPRECATED; /* Converted to ViewLayer override. */ + int samples DNA_DEPRECATED; /* Converted to ViewLayer setting. */ float pass_alpha_threshold DNA_DEPRECATED; /* Converted to ViewLayer pass_alpha_threshold. */ IDProperty *prop DNA_DEPRECATED; /* Converted to ViewLayer id_properties. */ diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 155c030587d..6e69de774e9 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -274,6 +274,7 @@ void rna_Scene_use_view_map_cache_update(struct Main *bmain, struct Scene *scene void rna_Scene_glsl_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); void rna_Scene_freestyle_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); void rna_ViewLayer_name_set(struct PointerRNA *ptr, const char *value); +void rna_ViewLayer_material_override_update(struct Main *bmain, struct Scene *activescene, struct PointerRNA *ptr); void rna_ViewLayer_pass_update(struct Main *bmain, struct Scene *activescene, struct PointerRNA *ptr); /* named internal so as not to conflict with obj.update() rna func */ diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 9389dcf81ef..f3f5371b458 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1424,6 +1424,13 @@ static void rna_SceneRenderView_name_set(PointerRNA *ptr, const char *value) BLI_uniquename(&scene->r.views, rv, DATA_("RenderView"), '.', offsetof(SceneRenderView, name), sizeof(rv->name)); } +void rna_ViewLayer_material_override_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) +{ + Scene *scene = (Scene *)ptr->id.data; + rna_Scene_glsl_update(bmain, scene, ptr); + DEG_relations_tag_update(bmain); +} + void rna_ViewLayer_pass_update(Main *bmain, Scene *activescene, PointerRNA *ptr) { Scene *scene = (Scene *)ptr->id.data; @@ -3227,6 +3234,19 @@ void rna_def_view_layer_common(StructRNA *srna, int scene) else RNA_def_property_clear_flag(prop, PROP_EDITABLE); if (scene) { + prop = RNA_def_property(srna, "material_override", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "mat_override"); + RNA_def_property_struct_type(prop, "Material"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Material Override", + "Material to override all other materials in this view layer"); + RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_material_override_update"); + + prop = RNA_def_property(srna, "samples", PROP_INT, PROP_UNSIGNED); + RNA_def_property_ui_text(prop, "Samples", "Override number of render samples for this view layer, " + "0 will use the scene setting"); + RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL); + prop = RNA_def_property(srna, "pass_alpha_threshold", PROP_FLOAT, PROP_FACTOR); RNA_def_property_ui_text(prop, "Alpha Threshold", "Z, Index, normal, UV and vector passes are only affected by surfaces with " diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index fc99be81ba3..7efe0a5da60 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -307,7 +307,6 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf BLI_strncpy(rl->name, view_layer->name, sizeof(rl->name)); rl->layflag = view_layer->layflag; rl->passflag = view_layer->passflag; /* for debugging: view_layer->passflag | SCE_PASS_RAYHITS; */ - rl->pass_xor = view_layer->pass_xor; rl->rectx = rectx; rl->recty = recty; -- cgit v1.2.3