diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-06-09 13:28:22 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-06-09 13:44:56 +0300 |
commit | 337aab59e97412e45f331cd8ec035dd54d87c71c (patch) | |
tree | e242b9907d9d3a09fc3d852418f4aabfb0b8a20a /source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl | |
parent | a1b42b79b316608a60e811458e7854266ce6ea5f (diff) |
Workbench: Matcaps: Fix matcap under perspective.
This fixes the problem that matcaps have when using a very larg FOV in
perspective view.
This was because it was stupidly using the normal direction which can not
aligned with the view vector under perspective.
So to workaround this problem we don't use the normal as is, but compute
how much it's facing the camera.
This changes how matcaps looks in perspective because they now always use
the full range of the matcap (which is expected).
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 | 8 |
1 files changed, 3 insertions, 5 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 4ae62352e16..461fb2fb130 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 @@ -67,11 +67,9 @@ void main() vec3 I_vs = view_vector_from_screen_uv(uv_viewport, viewvecs, ProjectionMatrix); #ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL - vec2 matcap_uv = normal_viewport.xy / 2.0 + 0.5; - if (world_data.matcap_orientation != 0) { - matcap_uv.x = 1.0 - matcap_uv.x; - } - diffuse_color = texture(matcapImage, matcap_uv); + bool flipped = world_data.matcap_orientation != 0; + vec2 matcap_uv = matcap_uv_compute(I_vs, normal_viewport, flipped); + diffuse_color = textureLod(matcapImage, matcap_uv, 0.0); #endif #ifdef V3D_SHADING_SPECULAR_HIGHLIGHT |