Commit: 5f97331ffc2987295c09e3a54dc60095c2b21db0
Author: Jeroen Bakker
Date:   Wed Apr 25 15:59:15 2018 +0200
Branches: blender2.8-workbench
https://developer.blender.org/rB5f97331ffc2987295c09e3a54dc60095c2b21db0

Workbench: Added studio lighting to view layer

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

M       release/scripts/startup/bl_ui/properties_render.py
M       source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
M       
source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
M       source/blender/draw/engines/workbench/workbench_engine.c
M       source/blender/draw/engines/workbench/workbench_materials.c
M       source/blender/draw/engines/workbench/workbench_private.h
M       source/blender/makesrna/intern/rna_layer.c

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

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(diffu

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to