Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-04-25 22:33:59 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-04-25 22:33:59 +0300
commit6c1a121aef0e2a1fb06121a44d3d57eca20a003e (patch)
treed15f56b811585167a29a2cc5893c66d5f5ad1186 /source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
parentfa4388669005b9ca0cf0bc3855ee0c0e183c3b3a (diff)
Workbench: normal packing
Normal packing. The sign is stored in the A of the color buffer. if the A == 1.0 the normal should be inverted. before use. The reason is that packing has more precision for frontfaces, than for backfaces
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl14
1 files changed, 9 insertions, 5 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
index 89e5b882536..6a5d6c71aba 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
@@ -40,18 +40,22 @@ void main()
}
#endif /* !V3D_DRAWOPTION_OBJECT_OVERLAP */
- vec3 diffuse_color = texelFetch(colorBuffer, texel, 0).rgb;
#ifdef V3D_LIGHTING_STUDIO
+ vec4 diffuse_color = texelFetch(colorBuffer, texel, 0);
#ifdef WORKBENCH_ENCODE_NORMALS
- vec3 normal_viewport = normal_decode(texelFetch(normalBuffer, texel, 0).rgb);
-#else
+ vec3 normal_viewport = normal_decode(texelFetch(normalBuffer, texel, 0).rg);
+ if (diffuse_color.a == 1.0) {
+ normal_viewport = - normal_viewport;
+ }
+#else /* WORKBENCH_ENCODE_NORMALS */
vec3 normal_viewport = texelFetch(normalBuffer, texel, 0).rgb;
-#endif
+#endif /* WORKBENCH_ENCODE_NORMALS */
vec3 diffuse_light = get_world_diffuse_light(world_data, normal_viewport);
- vec3 shaded_color = diffuse_light * diffuse_color;
+ vec3 shaded_color = diffuse_light * diffuse_color.rgb;
#else /* V3D_LIGHTING_STUDIO */
+ vec3 diffuse_color = texelFetch(colorBuffer, texel, 0).rgb;
vec3 shaded_color = diffuse_color;
#endif /* V3D_LIGHTING_STUDIO */