From 095df1ac217f3e43667f94ab189a67175bcd7af5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 6 Jun 2019 14:36:40 +0200 Subject: Python API: allow external render engines to use Eevee for LookDev shading This is enabled with bl_use_eevee_viewport = True. It allows external engines to generate an Cycles/Eevee shader node setup to emulate their materials in the realtime viewport, or to leave it to users to do manually. Removed bl_use_exclude_layers and bl_use_shading_nodes that did nothing anymore. This should not break API compatibility, any scripts setting those should continue to work the same as before. Also adds descriptions for some RenderEngine settings. --- intern/cycles/blender/addon/__init__.py | 2 +- source/blender/draw/engines/eevee/eevee_engine.c | 2 +- source/blender/editors/space_view3d/view3d_draw.c | 11 +++++++---- source/blender/makesrna/intern/rna_render.c | 22 ++++++++++++++++------ source/blender/makesrna/intern/rna_space.c | 3 +-- source/blender/render/extern/include/RE_engine.h | 9 ++++----- 6 files changed, 30 insertions(+), 19 deletions(-) diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py index e05ed531a1f..4b838cce281 100644 --- a/intern/cycles/blender/addon/__init__.py +++ b/intern/cycles/blender/addon/__init__.py @@ -54,7 +54,7 @@ from . import ( class CyclesRender(bpy.types.RenderEngine): bl_idname = 'CYCLES' bl_label = "Cycles" - bl_use_shading_nodes = True + bl_use_eevee_viewport = True bl_use_preview = True bl_use_exclude_layers = True bl_use_save_buffers = True diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index 22f7b786330..cb2b3763c74 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -476,7 +476,7 @@ RenderEngineType DRW_engine_viewport_eevee_type = { NULL, EEVEE_ENGINE, N_("Eevee"), - RE_INTERNAL | RE_USE_SHADING_NODES | RE_USE_PREVIEW, + RE_INTERNAL | RE_USE_PREVIEW, NULL, &DRW_render_to_image, NULL, diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 2ce67bfbe4c..5731da18511 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1447,13 +1447,16 @@ RenderEngineType *ED_view3d_engine_type(Scene *scene, int drawtype) { /* * Temporary viewport draw modes until we have a proper system. - * all modes are done in the draw manager, except - * cycles material as it is an external render engine. + * all modes are done in the draw manager, except external render + * engines like Cycles. */ - if (strcmp(scene->r.engine, RE_engine_id_CYCLES) == 0 && drawtype == OB_MATERIAL) { + RenderEngineType *type = RE_engines_find(scene->r.engine); + if (drawtype == OB_MATERIAL && (type->flag & RE_USE_EEVEE_VIEWPORT)) { return RE_engines_find(RE_engine_id_BLENDER_EEVEE); } - return RE_engines_find(scene->r.engine); + else { + return type; + } } void view3d_main_region_draw(const bContext *C, ARegion *ar) diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 6c2cff96715..90c60c09181 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -844,31 +844,41 @@ static void rna_def_render_engine(BlenderRNA *brna) prop = RNA_def_property(srna, "bl_use_preview", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_PREVIEW); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_def_property_ui_text( + prop, + "Use Preview Render", + "Render engine supports being used for rendering previews of materials, lights and worlds"); prop = RNA_def_property(srna, "bl_use_postprocess", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", RE_USE_POSTPROCESS); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_def_property_ui_text(prop, "Use Post Processing", "Apply compositing on render results"); - prop = RNA_def_property(srna, "bl_use_shading_nodes", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SHADING_NODES); + prop = RNA_def_property(srna, "bl_use_eevee_viewport", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_EEVEE_VIEWPORT); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_def_property_ui_text( + prop, "Use Eevee Viewport", "Uses Eevee for viewport shading in LookDev shading mode"); prop = RNA_def_property(srna, "bl_use_shading_nodes_custom", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SHADING_NODES_CUSTOM); RNA_def_property_boolean_default(prop, true); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); - - prop = RNA_def_property(srna, "bl_use_exclude_layers", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_EXCLUDE_LAYERS); - RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_def_property_ui_text(prop, + "Use Custom Shading Nodes", + "Don't expose Cycles and Eevee shading nodes in the node editor user " + "interface, so own nodes can be used instead"); prop = RNA_def_property(srna, "bl_use_save_buffers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SAVE_BUFFERS); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_def_property_ui_text( + prop, "Use Save Buffers", "Support render to an on disk buffer during rendering"); prop = RNA_def_property(srna, "bl_use_spherical_stereo", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SPHERICAL_STEREO); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_def_property_ui_text(prop, "Use Spherical Stereo", "Support spherical stereo camera models"); RNA_define_verify_sdna(1); } diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 098384e8d51..12f5535dcc3 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -936,8 +936,7 @@ static void rna_3DViewShading_type_update(Main *bmain, Scene *scene, PointerRNA View3DShading *shading = ptr->data; if (shading->type == OB_MATERIAL || - (shading->type == OB_RENDER && - STR_ELEM(scene->r.engine, RE_engine_id_BLENDER_EEVEE, RE_engine_id_CYCLES))) { + (shading->type == OB_RENDER && !STREQ(scene->r.engine, RE_engine_id_BLENDER_WORKBENCH))) { /* When switching from workbench to render or material mode the geometry of any * active sculpt session needs to be recalculated. */ for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) { diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index 4f51f9874f8..dee8dbfaa24 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -55,11 +55,10 @@ struct bNodeTree; /* #define RE_FLAG_DEPRECATED 2 */ #define RE_USE_PREVIEW 4 #define RE_USE_POSTPROCESS 8 -#define RE_USE_SHADING_NODES 16 -#define RE_USE_EXCLUDE_LAYERS 32 -#define RE_USE_SAVE_BUFFERS 64 -#define RE_USE_SHADING_NODES_CUSTOM 256 -#define RE_USE_SPHERICAL_STEREO 512 +#define RE_USE_EEVEE_VIEWPORT 16 +#define RE_USE_SAVE_BUFFERS 32 +#define RE_USE_SHADING_NODES_CUSTOM 64 +#define RE_USE_SPHERICAL_STEREO 128 /* RenderEngine.flag */ #define RE_ENGINE_ANIMATION 1 -- cgit v1.2.3