[Bf-blender-cvs] [8ab3697e210] blender2.8: Armature: Add new Transparent Bone overlay option.

Clément Foucault noreply at git.blender.org
Mon May 7 17:00:15 CEST 2018


Commit: 8ab3697e2107b955e188f4dec9d264df98e23d97
Author: Clément Foucault
Date:   Mon May 7 15:10:11 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB8ab3697e2107b955e188f4dec9d264df98e23d97

Armature: Add new Transparent Bone overlay option.

This is half the replacement of the old wireframe mode. It's not doing any
XRay drawing at the moment.

===================================================================

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/draw/intern/draw_armature.c
M	source/blender/draw/modes/edit_armature_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/pose_mode.c
M	source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
M	source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
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 76783703820..445b9d867ca 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3626,6 +3626,8 @@ class VIEW3D_PT_overlay(Panel):
         subsub.active = scene.unit_settings.system == 'NONE'
         subsub.prop(overlay, "grid_subdivisions", text="Subdivisions")
 
+
+
         if context.mode == 'EDIT_MESH':
             col.separator()
             col.label(text="Edit Mode:")
@@ -3647,6 +3649,21 @@ class VIEW3D_PT_overlay(Panel):
             sub.active = overlay.show_vertex_normals or overlay.show_face_normals or overlay.show_split_normals
             sub.prop(overlay, "normals_length", text="Size")
 
+        elif context.mode == 'POSE':
+            col.separator()
+            col.label(text="Pose Mode:")
+
+            col = layout.column()
+            col.active = display_all
+            col.prop(overlay, "transparent_bones")
+
+        elif context.mode == 'EDIT_ARMATURE':
+            col.separator()
+            col.label(text="Edit Armature:")
+
+            col = layout.column()
+            col.active = display_all
+            col.prop(overlay, "transparent_bones")
 
         elif context.mode in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'}:
             col.separator()
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 9c05f3165df..1a2ff70624b 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -1028,7 +1028,7 @@ static void draw_axes(EditBone *eBone, bPoseChannel *pchan)
 	const float *col = (g_theme.const_color) ? g_theme.const_color :
 	                   (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? g_theme.text_hi_color : g_theme.text_color;
 	copy_v4_v4(final_col, col);
-	final_col[3] = (g_theme.const_color) ? 1.0 : 0.4; /* Mix with axes color. */
+	final_col[3] = (g_theme.const_color) ? 1.0 : (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? 0.3 : 0.8; /* Mix with axes color. */
 	drw_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), final_col);
 }
 
diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c
index e744565558b..0288a027b7c 100644
--- a/source/blender/draw/modes/edit_armature_mode.c
+++ b/source/blender/draw/modes/edit_armature_mode.c
@@ -27,6 +27,7 @@
 #include "DRW_render.h"
 
 #include "DNA_armature_types.h"
+#include "DNA_view3d_types.h"
 
 #include "draw_common.h"
 
@@ -76,7 +77,7 @@ static void EDIT_ARMATURE_cache_init(void *vedata)
 
 	{
 		/* Solid bones */
-		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK;
 		psl->bone_solid = DRW_pass_create("Bone Solid Pass", state);
 	}
 
@@ -137,13 +138,24 @@ static void EDIT_ARMATURE_draw_scene(void *vedata)
 	EDIT_ARMATURE_PassList *psl = ((EDIT_ARMATURE_Data *)vedata)->psl;
 	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const bool transparent_bones = (draw_ctx->v3d->overlay.arm_flag & V3D_OVERLAY_ARM_TRANSP_BONES) != 0;
 
 	DRW_draw_pass(psl->bone_envelope);
 
+	if (transparent_bones) {
+		DRW_pass_state_add(psl->bone_solid, DRW_STATE_BLEND);
+		DRW_pass_state_remove(psl->bone_solid, DRW_STATE_WRITE_DEPTH);
+		DRW_draw_pass(psl->bone_solid);
+	}
+
 	MULTISAMPLE_SYNC_ENABLE(dfbl, dtxl)
 
+	if (!transparent_bones) {
+		DRW_draw_pass(psl->bone_solid);
+	}
+
 	DRW_draw_pass(psl->bone_outline);
-	DRW_draw_pass(psl->bone_solid);
 	DRW_draw_pass(psl->bone_wire);
 	DRW_draw_pass(psl->relationship);
 
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 1cfc8e9403d..312928c57f6 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -987,7 +987,7 @@ static void OBJECT_cache_init(void *vedata)
 
 	{
 		/* Solid bones */
-		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK;
 		psl->bone_solid = DRW_pass_create("Bone Solid Pass", state);
 		psl->bone_outline = DRW_pass_create("Bone Outline Pass", state);
 	}
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index 18318046869..a7fc1da959b 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -25,6 +25,7 @@
 
 #include "DRW_engine.h"
 #include "DRW_render.h"
+#include "DNA_view3d_types.h"
 
 /* If builtin shaders are needed */
 #include "GPU_shader.h"
@@ -85,7 +86,7 @@ static void POSE_cache_init(void *vedata)
 
 	{
 		/* Solid bones */
-		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK;
 		psl->bone_solid = DRW_pass_create("Bone Solid Pass", state);
 	}
 
@@ -175,14 +176,25 @@ static void POSE_draw_scene(void *vedata)
 	POSE_PassList *psl = ((POSE_Data *)vedata)->psl;
 	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const bool transparent_bones = (draw_ctx->v3d->overlay.arm_flag & V3D_OVERLAY_ARM_TRANSP_BONES) != 0;
 
 	DRW_draw_pass(psl->bone_envelope);
 
+	if (transparent_bones) {
+		DRW_pass_state_add(psl->bone_solid, DRW_STATE_BLEND);
+		DRW_pass_state_remove(psl->bone_solid, DRW_STATE_WRITE_DEPTH);
+		DRW_draw_pass(psl->bone_solid);
+	}
+
 	MULTISAMPLE_SYNC_ENABLE(dfbl, dtxl)
 
+	if (!transparent_bones) {
+		DRW_draw_pass(psl->bone_solid);
+	}
+
 	DRW_draw_pass(psl->bone_outline);
 	DRW_draw_pass(psl->bone_wire);
-	DRW_draw_pass(psl->bone_solid);
 	DRW_draw_pass(psl->relationship);
 
 	MULTISAMPLE_SYNC_DISABLE(dfbl, dtxl)
diff --git a/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl b/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
index aa455a85cf0..248281f4e79 100644
--- a/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
+++ b/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
@@ -5,5 +5,5 @@ out vec4 fragColor;
 
 void main()
 {
-	fragColor = finalColor;
+	fragColor = vec4(finalColor.rgb, 0.6); /* Hardcoded transparency factor. */
 }
diff --git a/source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl b/source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
index a431a048282..3c80f629d79 100644
--- a/source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
+++ b/source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
@@ -73,7 +73,8 @@ void main()
 	float dither = (0.5 + dot(vec2(ivec2(gl_FragCoord.xy) & ivec2(1)), vec2(1.0, 2.0))) * 0.25;
 	dither *= (1.0 / 255.0); /* Assume 8bit per color buffer. */
 
-	fragColor = vec4(fragColor.rgb + dither, 1.0);
+	/* Hardcoded transparency factor. Less than shape to be less distractive. */
+	fragColor = vec4(fragColor.rgb + dither, 0.4);
 
 	t /= ray_len;
 	gl_FragDepth = get_depth_from_view_z(ray_dir_view.z * t + ray_ori_view.z);
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index a206d9e6642..406f7434033 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -154,7 +154,9 @@ typedef struct View3DOverlay {
 
 	/* Paint mode settings */
 	int paint_flag;
-	int pad;
+
+	/* Armature edit/pose mode settings */
+	int arm_flag;
 } View3DOverlay;
 
 /* 3D ViewPort Struct */
@@ -353,6 +355,11 @@ enum {
 	V3D_OVERLAY_EDIT_WEIGHT       = (1 << 4),
 };
 
+/* View3DOverlay->arm_flag */
+enum {
+	V3D_OVERLAY_ARM_TRANSP_BONES  = (1 << 0),
+};
+
 /* View3DOverlay->paint_flag */
 enum {
 	V3D_OVERLAY_PAINT_WIRE        = (1 << 0),
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index d209e0f08da..8dba90d0a2b 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -2384,6 +2384,11 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Backwire Opacity", "Opacity when rendering transparent wires");
 	RNA_def_property_range(prop, 0.0f, 1.0f);
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+	prop = RNA_def_property(srna, "transparent_bones", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "overlay.arm_flag", V3D_OVERLAY_ARM_TRANSP_BONES);
+	RNA_def_property_ui_text(prop, "Transparent Bones", "Display bones as transparent");
+	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
 }
 
 static void rna_def_space_view3d(BlenderRNA *brna)



More information about the Bf-blender-cvs mailing list