diff options
author | Joseph Eagar <joeedh@gmail.com> | 2022-04-05 21:42:55 +0300 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2022-04-05 21:42:55 +0300 |
commit | eae36be372a6b16ee3e76eff0485a47da4f3c230 (patch) | |
tree | d1ca2dc30951e31f1b91eed6a4edfdfb0824bf1f /release | |
parent | a3e122b9aec59fc303c2375a78183cfb8642c14f (diff) |
Refactor: Unify vertex and sculpt colors into new
color attribute system.
This commit removes sculpt colors from experimental
status and unifies it with vertex colors. It
introduces the concept of "color attributes", which
are any attributes that represents colors. Color
attributes can be represented with byte or floating-point
numbers and can be stored in either vertices or
face corners.
Color attributes share a common namespace
(so you can no longer have a floating-point
sculpt color attribute and a byte vertex color
attribute with the same name).
Note: this commit does not include vertex paint mode,
which is a separate patch, see:
https://developer.blender.org/D14179
Differential Revision: https://developer.blender.org/D12587
Ref D12587
Diffstat (limited to 'release')
-rw-r--r-- | release/datafiles/icons/brush.sculpt.paint.dat | bin | 0 -> 1574 bytes | |||
-rw-r--r-- | release/datafiles/icons/brush.sculpt.smear.dat | bin | 0 -> 1700 bytes | |||
-rw-r--r-- | release/datafiles/icons/ops.sculpt.color_filter.dat | bin | 0 -> 1700 bytes | |||
-rw-r--r-- | release/datafiles/icons/ops.sculpt.mask_by_color.dat | bin | 0 -> 3716 bytes | |||
-rw-r--r-- | release/scripts/presets/keyconfig/keymap_data/blender_default.py | 3 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_mesh.py | 150 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_material_gpencil.py | 4 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_toolsystem_toolbar.py | 19 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_userpref.py | 1 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d.py | 18 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d_toolbar.py | 6 |
11 files changed, 95 insertions, 106 deletions
diff --git a/release/datafiles/icons/brush.sculpt.paint.dat b/release/datafiles/icons/brush.sculpt.paint.dat Binary files differnew file mode 100644 index 00000000000..1cee34c0dee --- /dev/null +++ b/release/datafiles/icons/brush.sculpt.paint.dat diff --git a/release/datafiles/icons/brush.sculpt.smear.dat b/release/datafiles/icons/brush.sculpt.smear.dat Binary files differnew file mode 100644 index 00000000000..3efba0b4cb1 --- /dev/null +++ b/release/datafiles/icons/brush.sculpt.smear.dat diff --git a/release/datafiles/icons/ops.sculpt.color_filter.dat b/release/datafiles/icons/ops.sculpt.color_filter.dat Binary files differnew file mode 100644 index 00000000000..d589b15a124 --- /dev/null +++ b/release/datafiles/icons/ops.sculpt.color_filter.dat diff --git a/release/datafiles/icons/ops.sculpt.mask_by_color.dat b/release/datafiles/icons/ops.sculpt.mask_by_color.dat Binary files differnew file mode 100644 index 00000000000..637c47d2d84 --- /dev/null +++ b/release/datafiles/icons/ops.sculpt.mask_by_color.dat diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 0422f1afc58..399c4519635 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -7372,8 +7372,7 @@ def km_3d_view_tool_sculpt_mask_by_color(params): "3D View Tool: Sculpt, Mask by Color", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("sculpt.mask_by_color", {"type": params.tool_mouse, "value": 'ANY'}, None), - ("sculpt.mask_by_color", params.tool_tweak_event, None), + ("sculpt.mask_by_color", {"type": params.tool_mouse, "value": 'CLICK'}, None) ]}, ) diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py index 8e5f6dba1ab..929953dd411 100644 --- a/release/scripts/startup/bl_ui/properties_data_mesh.py +++ b/release/scripts/startup/bl_ui/properties_data_mesh.py @@ -135,19 +135,6 @@ class MESH_UL_uvmaps(UIList): layout.alignment = 'CENTER' layout.label(text="", icon_value=icon) - -class MESH_UL_vcols(UIList): - def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index): - # assert(isinstance(item, (bpy.types.MeshTexturePolyLayer, bpy.types.MeshLoopColorLayer))) - if self.layout_type in {'DEFAULT', 'COMPACT'}: - layout.prop(item, "name", text="", emboss=False, icon='GROUP_VCOL') - icon = 'RESTRICT_RENDER_OFF' if item.active_render else 'RESTRICT_RENDER_ON' - layout.prop(item, "active_render", text="", icon=icon, emboss=False) - elif self.layout_type == 'GRID': - layout.alignment = 'CENTER' - layout.label(text="", icon_value=icon) - - class MeshButtonsPanel: bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -433,64 +420,6 @@ class DATA_PT_uv_texture(MeshButtonsPanel, Panel): col.operator("mesh.uv_texture_add", icon='ADD', text="") col.operator("mesh.uv_texture_remove", icon='REMOVE', text="") - -class DATA_PT_vertex_colors(MeshButtonsPanel, Panel): - bl_label = "Vertex Colors" - bl_options = {'DEFAULT_CLOSED'} - COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} - - def draw(self, context): - layout = self.layout - - me = context.mesh - - row = layout.row() - col = row.column() - - col.template_list("MESH_UL_vcols", "vcols", me, "vertex_colors", me.vertex_colors, "active_index", rows=2) - - col = row.column(align=True) - col.operator("mesh.vertex_color_add", icon='ADD', text="") - col.operator("mesh.vertex_color_remove", icon='REMOVE', text="") - - -class DATA_PT_sculpt_vertex_colors(MeshButtonsPanel, Panel): - bl_label = "Sculpt Vertex Colors" - bl_options = {'DEFAULT_CLOSED'} - COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} - - @classmethod - def poll(cls, context): - return super().poll(context) and context.preferences.experimental.use_sculpt_vertex_colors - - def draw(self, context): - layout = self.layout - - me = context.mesh - - row = layout.row() - col = row.column() - - col.template_list( - "MESH_UL_vcols", - "svcols", - me, - "sculpt_vertex_colors", - me.sculpt_vertex_colors, - "active_index", - rows=2, - ) - - col = row.column(align=True) - col.operator("mesh.sculpt_vertex_color_add", icon='ADD', text="") - col.operator("mesh.sculpt_vertex_color_remove", icon='REMOVE', text="") - - row = layout.row() - col = row.column() - col.operator("sculpt.vertex_to_loop_colors", text="Store Sculpt Vertex Color") - col.operator("sculpt.loop_to_vertex_colors", text="Load Sculpt Vertex Color") - - class DATA_PT_remesh(MeshButtonsPanel, Panel): bl_label = "Remesh" bl_options = {'DEFAULT_CLOSED'} @@ -514,8 +443,7 @@ class DATA_PT_remesh(MeshButtonsPanel, Panel): col.prop(mesh, "use_remesh_preserve_volume", text="Volume") col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask") col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets") - if context.preferences.experimental.use_sculpt_vertex_colors: - col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Vertex Colors") + col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Color Attributes") col.operator("object.voxel_remesh", text="Voxel Remesh") else: @@ -645,6 +573,79 @@ class DATA_PT_mesh_attributes(MeshButtonsPanel, Panel): layout.label(text="Name collisions: {}".format(", ".join(colliding_names)), icon='ERROR') +class MESH_UL_color_attributes(UIList): + display_domain_names = { + 'POINT': "Vertex", + 'EDGE': "Edge", + 'FACE': "Face", + 'CORNER': "Face Corner", + } + + def filter_items(self, context, data, property): + attrs = getattr(data, property) + ret = [] + idxs = [] + + for idx, item in enumerate(attrs): + skip = item.domain not in {"POINT", "CORNER"} + skip = skip or item.data_type not in {"FLOAT_COLOR", "BYTE_COLOR"} + + ret.append(self.bitflag_filter_item if not skip else 0) + idxs.append(idx) + + return ret, idxs + + def draw_item(self, _context, layout, data, attribute, _icon, _active_data, _active_propname, _index): + data_type = attribute.bl_rna.properties['data_type'].enum_items[attribute.data_type] + + domain_name = self.display_domain_names.get(attribute.domain, "") + + split = layout.split(factor=0.50) + split.emboss = 'NONE' + split.prop(attribute, "name", text="") + + active_render = _index == data.color_attributes.render_color_index + + props = split.operator("geometry.color_attribute_render_set", text="", icon = 'RESTRICT_RENDER_OFF'if \ + active_render else 'RESTRICT_RENDER_ON' + ) + + props.name = attribute.name + + sub = split.row() + sub.alignment = 'RIGHT' + sub.active = False + sub.label(text="%s ▶ %s" % (domain_name, data_type.name)) + + +class DATA_PT_vertex_colors(DATA_PT_mesh_attributes, Panel): + bl_label = "Color Attributes" + bl_options = {'DEFAULT_CLOSED'} + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + def draw(self, context): + mesh = context.mesh + + layout = self.layout + row = layout.row() + + col = row.column() + col.template_list( + "MESH_UL_color_attributes", + "color_attributes", + mesh, + "color_attributes", + mesh.color_attributes, + "active_color_index", + rows=3, + ) + + col = row.column(align=True) + col.operator("geometry.color_attribute_add", icon='ADD', text="") + col.operator("geometry.color_attribute_remove", icon='REMOVE', text="") + + self.draw_attribute_warnings(context, layout) + classes = ( MESH_MT_vertex_group_context_menu, MESH_MT_shape_key_context_menu, @@ -653,14 +654,12 @@ classes = ( MESH_UL_fmaps, MESH_UL_shape_keys, MESH_UL_uvmaps, - MESH_UL_vcols, MESH_UL_attributes, DATA_PT_context_mesh, DATA_PT_vertex_groups, DATA_PT_shape_keys, DATA_PT_uv_texture, DATA_PT_vertex_colors, - DATA_PT_sculpt_vertex_colors, DATA_PT_face_maps, DATA_PT_mesh_attributes, DATA_PT_normals, @@ -668,6 +667,7 @@ classes = ( DATA_PT_remesh, DATA_PT_customdata, DATA_PT_custom_props_mesh, + MESH_UL_color_attributes, ) if __name__ == "__main__": # only for live edit. diff --git a/release/scripts/startup/bl_ui/properties_material_gpencil.py b/release/scripts/startup/bl_ui/properties_material_gpencil.py index 35b061ecb21..47c61984cbe 100644 --- a/release/scripts/startup/bl_ui/properties_material_gpencil.py +++ b/release/scripts/startup/bl_ui/properties_material_gpencil.py @@ -30,8 +30,8 @@ class GPENCIL_MT_material_context_menu(Menu): layout.separator() - layout.operator("gpencil.material_to_vertex_color", text="Convert Materials to Vertex Color") - layout.operator("gpencil.extract_palette_vertex", text="Extract Palette from Vertex Color") + layout.operator("gpencil.material_to_vertex_color", text="Convert Materials to Color Attribute") + layout.operator("gpencil.extract_palette_vertex", text="Extract Palette from Color Attribute") layout.separator() diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index fc621c5b51e..b8d30f06193 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -1310,8 +1310,6 @@ class _defs_sculpt: exclude_filter = {} # Use 'bpy.context' instead of 'context' since it can be None. prefs = bpy.context.preferences - if not prefs.experimental.use_sculpt_vertex_colors: - exclude_filter = {'PAINT', 'SMEAR'} return generate_from_enum_ex( context, @@ -2954,24 +2952,11 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_sculpt.trim_lasso, ), _defs_sculpt.project_line, + _defs_sculpt.mask_by_color, None, _defs_sculpt.mesh_filter, _defs_sculpt.cloth_filter, - lambda context: ( - (_defs_sculpt.color_filter,) - if context is None or ( - context.preferences.view.show_developer_ui and - context.preferences.experimental.use_sculpt_vertex_colors) - else () - ), - None, - lambda context: ( - (_defs_sculpt.mask_by_color,) - if context is None or ( - context.preferences.view.show_developer_ui and - context.preferences.experimental.use_sculpt_vertex_colors) - else () - ), + _defs_sculpt.color_filter, None, _defs_sculpt.face_set_edit, None, diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index b72abeed394..035c4fd1352 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -2259,7 +2259,6 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel): def draw(self, context): self._draw_items( context, ( - ({"property": "use_sculpt_vertex_colors"}, "T71947"), ({"property": "use_sculpt_tools_tilt"}, "T82877"), ({"property": "use_sculpt_texture_paint"}, "T96225"), ({"property": "use_extended_asset_browser"}, ("project/view/130/", "Project Page")), diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index b786f5adf33..41c1f3d0683 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -219,6 +219,14 @@ class _draw_tool_settings_context_mode: ups = tool_settings.unified_paint_settings + if capabilities.has_color: + row = layout.row(align=True) + row.ui_units_x = 4 + UnifiedPaintPanel.prop_unified_color(row, context, brush, "color", text="") + UnifiedPaintPanel.prop_unified_color(row, context, brush, "secondary_color", text="") + row.separator() + layout.prop(brush, "blend", text="", expand=False) + size = "size" size_owner = ups if ups.use_unified_size else brush if size_owner.use_locked_size == 'SCENE': @@ -253,10 +261,6 @@ class _draw_tool_settings_context_mode: if not capabilities.has_direction: layout.row().prop(brush, "direction", expand=True, text="") - if capabilities.has_color: - UnifiedPaintPanel.prop_unified_color(layout, context, brush, "color", text="") - layout.prop(brush, "blend", text="", expand=False) - return True @staticmethod @@ -1874,7 +1878,7 @@ class VIEW3D_MT_paint_gpencil(Menu): def draw(self, _context): layout = self.layout - layout.operator("gpencil.vertex_color_set", text="Set Vertex Colors") + layout.operator("gpencil.vertex_color_set", text="Set Color Attribute") layout.operator("gpencil.stroke_reset_vertex_color") layout.separator() layout.operator("gpencil.vertex_color_invert", text="Invert") @@ -1907,7 +1911,7 @@ class VIEW3D_MT_select_gpencil(Menu): layout.operator_menu_enum("gpencil.select_grouped", "type", text="Grouped") if context.mode == 'VERTEX_GPENCIL': - layout.operator("gpencil.select_vertex_color", text="Vertex Color") + layout.operator("gpencil.select_vertex_color", text="Color Attribute") layout.separator() @@ -7572,7 +7576,7 @@ class TOPBAR_PT_gpencil_materials(GreasePencilMaterialsPanel, Panel): class TOPBAR_PT_gpencil_vertexcolor(GreasePencilVertexcolorPanel, Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'HEADER' - bl_label = "Vertex Color" + bl_label = "Color Attribute" bl_ui_units_x = 10 @classmethod diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index df07fbb3198..750e9b527f0 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -419,6 +419,9 @@ class VIEW3D_PT_tools_brush_color(Panel, View3DPaintPanel): elif context.vertex_paint_object: capabilities = brush.vertex_paint_capabilities return capabilities.has_color + elif context.sculpt_object: + capabilities = brush.sculpt_capabilities + return capabilities.has_color return False @@ -864,8 +867,7 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel): col.prop(mesh, "use_remesh_preserve_volume", text="Volume") col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask") col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets") - if context.preferences.experimental.use_sculpt_vertex_colors: - col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Vertex Colors") + col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Color Attributes") layout.operator("object.voxel_remesh", text="Remesh") |