Workbench: Diffuse studio lighting
This commit is contained in:
parent
0a679c6b68
commit
a305652d87
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue