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
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-04-25 16:59:15 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-04-25 16:59:15 +0300
commit5f97331ffc2987295c09e3a54dc60095c2b21db0 (patch)
tree17a77d877de4e4cf9c6c8504401206ec91dd9a5e /source/blender
parentc392f2448c2ecd4a52b89fda12e0730a01c6416d (diff)
Workbench: Added studio lighting to view layer
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl12
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl12
-rw-r--r--source/blender/draw/engines/workbench/workbench_engine.c24
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c15
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h12
-rw-r--r--source/blender/makesrna/intern/rna_layer.c75
6 files changed, 125 insertions, 25 deletions
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