[Bf-blender-cvs] [c450966e956] blender2.8: Workbench: Material specific settings for the specular

Jeroen Bakker noreply at git.blender.org
Fri Jun 1 11:03:41 CEST 2018


Commit: c450966e9562eb352b869f3b554d60a42dea2fa1
Author: Jeroen Bakker
Date:   Thu May 31 13:32:53 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBc450966e9562eb352b869f3b554d60a42dea2fa1

Workbench: Material specific settings for the specular

- Uses the roughness setting of the basic eevee material
- renamed gloss_mir to roughness
- set default of roughness to 0.25
- renamed ray_mirror to metallic
- cleaned up material rna (BI mirror struct)
- use BLINN phong model
- normalize incoming/outgoing specular light
- when using camera oriented studiolight, the SolidLight will be used
for specular highlights
- EXPERIMENT: when in world oriented studiolight only the shadow direction will be used.
- change the settings of the internal light to make scenes more
readable

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

M	release/scripts/startup/bl_ui/properties_material.py
M	release/scripts/startup/bl_ui/properties_scene.py
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/studiolight.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/collada/DocumentImporter.cpp
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
M	source/blender/draw/engines/workbench/workbench_data.c
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/engines/workbench/workbench_materials.c
M	source/blender/draw/engines/workbench/workbench_private.h
M	source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
M	source/blender/makesdna/DNA_material_types.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_material.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py
index 56e87f3799e..5046a10b9c9 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -174,9 +174,9 @@ class EEVEE_MATERIAL_PT_surface(MaterialButtonsPanel, Panel):
         else:
             raym = mat.raytrace_mirror
             layout.prop(mat, "diffuse_color", text="Base Color")
-            layout.prop(raym, "reflect_factor", text="Metallic")
+            layout.prop(raym, "metallic")
             layout.prop(mat, "specular_intensity", text="Specular")
-            layout.prop(raym, "gloss_factor", text="Roughness")
+            layout.prop(mat, "roughness")
 
 
 class EEVEE_MATERIAL_PT_options(MaterialButtonsPanel, Panel):
@@ -228,10 +228,12 @@ class MATERIAL_PT_viewport(MaterialButtonsPanel, Panel):
         mat = context.material
 
         layout = self.layout
-        split = layout.split()
+        layout.use_property_split = True
 
-        col = split.column(align=True)
+        col = layout.column()
         col.prop(mat, "diffuse_color")
+        col.prop(mat, "specular_color")
+        col.prop(mat, "roughness")
 
 
 classes = (
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 23714584acd..731a4586e42 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -439,10 +439,11 @@ class SCENE_PT_viewport_display(SceneButtonsPanel, Panel):
 
     def draw(self, context):
         layout = self.layout
+        layout.use_property_split = True
         scene = context.scene
-        layout.prop(scene.display, "light_direction", text="")
-        layout.prop(scene.display, "shadow_shift")
-        layout.prop(scene.display, "roughness")
+        col = layout.column()
+        col.prop(scene.display, "light_direction")
+        col.prop(scene.display, "shadow_shift")
 
 
 class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 404761d2c36..c98e8ff109c 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -116,7 +116,7 @@ void BKE_material_init(Material *ma)
 	ma->alpha = 1.0;
 	ma->spec = 0.5;
 
-	ma->gloss_mir = 1.0;
+	ma->roughness = 0.25f;
 	
 	ma->pr_lamp = 3;         /* two lamps, is bits */
 	ma->pr_type = MA_SPHERE;
diff --git a/source/blender/blenkernel/intern/studiolight.c b/source/blender/blenkernel/intern/studiolight.c
index 76b655f1fa5..fa8516a0a01 100644
--- a/source/blender/blenkernel/intern/studiolight.c
+++ b/source/blender/blenkernel/intern/studiolight.c
@@ -631,10 +631,10 @@ void BKE_studiolight_init(void)
 	sl->flag = STUDIOLIGHT_DIFFUSE_LIGHT_CALCULATED | STUDIOLIGHT_ORIENTATION_CAMERA;
 	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_X_POS], 0.0f);
 	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_X_NEG], 0.0f);
-	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Y_POS], 1.0f);
+	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Y_POS], 0.8f);
 	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Y_NEG], 0.0f);
-	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Z_POS], 0.0f);
-	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Z_NEG], 0.0f);
+	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Z_POS], 0.2f);
+	copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Z_NEG], 0.1f);
 	BLI_addtail(&studiolights, sl);
 
 	studiolight_add_files_from_datafolder(BLENDER_SYSTEM_DATAFILES, STUDIOLIGHT_CAMERA_FOLDER, STUDIOLIGHT_ORIENTATION_CAMERA);
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 67f53d4d952..50ed9bfd146 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1493,13 +1493,24 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
 				part->rad_scale = 0.01f;
 			}
 		}
-	}
 
