diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-25 16:59:15 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-25 16:59:15 +0300 |
commit | 5f97331ffc2987295c09e3a54dc60095c2b21db0 (patch) | |
tree | 17a77d877de4e4cf9c6c8504401206ec91dd9a5e | |
parent | c392f2448c2ecd4a52b89fda12e0730a01c6416d (diff) |
Workbench: Added studio lighting to view layer
7 files changed, 149 insertions, 25 deletions
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 9fa2e5a0f84..571826dbdc5 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -763,6 +763,29 @@ class RENDER_PT_eevee_film(RenderButtonsPanel, Panel): col.prop(rd, "alpha_mode", text="Alpha") +class RENDER_PT_workbench_environment_light(RenderButtonsPanel, Panel): + bl_label = "Workbench Environment Light" + bl_options = {'DEFAULT_CLOSED'} + COMPAT_ENGINES = {'BLENDER_WORKBENCH'} + + @classmethod + def poll(cls, context): + return (context.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + scene = context.scene + props = scene.layer_properties['BLENDER_WORKBENCH'] + + col = layout.column() + col.prop(props, "diffuse_light_x_pos") + col.prop(props, "diffuse_light_x_neg") + col.prop(props, "diffuse_light_y_pos") + col.prop(props, "diffuse_light_y_neg") + col.prop(props, "diffuse_light_z_pos") + col.prop(props, "diffuse_light_z_neg") + + classes = ( RENDER_MT_presets, RENDER_MT_ffmpeg_presets, @@ -789,6 +812,7 @@ classes = ( RENDER_PT_eevee_motion_blur, RENDER_PT_eevee_depth_of_field, RENDER_PT_eevee_bloom, + RENDER_PT_workbench_environment_light, ) if __name__ == "__main__": # only for live edit. diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl index 11497778fa4..a698a5afeaa 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl @@ -1,10 +1,10 @@ struct WorldData { - vec4 diffuse_light_xp; - vec4 diffuse_light_xn; - vec4 diffuse_light_yp; - vec4 diffuse_light_yn; - vec4 diffuse_light_zp; - vec4 diffuse_light_zn; + vec4 diffuse_light_x_pos; + vec4 diffuse_light_x_neg; + vec4 diffuse_light_y_pos; + vec4 diffuse_light_y_neg; + vec4 diffuse_light_z_pos; + vec4 diffuse_light_z_neg; vec4 background_color_low; vec4 background_color_high; }; diff --git a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl index 9257cae3e1d..b6b13a117c5 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl @@ -1,9 +1,9 @@ vec3 get_world_diffuse_light(WorldData world_data, vec3 N) { - vec4 result = world_data.diffuse_light_xp * clamp(N.x, 0.0, 1.0); - result = mix(result, world_data.diffuse_light_xn, clamp(-N.x, 0.0, 1.0)); - result = mix(result, world_data.diffuse_light_yp, clamp( N.y, 0.0, 1.0)); - result = mix(result, world_data.diffuse_light_yn, clamp(-N.y, 0.0, 1.0)); - result = mix(result, world_data.diffuse_light_zp, clamp( N.z, 0.0, 1.0)); - return mix(result, world_data.diffuse_light_zn, clamp(-N.z, 0.0, 1.0)).xyz; + vec4 result = world_data.diffuse_light_x_pos * clamp(N.x, 0.0, 1.0); + result = mix(result, world_data.diffuse_light_x_neg, clamp(-N.x, 0.0, 1.0)); + result = mix(result, world_data.diffuse_light_y_pos, clamp( N.y, 0.0, 1.0)); + result = mix(result, world_data.diffuse_light_y_neg, clamp(-N.y, 0.0, 1.0)); + result = mix(result, world_data.diffuse_light_z_pos, clamp( N.z, 0.0, 1.0)); + return mix(result, world_data.diffuse_light_z_neg, clamp(-N.z, 0.0, 1.0)).xyz; } diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c index 689bdd4111b..4c95eaf7b3b 100644 --- a/source/blender/draw/engines/workbench/workbench_engine.c +++ b/source/blender/draw/engines/workbench/workbench_engine.c @@ -51,6 +51,28 @@ static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engi BKE_collection_engine_property_add_float(props, "random_object_color_saturation", 0.5f); BKE_collection_engine_property_add_float(props, "random_object_color_value", 0.9f); + +} + +static void workbench_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +{ + BLI_assert(props && + props->type == IDP_GROUP && + props->subtype == IDP_GROUP_SUB_ENGINE_RENDER); + + const float diffuse_x_pos[3] = {0.8, 0.8, 1.0}; + const float diffuse_x_neg[3] = {0.8, 0.8, 1.0}; + const float diffuse_y_pos[3] = {1.0, 1.0, 1.0}; + const float diffuse_y_neg[3] = {0.8, 0.8, 1.0}; + const float diffuse_z_pos[3] = {1.0, 1.0, 1.0}; + const float diffuse_z_neg[3] = {0.5, 0.5, 0.5}; + + BKE_collection_engine_property_add_float_array(props, "diffuse_light_x_pos", diffuse_x_pos, 3); + BKE_collection_engine_property_add_float_array(props, "diffuse_light_x_neg", diffuse_x_neg, 3); + BKE_collection_engine_property_add_float_array(props, "diffuse_light_y_pos", diffuse_y_pos, 3); + BKE_collection_engine_property_add_float_array(props, "diffuse_light_y_neg", diffuse_y_neg, 3); + BKE_collection_engine_property_add_float_array(props, "diffuse_light_z_pos", diffuse_z_pos, 3); + BKE_collection_engine_property_add_float_array(props, "diffuse_light_z_neg", diffuse_z_neg, 3); } /* Note: currently unused, we may want to register so we can see this when debugging the view. */ @@ -58,7 +80,7 @@ static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engi RenderEngineType DRW_engine_viewport_workbench_type = { NULL, NULL, WORKBENCH_ENGINE, N_("Workbench"), RE_INTERNAL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, &workbench_layer_collection_settings_create, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, &workbench_layer_collection_settings_create, &workbench_view_layer_settings_create, &draw_engine_workbench_solid, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index 69fe37fd96e..934849caf55 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -233,6 +233,9 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata) WORKBENCH_PrivateData *wpd = stl->g_data; DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); DRWShadingGroup *grp; + const DRWContextState *draw_ctx = DRW_context_state_get(); + ViewLayer *view_layer = draw_ctx->view_layer; + IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_WORKBENCH); const DRWContextState *DCS = DRW_context_state_get(); @@ -252,14 +255,14 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata) /* Deferred Mix Pass */ { WORKBENCH_UBO_World *wd = &wpd->world_data; - wd->diffuse_light_xp[0] = 0.8; wd->diffuse_light_xp[1] = 0.8; wd->diffuse_light_xp[2] = 1.0; - wd->diffuse_light_xn[0] = 0.8; wd->diffuse_light_xn[1] = 0.8; wd->diffuse_light_xn[2] = 1.0; - wd->diffuse_light_yp[0] = 0.8; wd->diffuse_light_yp[1] = 0.8; wd->diffuse_light_yp[2] = 1.0; - wd->diffuse_light_yn[0] = 0.8; wd->diffuse_light_yn[1] = 0.8; wd->diffuse_light_yn[2] = 1.0; - wd->diffuse_light_zp[0] = 1.0; wd->diffuse_light_zp[1] = 1.0; wd->diffuse_light_zp[2] = 1.0; - wd->diffuse_light_zn[0] = 0.0; wd->diffuse_light_zn[1] = 0.0; wd->diffuse_light_zn[2] = 0.0; UI_GetThemeColor3fv(UI_GetThemeValue(TH_SHOW_BACK_GRAD)?TH_LOW_GRAD:TH_HIGH_GRAD, wd->background_color_low); UI_GetThemeColor3fv(TH_HIGH_GRAD, wd->background_color_high); + copy_v3_v3(wd->diffuse_light_x_pos, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_x_pos")); + copy_v3_v3(wd->diffuse_light_x_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_x_neg")); + copy_v3_v3(wd->diffuse_light_y_pos, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_y_pos")); + copy_v3_v3(wd->diffuse_light_y_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_y_neg")); + copy_v3_v3(wd->diffuse_light_z_pos, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_z_pos")); + copy_v3_v3(wd->diffuse_light_z_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_z_neg")); psl->composite_pass = DRW_pass_create("Composite", DRW_STATE_WRITE_COLOR); grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_pass); diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index 079a0759731..e1622b42e4c 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -55,12 +55,12 @@ typedef struct WORKBENCH_Data { } WORKBENCH_Data; typedef struct WORKBENCH_UBO_World { - float diffuse_light_xp[4]; - float diffuse_light_xn[4]; - float diffuse_light_yp[4]; - float diffuse_light_yn[4]; - float diffuse_light_zp[4]; - float diffuse_light_zn[4]; + float diffuse_light_x_pos[4]; + float diffuse_light_x_neg[4]; + float diffuse_light_y_pos[4]; + float diffuse_light_y_neg[4]; + float diffuse_light_z_pos[4]; + float diffuse_light_z_neg[4]; float background_color_low[4]; float background_color_high[4]; } WORKBENCH_UBO_World; diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c index 521938ea55f..b74cdb5f0a5 100644 --- a/source/blender/makesrna/intern/rna_layer.c +++ b/source/blender/makesrna/intern/rna_layer.c @@ -364,8 +364,16 @@ RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(hair_brightness_randomness) #endif /* WITH_CLAY_ENGINE */ /* workbench engine */ +/* Collection settings */ RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT(random_object_color_saturation) RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT(random_object_color_value) +/* View Layer settings */ +RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(diffuse_light_x_pos, 3) +RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(diffuse_light_x_neg, 3) +RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(diffuse_light_y_pos, 3) +RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(diffuse_light_y_neg, 3) +RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(diffuse_light_z_pos, 3) +RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(diffuse_light_z_neg, 3) /* eevee engine */ /* ViewLayer settings. */ @@ -532,6 +540,9 @@ static StructRNA *rna_ViewLayerSettings_refine(PointerRNA *ptr) if (STREQ(props->name, RE_engine_id_BLENDER_EEVEE)) { return &RNA_ViewLayerEngineSettingsEevee; } + else if (STREQ(props->name, RE_engine_id_BLENDER_WORKBENCH)) { + return &RNA_ViewLayerEngineSettingsWorkbench; + } break; case IDP_GROUP_SUB_MODE_OBJECT: case IDP_GROUP_SUB_MODE_EDIT: @@ -1679,6 +1690,67 @@ static void rna_def_layer_collection_engine_settings_clay(BlenderRNA *brna) #endif /* WITH_CLAY_ENGINE */ /* Workbench engine */ +static void rna_def_view_layer_engine_settings_workbench(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "ViewLayerEngineSettingsWorkbench", "ViewLayerSettings"); + RNA_def_struct_ui_text(srna, "Workbench Scene Layer Settings", "Workbench Engine settings"); + + RNA_define_verify_sdna(0); /* not in sdna */ + + prop = RNA_def_property(srna, "diffuse_light_x_pos", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Workbench_diffuse_light_x_pos_get", "rna_LayerEngineSettings_Workbench_diffuse_light_x_pos_set", NULL); + RNA_def_property_ui_text(prop, "Diffuse +X Light", "Diffuse light color in positive X direction"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update"); + + prop = RNA_def_property(srna, "diffuse_light_x_neg", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Workbench_diffuse_light_x_neg_get", "rna_LayerEngineSettings_Workbench_diffuse_light_x_neg_set", NULL); + RNA_def_property_ui_text(prop, "Diffuse -X Light", "Diffuse light color in negative X direction"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update"); + + prop = RNA_def_property(srna, "diffuse_light_y_pos", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Workbench_diffuse_light_y_pos_get", "rna_LayerEngineSettings_Workbench_diffuse_light_y_pos_set", NULL); + RNA_def_property_ui_text(prop, "Diffuse +Y Light", "Diffuse light color in positive Y direction"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update"); + + prop = RNA_def_property(srna, "diffuse_light_y_neg", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Workbench_diffuse_light_y_neg_get", "rna_LayerEngineSettings_Workbench_diffuse_light_y_neg_set", NULL); + RNA_def_property_ui_text(prop, "Diffuse -Y Light", "Diffuse light color in negative Y direction"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update"); + + prop = RNA_def_property(srna, "diffuse_light_z_pos", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Workbench_diffuse_light_z_pos_get", "rna_LayerEngineSettings_Workbench_diffuse_light_z_pos_set", NULL); + RNA_def_property_ui_text(prop, "Diffuse +Z Light", "Diffuse light color in positive Z direction"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update"); + + prop = RNA_def_property(srna, "diffuse_light_z_neg", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Workbench_diffuse_light_z_neg_get", "rna_LayerEngineSettings_Workbench_diffuse_light_z_neg_set", NULL); + RNA_def_property_ui_text(prop, "Diffuse -Z Light", "Diffuse light color in negative Z direction"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update"); + + RNA_define_verify_sdna(1); /* not in sdna */ +} + static void rna_def_layer_collection_engine_settings_workbench(BlenderRNA *brna) { StructRNA *srna; @@ -1702,6 +1774,8 @@ static void rna_def_layer_collection_engine_settings_workbench(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update"); + + RNA_define_verify_sdna(1); /* not in sdna */ } static void rna_def_layer_collection_mode_settings_object(BlenderRNA *brna) @@ -1877,6 +1951,7 @@ static void rna_def_view_layer_settings(BlenderRNA *brna) #ifdef WITH_CLAY_ENGINE rna_def_view_layer_engine_settings_clay(brna); #endif + rna_def_view_layer_engine_settings_workbench(brna); rna_def_view_layer_engine_settings_eevee(brna); #if 0 |