diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-25 22:33:59 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-25 22:33:59 +0300 |
commit | 6c1a121aef0e2a1fb06121a44d3d57eca20a003e (patch) | |
tree | d15f56b811585167a29a2cc5893c66d5f5ad1186 /source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl | |
parent | fa4388669005b9ca0cf0bc3855ee0c0e183c3b3a (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.glsl | 14 |
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 */ |