[Bf-blender-cvs] [a305652d87b] blender2.8: Workbench: Diffuse studio lighting

Jeroen Bakker noreply at git.blender.org
Thu Apr 19 14:49:49 CEST 2018


Commit: a305652d87b7d14562e8e22aefe9073f34d2f06e
Author: Jeroen Bakker
Date:   Thu Apr 19 14:48:53 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBa305652d87b7d14562e8e22aefe9073f34d2f06e

Workbench: Diffuse studio lighting

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

M	source/blender/draw/engines/workbench/shaders/solid_studio_frag.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_diffuse_lib.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_studio_vert.glsl

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

diff --git a/source/blender/draw/engines/workbench/shaders/solid_studio_frag.glsl b/source/blender/draw/engines/workbench/shaders/solid_studio_frag.glsl
index 46f5409e4ca..96e65e2919e 100644
--- a/source/blender/draw/engines/workbench/shaders/solid_studio_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/solid_studio_frag.glsl
@@ -1,11 +1,29 @@
 uniform vec3 color;
+uniform vec3 light_direction = vec3(0.0, 0.0, 1.0);
 
-in vec3 normal;
+uniform vec3 world_diffuse_light_xp = vec3(0.5, 0.5, 0.6);
+uniform vec3 world_diffuse_light_xn = vec3(0.5, 0.5, 0.6);
+uniform vec3 world_diffuse_light_yp = vec3(0.5, 0.5, 0.6);
+uniform vec3 world_diffuse_light_yn = vec3(0.5, 0.5, 0.6);
+uniform vec3 world_diffuse_light_zp = vec3(0.8, 0.8, 0.8);
+uniform vec3 world_diffuse_light_zn = vec3(0.0, 0.0, 0.0);
+
+in vec3 normal_viewport;
 out vec4 fragColor;
+#define USE_WORLD_DIFFUSE
+#define AMBIENT_COLOR vec3(0.2, 0.2, 0.2)
 
 void main()
 {
-	float intensity = lambert_diffuse(vec3(0.0, 0.0, 1.0), normal);
+
+#ifdef USE_WORLD_DIFFUSE
+	vec3 diffuse_light_color = get_world_diffuse_light(normal_viewport, world_diffuse_light_xp, world_diffuse_light_xn, world_diffuse_light_yp, world_diffuse_light_yn, world_diffuse_light_zp, world_diffuse_light_zn);
+	vec3 shaded_color = (AMBIENT_COLOR + diffuse_light_color)  * color;
+
+#else
+	float intensity = lambert_diffuse(light_direction, normal_viewport);
 	vec3 shaded_color = color * intensity;
+
+#endif
 	fragColor = vec4(shaded_color, 1.0);
 }
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_diffuse_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_diffuse_lib.glsl
index c4ac62c2cfc..22a55a386f7 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_diffuse_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_diffuse_lib.glsl
@@ -1,3 +1,21 @@
-float lambert_diffuse(vec3 light_direction, vec3 surface_normal) {
-	return max(0.0, dot(light_direction, surface_normal));
+float normalized_dot(vec3 v1, vec3 v2)
+{
+	return max(0.0, dot(v1, v2));
 }
+
+float lambert_diffuse(vec3 light_direction, vec3 surface_normal)
+{
+	return normalized_dot(light_direction, surface_normal);
+}
+
+vec3 get_world_diffuse_light(vec3 N, vec3 xp, vec3 xn, vec3 yp, vec3 yn, vec3 zp, vec3 zn)
+{
+	vec3 result = vec3(0.0, 0.0, 0.0);
+	result = mix(result, xp, normalized_dot(vec3( 1.0,  0.0,  0.0), N));
+	result = mix(result, xn, normalized_dot(vec3(-1.0,  0.0,  0.0), N));
+	result = mix(result, yp, normalized_dot(vec3( 0.0,  1.0,  0.0), N));
+	result = mix(result, yn, normalized_dot(vec3( 0.0, -1.0,  0.0), N));
+	result = mix(result, zp, normalized_dot(vec3( 0.0,  0.0,  1.0), N));
+	result = mix(result, zn, normalized_dot(vec3( 0.0,  0.0, -1.0), N));
+	return result;
+}
\ No newline at end of file
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_studio_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_studio_vert.glsl
index 819caa6e807..2da5deabfc2 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_studio_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_studio_vert.glsl
@@ -4,10 +4,10 @@ uniform mat3 NormalMatrix;
 in vec3 pos;
 in vec3 nor;
 
-out vec3 normal;
+out vec3 normal_viewport;
 
 void main()
 {
-	normal = normalize(NormalMatrix * nor);
+	normal_viewport = normalize(NormalMatrix * nor);
 	gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
 }



More information about the Bf-blender-cvs mailing list