[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