GPencil: New option to fade not selected objects
Before, it was only possible to fade the active object. The new option allows to fade all non gpencil selected object. This is a common request by artists. {F7719513} Reviewers: mendio, pepeland Reviewed By: mendio Differential Revision: https://developer.blender.org/D5704
This commit is contained in:
parent
6d8a86c07d
commit
a5a003ed55
|
@ -6137,9 +6137,10 @@ class VIEW3D_PT_overlay_gpencil_options(Panel):
|
|||
|
||||
row = col.row()
|
||||
row.prop(overlay, "use_gpencil_paper", text="")
|
||||
sub = row.row()
|
||||
sub = row.row(align=True)
|
||||
sub.active = overlay.use_gpencil_paper
|
||||
sub.prop(overlay, "gpencil_paper_opacity", text="Fade 3D Objects", slider=True)
|
||||
sub.prop(overlay, "gpencil_paper_opacity", text="Fade Objects", slider=True)
|
||||
sub.prop(overlay, "use_gpencil_fade_objects", text="", icon='OUTLINER_OB_GREASEPENCIL')
|
||||
|
||||
if context.object.mode == 'PAINT_GPENCIL':
|
||||
row = col.row()
|
||||
|
|
|
@ -61,6 +61,38 @@
|
|||
#define TEXTURE 4
|
||||
#define PATTERN 5
|
||||
|
||||
/* Verify if must fade object or not. */
|
||||
static bool gpencil_fade_object_check(GPENCIL_StorageList *stl, Object *ob)
|
||||
{
|
||||
const DRWContextState *draw_ctx = DRW_context_state_get();
|
||||
View3D *v3d = draw_ctx->v3d;
|
||||
const bool is_overlay = (bool)((v3d) && ((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) &&
|
||||
(v3d->gp_flag & V3D_GP_SHOW_PAPER));
|
||||
|
||||
if ((!is_overlay) || (ob == draw_ctx->obact) ||
|
||||
((v3d->gp_flag & V3D_GP_FADE_NOACTIVE_GPENCIL) == 0) ||
|
||||
(v3d->overlay.gpencil_paper_opacity == 1.0f)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const bool playing = stl->storage->is_playing;
|
||||
const bool is_render = (bool)stl->storage->is_render;
|
||||
const bool is_mat_preview = (bool)stl->storage->is_mat_preview;
|
||||
const bool is_select = (bool)(DRW_state_is_select() || DRW_state_is_depth());
|
||||
|
||||
return (bool)((!is_render) && (!playing) && (!is_mat_preview) && (!is_select));
|
||||
}
|
||||
|
||||
/* Define Fade object uniforms. */
|
||||
static void gpencil_set_fade_uniforms(View3D *v3d, DRWShadingGroup *grp, bool status)
|
||||
{
|
||||
DRW_shgroup_uniform_bool_copy(grp, "fade_on", status);
|
||||
if (v3d) {
|
||||
DRW_shgroup_uniform_vec3(grp, "fade_color", v3d->shading.background_color, 1);
|
||||
DRW_shgroup_uniform_float(grp, "fade_factor", &v3d->overlay.gpencil_paper_opacity, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get number of vertex for using in GPU VBOs */
|
||||
static void gpencil_calc_vertex(GPENCIL_StorageList *stl,
|
||||
tGPencilObjectCache *cache_ob,
|
||||
|
@ -435,6 +467,9 @@ static DRWShadingGroup *gpencil_shgroup_fill_create(GPENCIL_Data *vedata,
|
|||
|
||||
DRW_shgroup_uniform_int(grp, "shading_type", &stl->shgroups[id].shading_type[0], 2);
|
||||
|
||||
/* Fade object uniforms. */
|
||||
gpencil_set_fade_uniforms(v3d, grp, gpencil_fade_object_check(stl, ob));
|
||||
|
||||
/* wire color */
|
||||
set_wireframe_color(ob, gpl, v3d, stl, gp_style, id, true);
|
||||
DRW_shgroup_uniform_vec4(grp, "wire_color", stl->shgroups[id].wire_color, 1);
|
||||
|
@ -557,6 +592,9 @@ DRWShadingGroup *gpencil_shgroup_stroke_create(GPENCIL_Data *vedata,
|
|||
}
|
||||
DRW_shgroup_uniform_int(grp, "shading_type", &stl->shgroups[id].shading_type[0], 2);
|
||||
|
||||
/* Fade object uniforms. */
|
||||
gpencil_set_fade_uniforms(v3d, grp, gpencil_fade_object_check(stl, ob));
|
||||
|
||||
/* wire color */
|
||||
set_wireframe_color(ob, gpl, v3d, stl, gp_style, id, false);
|
||||
DRW_shgroup_uniform_vec4(grp, "wire_color", stl->shgroups[id].wire_color, 1);
|
||||
|
@ -607,6 +645,9 @@ DRWShadingGroup *gpencil_shgroup_stroke_create(GPENCIL_Data *vedata,
|
|||
DRW_shgroup_uniform_int(grp, "xraymode", &stl->storage->xray, 1);
|
||||
}
|
||||
|
||||
/* Fade object uniforms. */
|
||||
gpencil_set_fade_uniforms(v3d, grp, false);
|
||||
|
||||
/* image texture for pattern */
|
||||
if ((gp_style) && (gp_style->stroke_style == GP_STYLE_STROKE_STYLE_TEXTURE) && (!onion)) {
|
||||
ImBuf *ibuf;
|
||||
|
@ -706,6 +747,9 @@ static DRWShadingGroup *gpencil_shgroup_point_create(GPENCIL_Data *vedata,
|
|||
}
|
||||
DRW_shgroup_uniform_int(grp, "shading_type", &stl->shgroups[id].shading_type[0], 2);
|
||||
|
||||
/* Fade object uniforms. */
|
||||
gpencil_set_fade_uniforms(v3d, grp, gpencil_fade_object_check(stl, ob));
|
||||
|
||||
/* wire color */
|
||||
set_wireframe_color(ob, gpl, v3d, stl, gp_style, id, false);
|
||||
DRW_shgroup_uniform_vec4(grp, "wire_color", stl->shgroups[id].wire_color, 1);
|
||||
|
@ -764,6 +808,9 @@ static DRWShadingGroup *gpencil_shgroup_point_create(GPENCIL_Data *vedata,
|
|||
DRW_shgroup_uniform_int(grp, "xraymode", &stl->storage->xray, 1);
|
||||
}
|
||||
|
||||
/* Fade object uniforms. */
|
||||
gpencil_set_fade_uniforms(v3d, grp, false);
|
||||
|
||||
/* image texture */
|
||||
if ((gp_style) && (gp_style->stroke_style == GP_STYLE_STROKE_STYLE_TEXTURE) && (!onion)) {
|
||||
ImBuf *ibuf;
|
||||
|
|
|
@ -26,6 +26,10 @@ uniform int viewport_xray;
|
|||
uniform int shading_type[2];
|
||||
uniform vec4 wire_color;
|
||||
|
||||
uniform bool fade_on;
|
||||
uniform vec3 fade_color;
|
||||
uniform float fade_factor;
|
||||
|
||||
/* keep this list synchronized with list in gpencil_draw_utils.c */
|
||||
#define SOLID 0
|
||||
#define GRADIENT 1
|
||||
|
@ -211,4 +215,8 @@ void main()
|
|||
fragColor.a *= 0.5;
|
||||
}
|
||||
}
|
||||
/* Apply paper opacity */
|
||||
if (fade_on == true) {
|
||||
fragColor.rgb = mix(fade_color.rgb, fragColor.rgb, fade_factor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,10 @@ in vec4 mColor;
|
|||
in vec2 mTexCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
uniform bool fade_on;
|
||||
uniform vec3 fade_color;
|
||||
uniform float fade_factor;
|
||||
|
||||
#define texture2D texture
|
||||
|
||||
#define GPENCIL_MODE_LINE 0
|
||||
|
@ -104,4 +108,9 @@ void main()
|
|||
if (fragColor.a < 0.0035) {
|
||||
discard;
|
||||
}
|
||||
|
||||
/* Apply paper opacity */
|
||||
if (fade_on == true) {
|
||||
fragColor.rgb = mix(fade_color.rgb, fragColor.rgb, fade_factor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,10 @@ uniform vec4 colormix;
|
|||
uniform float mix_stroke_factor;
|
||||
uniform int shading_type[2];
|
||||
|
||||
uniform bool fade_on;
|
||||
uniform vec3 fade_color;
|
||||
uniform float fade_factor;
|
||||
|
||||
in vec4 mColor;
|
||||
in vec2 mTexCoord;
|
||||
in vec2 uvfac;
|
||||
|
@ -88,4 +92,9 @@ void main()
|
|||
if (fragColor.a < 0.0035) {
|
||||
discard;
|
||||
}
|
||||
|
||||
/* Apply paper opacity */
|
||||
if (fade_on == true) {
|
||||
fragColor.rgb = mix(fade_color.rgb, fragColor.rgb, fade_factor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -394,8 +394,9 @@ typedef struct View3D {
|
|||
#define V3D_GP_SHOW_GRID (1 << 1) /* Activate paper grid */
|
||||
#define V3D_GP_SHOW_EDIT_LINES (1 << 2)
|
||||
#define V3D_GP_SHOW_MULTIEDIT_LINES (1 << 3)
|
||||
#define V3D_GP_SHOW_ONION_SKIN (1 << 4) /* main switch at view level */
|
||||
#define V3D_GP_FADE_NOACTIVE_LAYERS (1 << 5) /* fade layers not active */
|
||||
#define V3D_GP_SHOW_ONION_SKIN (1 << 4) /* main switch at view level */
|
||||
#define V3D_GP_FADE_NOACTIVE_LAYERS (1 << 5) /* fade layers not active */
|
||||
#define V3D_GP_FADE_NOACTIVE_GPENCIL (1 << 6) /* Fade other GPencil objects */
|
||||
|
||||
/** #View3DShading.light */
|
||||
enum {
|
||||
|
|
|
@ -3630,10 +3630,10 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
|
|||
|
||||
prop = RNA_def_property(srna, "use_gpencil_paper", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_PAPER);
|
||||
RNA_def_property_ui_text(prop,
|
||||
"Use Paper",
|
||||
"Cover all viewport with a full color layer to improve visibility "
|
||||
"while drawing over complex scenes");
|
||||
RNA_def_property_ui_text(
|
||||
prop,
|
||||
"Fade Objects",
|
||||
"Fade all viewport objects with a full color layer to improve visibility");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "use_gpencil_grid", PROP_BOOLEAN, PROP_NONE);
|
||||
|
@ -3647,6 +3647,12 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
|
|||
prop, "Fade Layers", "Toggle fading of Grease Pencil layers except the active one");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_gpencil_fade_objects", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_FADE_NOACTIVE_GPENCIL);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Fade Grease Pencil Objects", "Fade Grease Pencil Objects, except the active one");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update");
|
||||
|
||||
prop = RNA_def_property(srna, "gpencil_grid_opacity", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "overlay.gpencil_grid_opacity");
|
||||
RNA_def_property_range(prop, 0.1f, 1.0f);
|
||||
|
@ -3659,7 +3665,7 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
|
|||
RNA_def_property_float_sdna(prop, NULL, "overlay.gpencil_paper_opacity");
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_float_default(prop, 0.5f);
|
||||
RNA_def_property_ui_text(prop, "Opacity", "Paper opacity");
|
||||
RNA_def_property_ui_text(prop, "Opacity", "Fade factor");
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
|
||||
|
||||
/* Paper opacity factor */
|
||||
|
|
Loading…
Reference in New Issue