+	}
 	{
-		if (!DNA_struct_elem_find(fd->filesdna, "SceneDisplay", "float", "roughness")) {
-			for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
-				scene->display.roughness = 0.5f;
+		if (!DNA_struct_elem_find(fd->filesdna, "Material", "float", "roughness")) {
+			for (Material *mat = main->mat.first; mat; mat = mat->id.next) {
+				if (mat->use_nodes) {
+					if (MAIN_VERSION_ATLEAST(main, 280, 0)) {
+						mat->roughness = mat->gloss_mir;
+					} else {
+						mat->roughness = 0.25f;
+					}
+				}
+				else {
+					mat->roughness = 1.0f - mat->gloss_mir;
+				}
+				mat->metallic = mat->ray_mirror;
 			}
+
 			for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
 				for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
 					for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index 89015f45e5a..47b720614ea 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -797,7 +797,7 @@ void DocumentImporter::write_profile_COMMON(COLLADAFW::EffectCommon *ef, Materia
 #endif
 	}
 	// reflectivity
-	ma->ray_mirror = ef->getReflectivity().getFloatValue();
+	ma->metallic = ef->getReflectivity().getFloatValue();
 	// index of refraction
 #if 0
 	ma->ang = ef->getIndexOfRefraction().getFloatValue();
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 85c312d311c..42e81373914 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1117,9 +1117,9 @@ static void material_opaque(
 	EEVEE_LampsInfo *linfo = sldata->lamps;
 
 	float *color_p = &ma->r;
-	float *metal_p = &ma->ray_mirror;
+	float *metal_p = &ma->metallic;
 	float *spec_p = &ma->spec;
-	float *rough_p = &ma->gloss_mir;
+	float *rough_p = &ma->roughness;
 
 	const bool use_gpumat = (ma->use_nodes && ma->nodetree);
 	const bool use_refract = ((ma->blend_flag & MA_BL_SS_REFRACTION) != 0) &&
@@ -1297,9 +1297,9 @@ static void material_transparent(
 	        ((stl->effects->enabled_effects & EFFECT_REFRACT) != 0)
 	);
 	float *color_p = &ma->r;
-	float *metal_p = &ma->ray_mirror;
+	float *metal_p = &ma->metallic;
 	float *spec_p = &ma->spec;
-	float *rough_p = &ma->gloss_mir;
+	float *rough_p = &ma->roughness;
 
 	if (ma->use_nodes && ma->nodetree) {
 		static float error_col[3] = {1.0f, 0.0f, 1.0f};
@@ -1605,9 +1605,9 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sld
 				}
 
 				float *color_p = &ma->r;
-				float *metal_p = &ma->ray_mirror;
+				float *metal_p = &ma->metallic;
 				float *spec_p = &ma->spec;
-				float *rough_p = &ma->gloss_mir;
+				float *rough_p = &ma->roughness;
 
 				shgrp = DRW_shgroup_hair_create(
 				        ob, psys, md,
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
index 88b715f55a8..39c6863e71c 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
@@ -1,5 +1,7 @@
 #define NO_OBJECT_ID uint(0)
 #define EPSILON 0.00001
+#define M_PI 3.14159265358979323846
+
 /* 4x4 bayer matrix prepared for 8bit UNORM precision error. */
 #define P(x) (((x + 0.5) * (1.0 / 16.0) - 0.5) * (1.0 / 255.0))
 const vec4 dither_mat4x4[4] = vec4[4](
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 c826a5b82fa..fc076ee8117 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
@@ -1,3 +1,8 @@
+struct LightData {
+	vec4 light_direction_vs;
+	vec4 specular_color;
+};
+
 struct WorldData {
 	vec4 diffuse_light_x_pos;
 	vec4 diffuse_light_x_neg;
@@ -9,5 +14,13 @@ struct WorldData {
 	vec4 background_color_high;
 	vec4 object_outline_color;
 	vec4 light_direction_vs;
-	float specular_sharpness;
+	LightData lights[3];
+	int num_lights;
+	int pad[3];
+};
+
+struct MaterialData {
+	vec4 diffuse_color;
+	vec4 specular_color;
+	float roughness;
 };
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
index 7374dfbe79e..269911189fa 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
@@ -2,6 +2,7 @@ out vec4 fragColor;
 
 uniform usampler2D objectId;
 uniform sampler2D colorBuffer;
+uniform sampler2D specularBuffer;
 uniform sampler2D normalBuffer;
 /* normalBuffer contains viewport normals */
 uniform vec2 invertedViewportSize;
@@ -54,6 +55,14 @@ void main()
 #endif /* WORKBENCH_ENCODE_NORMALS */
 #endif
 
+#ifdef V3D_SHADING_SPECULAR_HIGHLIGHT
+	/* XXX Should calculate the correct VS Incoming direction */
+	vec3 I_vs = vec3(0.0, 0.0, 1.0);
+	vec4 specular_data = texelFetch(specularBuffer, texel, 0);
+	vec3 specular_color = get_world_specular_lights(world_data, specular_data, normal_viewport, I_vs);
+#else
+	vec3 specular_color = vec3(0.0);
+#endif
 
 #ifdef V3D_LIGHTING_STUDIO
   #ifdef STUDIOLIGHT_ORIENTATION_CAMERA
@@ -64,20 +73,11 @@ void main()
 	vec3 normal_world = normalWorldMatrix * normal_viewport;
 	vec3 diffuse_light = get_world_diffuse_light(world_data, normal_world);
   #endif
-
-	vec3 specular_color = get_world_specular_light(world_data, normal_viewport, vec3(0.0, 0.0, 1.0));
 	vec3 shaded_color = diffuse_light * diffuse_color.rgb + specular_color;
 
 #else /* V3D_LIGHTING_STUDIO */
-  #ifdef V3D_SHADING_SPECULAR_HIGHLIGHT
-	vec3 specular_color = get_world_specular_light(world_data, normal_viewport, vec3(0.0, 0.0, 1.0));
 	vec3 shaded_color = diffuse_color.rgb + specular_color;
 
-  #else /* V3D_SHADING_SPECULAR_HIGHLIGHT

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list