[Bf-blender-cvs] [dfe088c5d9c] blender2.8: Workbench: SeeThrough draw option
Jeroen Bakker
noreply at git.blender.org
Tue May 22 15:06:00 CEST 2018
Commit: dfe088c5d9c819e7266e8e88fb31e92ac2ee8592
Author: Jeroen Bakker
Date: Tue May 22 14:12:47 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBdfe088c5d9c819e7266e8e88fb31e92ac2ee8592
Workbench: SeeThrough draw option
Option to see through all meshes (transparency)
Works for OB_SOLID and OB_TEXTURED. Does not work for
V3D_SHADING_SHADOW.
TODO: Fresnel effect
===================================================================
M release/scripts/startup/bl_ui/space_view3d.py
M source/blender/blenloader/intern/versioning_280.c
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
R088 source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
A source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
A source/blender/draw/engines/workbench/shaders/workbench_forward_depth_frag.glsl
A source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
A source/blender/draw/engines/workbench/shaders/workbench_object_outline_lib.glsl
D source/blender/draw/engines/workbench/shaders/workbench_object_overlap_lib.glsl
M source/blender/draw/engines/workbench/solid_mode.c
A source/blender/draw/engines/workbench/transparent_mode.c
A source/blender/draw/engines/workbench/workbench_data.c
A source/blender/draw/engines/workbench/workbench_deferred.c
M source/blender/draw/engines/workbench/workbench_engine.h
A source/blender/draw/engines/workbench/workbench_forward.c
M source/blender/draw/engines/workbench/workbench_materials.c
M source/blender/draw/engines/workbench/workbench_private.h
M source/blender/draw/intern/draw_manager.c
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_header.c
M source/blender/editors/space_view3d/view3d_intern.h
M source/blender/editors/space_view3d/view3d_ops.c
M source/blender/makesdna/DNA_view3d_types.h
M source/blender/makesrna/intern/rna_space.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 6bf10231be5..b415afd9097 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3516,12 +3516,24 @@ class VIEW3D_PT_shading(Panel):
col.separator()
row = col.row()
+ row.prop(shading, "show_see_through")
+ sub = row.row()
+ sub.active = shading.show_see_through
+ sub.prop(shading, "see_through_transparency", text="")
+
+ row = col.row()
+ row.active = not shading.show_see_through
row.prop(shading, "show_shadows")
sub = row.row()
- sub.active = shading.show_shadows
+ sub.active = shading.show_shadows and not shading.show_see_through
sub.prop(shading, "shadow_intensity", text="")
- col.prop(shading, "show_object_outline")
+
+ row = col.row()
+ row.prop(shading, "show_object_outline")
+ sub = row.row()
+ sub.active = shading.show_object_outline
+ sub.prop(shading, "object_outline_color", text="")
class VIEW3D_PT_overlay(Panel):
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 63fe9642ee7..be0ae64faa4 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1479,6 +1479,19 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
}
}
+ if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "see_through_transparency")) {
+ for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ v3d->shading.see_through_transparency = 0.3f;
+ }
+ }
+ }
+ }
+ }
+
for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
switch (scene->toolsettings->snap_mode) {
case 0: scene->toolsettings->snap_mode = SCE_SNAP_MODE_INCREMENT; break;
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 9478d41f6db..71bdcc7496c 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -105,10 +105,14 @@ set(SRC
engines/eevee/eevee_subsurface.c
engines/eevee/eevee_temporal_sampling.c
engines/eevee/eevee_volumes.c
+ engines/workbench/workbench_data.c
engines/workbench/workbench_engine.c
+ engines/workbench/workbench_deferred.c
+ engines/workbench/workbench_forward.c
engines/workbench/workbench_materials.c
engines/workbench/workbench_studiolight.c
engines/workbench/solid_mode.c
+ engines/workbench/transparent_mode.c
engines/external/external_engine.c
DRW_engine.h
@@ -208,17 +212,20 @@ data_to_c_simple(engines/eevee/shaders/volumetric_resolve_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/volumetric_scatter_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/volumetric_integration_frag.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_background_lib.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_common_lib.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_data_lib.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_deferred_composite_frag.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_forward_composite_frag.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_forward_depth_frag.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl SRC)
+data_to_c_simple(engines/workbench/shaders/workbench_object_outline_lib.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_prepass_vert.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_prepass_frag.glsl SRC)
-data_to_c_simple(engines/workbench/shaders/workbench_composite_frag.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_shadow_vert.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_shadow_geom.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_shadow_caps_geom.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_shadow_debug_frag.glsl SRC)
-data_to_c_simple(engines/workbench/shaders/workbench_background_lib.glsl SRC)
-data_to_c_simple(engines/workbench/shaders/workbench_common_lib.glsl SRC)
-data_to_c_simple(engines/workbench/shaders/workbench_data_lib.glsl SRC)
-data_to_c_simple(engines/workbench/shaders/workbench_object_overlap_lib.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_world_light_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
index a698a5afeaa..e72ee1c2eac 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
@@ -7,4 +7,6 @@ struct WorldData {
vec4 diffuse_light_z_neg;
vec4 background_color_low;
vec4 background_color_high;
+ vec4 object_outline_color;
+ float see_through_transparency;
};
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
similarity index 88%
rename from source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
rename to source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
index 17477e56b40..35867a566f1 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_deferred_composite_frag.glsl
@@ -5,7 +5,6 @@ uniform sampler2D colorBuffer;
uniform sampler2D normalBuffer;
/* normalBuffer contains viewport normals */
uniform vec2 invertedViewportSize;
-uniform vec3 objectOverlapColor = vec3(0.0);
uniform float shadowMultiplier;
uniform float lightMultiplier;
uniform float shadowShift = 0.1;
@@ -29,15 +28,15 @@ void main()
return;
}
#else /* !V3D_SHADING_OBJECT_OUTLINE */
- float object_overlap = calculate_object_overlap(objectId, texel, object_id);
+ float object_outline = calculate_object_outline(objectId, texel, object_id);
if (object_id == NO_OBJECT_ID) {
vec3 background = background_color(world_data, uv_viewport.y);
- if (object_overlap == 0.0) {
+ if (object_outline == 0.0) {
fragColor = vec4(background, 0.0);
}
else {
- fragColor = vec4(mix(objectOverlapColor, background, object_overlap), 1.0-object_overlap);
+ fragColor = vec4(mix(world_data.object_outline_color.rgb, background, object_outline), 1.0-object_outline);
}
return;
}
@@ -84,7 +83,7 @@ void main()
shaded_color *= light_multiplier;
#ifdef V3D_SHADING_OBJECT_OUTLINE
- shaded_color = mix(objectOverlapColor, shaded_color, object_overlap);
+ shaded_color = mix(world_data.object_outline_color.rgb, shaded_color, object_outline);
#endif /* V3D_SHADING_OBJECT_OUTLINE */
fragColor = vec4(shaded_color, 1.0);
}
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
new file mode 100644
index 00000000000..054e8d308cb
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
@@ -0,0 +1,34 @@
+out vec4 fragColor;
+
+uniform usampler2D objectId;
+uniform sampler2D transparentAccum;
+uniform sampler2D transparentRevealage;
+uniform vec2 invertedViewportSize;
+
+layout(std140) uniform world_block {
+ WorldData world_data;
+};
+
+void main()
+{
+ ivec2 texel = ivec2(gl_FragCoord.xy);
+ vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
+ uint object_id = texelFetch(objectId, texel, 0).r;
+ vec4 transparent_accum = texelFetch(transparentAccum, texel, 0);
+ float revealage = texelFetch(transparentRevealage, texel, 0).r;
+ vec4 color;
+
+#ifdef V3D_SHADING_OBJECT_OUTLINE
+ float outline = calculate_object_outline(objectId, texel, object_id);
+#else /* V3D_SHADING_OBJECT_OUTLINE */
+ float outline = 1.0;
+#endif /* V3D_SHADING_OBJECT_OUTLINE */
+
+ if (object_id == NO_OBJECT_ID) {
+ color = vec4(background_color(world_data, uv_viewport.y), 0.0);
+ } else {
+ color = transparent_accum;
+ }
+
+ 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_depth_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_forward_depth_frag.glsl
new file mode 100644
index 00000000000..450cb3e680b
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_depth_frag.glsl
@@ -0,0 +1,8 @@
+uniform int object_id = 0;
+layout(location=0) out uint objectId;
+
+void main()
+{
+ objectId = uint(object_id);
+}
+
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
new file mode 100644
index 00000000000..7eb5336e303
--- /dev/null
+++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
@@ -0,0 +1,54 @@
+uniform vec4 color = vec4(0.0, 0.0, 1.0, 1.0);
+#ifdef OB_TEXTURE
+uniform sampler2D image;
+#endif
+uniform mat3 normalWorldMatrix;
+
+#ifdef NORMAL_VIEWPORT_PASS_ENABLED
+in vec3 normal_viewport;
+#endif /* NORMAL_VIEWPORT_PASS_ENABLED */
+#ifdef OB_TEXTURE
+in vec2 uv_interp;
+#endif
+
+layout(std140) uniform world_block {
+ WorldData world_data;
+};
+
+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(
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list