diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-01-29 05:06:59 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-01-29 17:07:53 +0300 |
commit | bc99f4903c5f55d35b5fec32d6e18400f25089fb (patch) | |
tree | 2fc65d8a39a7529d0cc885b26805ebc5c6e54f1e /source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl | |
parent | d88492d4ad432a66d72269fe5fa514b18d0407ff (diff) |
Workbench: Add transparency support for materials
This adds the posibility of having certain materials transparent in solid
mode. The option is (for now) per material only and thus only shows in
material color mode.
This uses the same rendering technique as Xray mode.
Note that objects are not considered transparent for selection with this.
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl index cb5516ca34f..b1f08cfef15 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl @@ -5,10 +5,13 @@ uniform sampler2D transparentAccum; uniform sampler2D transparentRevealage; uniform vec2 invertedViewportSize; +#ifndef ALPHA_COMPOSITE layout(std140) uniform world_block { WorldData world_data; }; +#endif +/* TODO: Bypass the whole shader if there is no xray pass and no outline pass. */ void main() { ivec2 texel = ivec2(gl_FragCoord.xy); @@ -19,17 +22,21 @@ void main() float trans_revealage = trans_accum.a; trans_accum.a = texelFetch(transparentRevealage, texel, 0).r; + vec3 trans_color = trans_accum.rgb / clamp(trans_accum.a, 1e-4, 5e4); + +#ifndef ALPHA_COMPOSITE vec3 bg_color = background_color(world_data, uv_viewport.y); - /* TODO: Bypass the whole shader if there is no xray pass and no outline pass. */ - vec3 trans_color = trans_accum.rgb / clamp(trans_accum.a, 1e-4, 5e4); vec3 color = mix(trans_color, bg_color, trans_revealage); -#ifdef V3D_SHADING_OBJECT_OUTLINE +# ifdef V3D_SHADING_OBJECT_OUTLINE uint object_id = texelFetch(objectId, texel, 0).r; float outline = calculate_object_outline(objectId, texel, object_id); color = mix(world_data.object_outline_color.rgb, color, outline); -#endif +# endif fragColor = vec4(color, 1.0); +#else + fragColor = vec4(trans_color, 1.0 - trans_revealage); +#endif } |