diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-25 17:57:18 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-04-25 17:57:18 +0300 |
commit | fa4388669005b9ca0cf0bc3855ee0c0e183c3b3a (patch) | |
tree | 6f58ad9a8ac22078a47d523366452605bf7b84e0 /source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl | |
parent | 5f97331ffc2987295c09e3a54dc60095c2b21db0 (diff) |
Workbench: make normal packing optional
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl index 8b03b058301..008ab90d7a3 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl @@ -15,21 +15,27 @@ float bayer_dither_noise() { /* From http://aras-p.info/texts/CompactNormalStorage.html * Using Method #4: Spheremap Transform */ -vec3 normal_decode(vec2 enc) +vec3 normal_decode(vec3 enc) { - vec2 fenc = enc * 4.0 - 2.0; + vec2 fenc = enc.xy * 4.0 - 2.0; float f = dot(fenc, fenc); float g = sqrt(1.0 - f / 4.0); vec3 n; n.xy = fenc*g; n.z = 1 - f / 2; + + if (enc.z > 0.5) { + n = -n; + } return n; } /* From http://aras-p.info/texts/CompactNormalStorage.html * Using Method #4: Spheremap Transform */ -vec2 normal_encode(vec3 n) +vec3 normal_encode(vec3 n) { float p = sqrt(n.z * 8.0 + 8.0); - return n.xy / p + 0.5; + vec3 result = vec3(n.xyz / p + 0.5); + result.z = (gl_FrontFacing)? 0.0: 1.0; + return result; } |