diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-06-10 16:30:49 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-06-10 21:06:26 +0300 |
commit | 95894421cb4e9ccabb4cff393b561625b9bc4280 (patch) | |
tree | db343a83b911d7fe2ca2f1d4d7c9814598e19530 /source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl | |
parent | b23d5132a90a0e8360a20199c8e7bb45174987c4 (diff) |
Workbench: Xray: Optimize and fix implementation.
There was a method explained in the Weighted Blended Order-Independent
Transparency paper to support hardware that does not support per render
target blending function.
So now only 2 geometry passes are required instead of 3 (one being the
outline/depth fill pass).
This also fix how the blending is done. There was some premult confusion
in the implementation.
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl index f1eacd281b1..53903a4af76 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl @@ -26,7 +26,7 @@ layout(std140) uniform material_block { }; layout(location=0) out vec4 transparentAccum; - +layout(location=1) out float revealageAccum; /* revealage actually stored in transparentAccum.a */ void main() { @@ -70,7 +70,13 @@ void main() vec3 shaded_color = diffuse_light * diffuse_color.rgb + specular_color; - vec4 premultiplied = vec4(shaded_color.rgb * alpha, alpha); - transparentAccum = calculate_transparent_accum(premultiplied); + /* Based on : + * McGuire and Bavoil, Weighted Blended Order-Independent Transparency, Journal of + * Computer Graphics Techniques (JCGT), vol. 2, no. 2, 122–141, 2013 + */ + /* Listing 4 */ + float weight = calculate_transparent_weight(alpha); + transparentAccum = vec4(shaded_color * weight, alpha); + revealageAccum = weight; } |