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:
authorJeroen Bakker <j.bakker@atmind.nl>2018-05-23 17:35:34 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-05-24 10:28:29 +0300
commite561eef3ff0b40c0abeb785d779f0c6ef73d5aa8 (patch)
treef3072a3a3e00e5862048f43f0413d8f64900ccd6 /source/blender/draw/engines/workbench/shaders
parenta709e8d6bb4aa56468fefac43f21f4b9a1b3a057 (diff)
Workbench: Revealage buffer
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl9
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl4
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl9
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl7
4 files changed, 20 insertions, 9 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 2550f44271b..88b715f55a8 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl
@@ -1,5 +1,5 @@
#define NO_OBJECT_ID uint(0)
-
+#define EPSILON 0.00001
/* 4x4 bayer matrix prepared for 8bit UNORM precision error. */
#define P(x) (((x + 0.5) * (1.0 / 16.0) - 0.5) * (1.0 / 255.0))
const vec4 dither_mat4x4[4] = vec4[4](
@@ -62,3 +62,10 @@ void fresnel(vec3 I, vec3 N, float ior, out float kr)
// As a consequence of the conservation of energy, transmittance is given by:
// kt = 1 - kr;
}
+
+vec4 calculate_transparent_accum(vec4 premultiplied) {
+ float a = min(1.0, premultiplied.a) * 8.0 + 0.01;
+ float b = -gl_FragCoord.z * 0.95 + 1.0;
+ float w = clamp(a * a * a * 1e8 * b * b * b, 1e-2, 3e2);
+ return premultiplied * w;
+}
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 2d6f78082e3..02acc0aa00e 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
@@ -15,6 +15,7 @@ void main()
vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
uint object_id = texelFetch(objectId, texel, 0).r;
vec4 transparent_accum = texelFetch(transparentAccum, texel, 0);
+ float transparent_revealage = texelFetch(transparentRevealage, texel, 0).r;
float revealage = texelFetch(transparentRevealage, texel, 0).r;
vec4 color;
@@ -27,7 +28,8 @@ void main()
if (object_id == NO_OBJECT_ID) {
color = vec4(background_color(world_data, uv_viewport.y), 0.0);
} else {
- color = transparent_accum / transparent_accum.a;
+ color = vec4((transparent_accum.xyz / max(transparent_accum.a, EPSILON)) * (1.0 - transparent_revealage), 1.0);
+ // color = vec4(transparent_revealage);
}
fragColor = vec4(mix(world_data.object_outline_color.rgb, color.xyz, outline), 1.0);
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 6428ed44f6b..66445048996 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
@@ -17,12 +17,7 @@ layout(std140) uniform world_block {
layout(location=0) out vec4 transparentAccum;
-vec4 calculate_transparent_accum(vec4 premultiplied) {
- float a = min(1.0, premultiplied.a) * 8.0 + 0.01;
- float b = -gl_FragCoord.z * 0.95 + 1.0;
- float w = clamp(a * a * a * 1e8 * b * b * b, 1e-2, 3e2);
- return vec4(premultiplied.rgb, premultiplied.a);
-}
+
void main()
{
vec4 diffuse_color;
@@ -47,7 +42,7 @@ void main()
vec3 shaded_color = diffuse_color.rgb;
#endif /* V3D_LIGHTING_STUDIO */
- float alpha = 0.1;
+ float alpha = 1.0;
vec4 premultiplied = vec4(shaded_color.rgb * alpha, alpha);
transparentAccum = calculate_transparent_accum(premultiplied);
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
new file mode 100644
index 00000000000..22f1cbc8a66
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
@@ -0,0 +1,7 @@
+layout(location=0) out float transparentRevealage;
+
+void main()
+{
+ transparentRevealage = 1.0;
+}
+