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:
authorClément Foucault <foucault.clem@gmail.com>2018-12-03 16:51:30 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-12-03 19:19:11 +0300
commit0759480529c6d31271117ad2ae8083f6a0beb528 (patch)
treea9270980cbc4bbbe11ded8df3acb6bbaee53d975 /source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
parent223c1a107a92705d4516f181b3dbdec3937fbbf3 (diff)
Workbench: Encode Roughness and metallic into 8bits
This reduces the bandwidth + vram usage of workbench even further.
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl25
1 files changed, 13 insertions, 12 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
index 6d2af8557d0..5a895ab65ec 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
@@ -4,8 +4,7 @@ uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrixInverse;
uniform usampler2D objectId;
-uniform sampler2D colorBuffer;
-uniform sampler2D metallicBuffer;
+uniform sampler2D materialBuffer;
uniform sampler2D normalBuffer;
/* normalBuffer contains viewport normals */
uniform sampler2D cavityBuffer;
@@ -27,7 +26,8 @@ void main()
ivec2 texel = ivec2(gl_FragCoord.xy);
vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
- vec4 base_color = texelFetch(colorBuffer, texel, 0);
+ vec4 material_data = texelFetch(materialBuffer, texel, 0);
+ vec3 base_color = material_data.rgb;
/* Do we need normals */
#ifdef NORMAL_VIEWPORT_PASS_ENABLED
@@ -38,27 +38,28 @@ void main()
/* -------- SHADING --------- */
#ifdef V3D_LIGHTING_FLAT
- vec3 shaded_color = base_color.rgb;
+ vec3 shaded_color = base_color;
#elif defined(V3D_LIGHTING_MATCAP)
- /* When using matcaps, the basecolor alpha is the backface sign. */
- normal_viewport = (base_color.a > 0.0) ? normal_viewport : -normal_viewport;
+ /* When using matcaps, the material_data.a is the backface sign. */
+ float flipped_nor = material_data.a;
+ normal_viewport = (flipped_nor > 0.0) ? normal_viewport : -normal_viewport;
bool flipped = world_data.matcap_orientation != 0;
vec2 matcap_uv = matcap_uv_compute(I_vs, normal_viewport, flipped);
vec3 matcap = textureLod(matcapImage, matcap_uv, 0.0).rgb;
- vec3 shaded_color = matcap * base_color.rgb;
+ vec3 shaded_color = matcap * base_color;
#elif defined(V3D_LIGHTING_STUDIO)
# ifdef V3D_SHADING_SPECULAR_HIGHLIGHT
- float metallic = texelFetch(metallicBuffer, texel, 0).r;
- float roughness = base_color.a;
- vec3 specular_color = mix(vec3(0.05), base_color.rgb, metallic);
- vec3 diffuse_color = mix(base_color.rgb, vec3(0.0), metallic);
+ float roughness, metallic;
+ workbench_float_pair_decode(material_data.a, roughness, metallic);
+ vec3 specular_color = mix(vec3(0.05), base_color, metallic);
+ vec3 diffuse_color = mix(base_color, vec3(0.0), metallic);
# else
float roughness = 0.0;
vec3 specular_color = vec3(0.0);
- vec3 diffuse_color = base_color.rgb;
+ vec3 diffuse_color = base_color;
# endif
vec3 shaded_color = get_world_lighting(world_data,