diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-06-05 09:15:30 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-06-05 12:38:33 +0300 |
commit | a3815f87773c7d45740c98c888718424d736870b (patch) | |
tree | 4cd46cb327fe76e1dfcde04dcdd99d1cc4a2e9b5 /source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl | |
parent | ade710500df4f333077daa96e3ab72eb2cdc3b94 (diff) |
Workbench: Matcaps T55291
- users can use their own matcaps
.config/blender/2.80/datafiles/studiolights/matcap/ folder
- upto 100 matcaps can be loaded
- color of the matcap is influenced by the color of the material/single
color etc. To show the plain matcap use single color at 1.0
- chosing a matcap is at lighting level (flat/studio/matcap)
- matcap only possible in solid mode
- also works for X-Ray mode
As the old matcaps are still in used by the clay engine I didn't remove
it yet.
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl | 37 |
1 files changed, 25 insertions, 12 deletions
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 5f37490603d..326837bc69f 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 @@ -11,6 +11,9 @@ uniform float lightMultiplier; uniform float shadowShift = 0.1; uniform mat3 normalWorldMatrix; +#ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL +uniform sampler2D matcapImage; +#endif layout(std140) uniform world_block { WorldData world_data; @@ -43,16 +46,21 @@ void main() #endif /* !V3D_SHADING_OBJECT_OUTLINE */ vec4 diffuse_color = texelFetch(colorBuffer, texel, 0); + /* Do we need normals */ #ifdef NORMAL_VIEWPORT_PASS_ENABLED -#ifdef WORKBENCH_ENCODE_NORMALS +# ifdef WORKBENCH_ENCODE_NORMALS vec3 normal_viewport = normal_decode(texelFetch(normalBuffer, texel, 0).rg); if (diffuse_color.a == 0.0) { normal_viewport = -normal_viewport; } -#else /* WORKBENCH_ENCODE_NORMALS */ +# else /* WORKBENCH_ENCODE_NORMALS */ vec3 normal_viewport = texelFetch(normalBuffer, texel, 0).rgb; -#endif /* WORKBENCH_ENCODE_NORMALS */ +# endif /* WORKBENCH_ENCODE_NORMALS */ +#endif + +#ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL + diffuse_color = texture(matcapImage, normal_viewport.xy / 2.0 + 0.5); #endif #ifdef V3D_SHADING_SPECULAR_HIGHLIGHT @@ -64,22 +72,27 @@ void main() vec3 specular_color = vec3(0.0); #endif +#ifdef V3D_LIGHTING_FLAT + vec3 diffuse_light = vec3(1.0); +#endif + +#ifdef V3D_LIGHTING_MATCAP + /* TODO: if pixel data is matcap. then */ + vec3 diffuse_light = texelFetch(specularBuffer, texel, 0).rgb; +#endif + #ifdef V3D_LIGHTING_STUDIO - #ifdef STUDIOLIGHT_ORIENTATION_CAMERA +# ifdef STUDIOLIGHT_ORIENTATION_CAMERA vec3 diffuse_light = get_camera_diffuse_light(world_data, normal_viewport); - #endif +# endif - #ifdef STUDIOLIGHT_ORIENTATION_WORLD +# ifdef STUDIOLIGHT_ORIENTATION_WORLD vec3 normal_world = normalWorldMatrix * normal_viewport; vec3 diffuse_light = get_world_diffuse_light(world_data, normal_world); - #endif +# endif +#endif vec3 shaded_color = diffuse_light * diffuse_color.rgb + specular_color; -#else /* V3D_LIGHTING_STUDIO */ - vec3 shaded_color = diffuse_color.rgb + specular_color; - -#endif /* V3D_LIGHTING_STUDIO */ - #ifdef V3D_SHADING_SHADOW float light_factor = -dot(normal_viewport, world_data.light_direction_vs.xyz); /* The step function might be ok for meshes but it's |