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:
authorJoseph Eagar <joeedh@gmail.com>2022-04-05 21:42:55 +0300
committerJoseph Eagar <joeedh@gmail.com>2022-04-05 21:42:55 +0300
commiteae36be372a6b16ee3e76eff0485a47da4f3c230 (patch)
treed1ca2dc30951e31f1b91eed6a4edfdfb0824bf1f /release
parenta3e122b9aec59fc303c2375a78183cfb8642c14f (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.datbin0 -> 1574 bytes
-rw-r--r--release/datafiles/icons/brush.sculpt.smear.datbin0 -> 1700 bytes
-rw-r--r--release/datafiles/icons/ops.sculpt.color_filter.datbin0 -> 1700 bytes
-rw-r--r--release/datafiles/icons/ops.sculpt.mask_by_color.datbin0 -> 3716 bytes
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py3
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py150
-rw-r--r--release/scripts/startup/bl_ui/properties_material_gpencil.py4
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py19
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py1
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py18
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py6
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
new file mode 100644
index 00000000000..1cee34c0dee
--- /dev/null
+++ b/release/datafiles/icons/brush.sculpt.paint.dat
Binary files differ
diff --git a/release/datafiles/icons/brush.sculpt.smear.dat b/release/datafiles/icons/brush.sculpt.smear.dat
new file mode 100644
index 00000000000..3efba0b4cb1
--- /dev/null
+++ b/release/datafiles/icons/brush.sculpt.smear.dat
Binary files differ
diff --git a/release/datafiles/icons/ops.sculpt.color_filter.dat b/release/datafiles/icons/ops.sculpt.color_filter.dat
new file mode 100644
index 00000000000..d589b15a124
--- /dev/null
+++ b/release/datafiles/icons/ops.sculpt.color_filter.dat
Binary files differ
diff --git a/release/datafiles/icons/ops.sculpt.mask_by_color.dat b/release/datafiles/icons/ops.sculpt.mask_by_color.dat
new file mode 100644
index 00000000000..637c47d2d84
--- /dev/null
+++ b/release/datafiles/icons/ops.sculpt.mask_by_color.dat
Binary files differ
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")