A single vertex can have multiple colors at the same time, because it can belong to multiple faces (with different colors). The vertex colors are stored per face loops and not in vertices themselves:
Vertex colors can be viewed in Vertex Paint mode. In this mode individual vertices can also be edited with brushes:
The drawing can be constrained to selected faces, but not selected vertices. Blender doesn't allow this from the UI like other software you mentioned (Max).
You can set the colors to individual face-loop vertices with python like this:
for ipoly in range(len(ob.data.polygons)):
for ivertex in ob.data.polygons[ipoly].loop_indices:
ob.data.vertex_colors["col"].data[ivertex].color = (R,G,B)
Here is a script that when run in Text editor will add panel to properties (N) so you can assign vertex colors to vertices in edit-mode:
The viewing of vertex colors is still best in vertex paint mode, having this in panel would clutter it.
Code:
import bpy
import bmesh
class VertexColEditPanel(bpy.types.Panel):
bl_label = "Vertex Colors"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
@classmethod
def poll(self, context):
ob = context.active_object
try:
return ob and ob.type == 'MESH' and ob.mode == 'EDIT'
except (AttributeError, KeyError, TypeError):
return False
def draw(self, context):
layout = self.layout
bm = bmesh.from_edit_mesh(context.active_object.data)
if bm.select_mode != {'VERT'}:
layout.label("Vertex select only", icon = 'INFO')
return
selected = [vert.index for vert in bm.verts if vert.select]
if not selected:
layout.label("Nothing selected", icon = 'INFO')
else:
layout.template_list("MESH_UL_uvmaps_vcols", "vcols", context.active_object.data, "vertex_colors", context.active_object.data.vertex_colors, "active_index", rows=1)
row = layout.row(align=True)
row.prop(context.scene, 'color_picker', text="")
row.operator("vertex_col.apply")
class ApplyVertCol(bpy.types.Operator):
bl_idname = "vertex_col.apply"
bl_label = "Assign"
bl_description = "Assign color to selected vertices for selected vertex color layer"
def execute(self, context):
me = context.active_object.data
bm = bmesh.from_edit_mesh(me)
selected = [vert.index for vert in bm.verts if vert.select]
bpy.ops.object.mode_set(mode='EDIT', toggle=True)
for face in me.polygons:
for vert_idx, loop_idx in zip(face.vertices, face.loop_indices):
if vert_idx in selected:
me.vertex_colors[me.vertex_colors.active_index].data[loop_idx].color = context.scene.color_picker
bpy.ops.object.mode_set(mode='EDIT', toggle=True)
return{'FINISHED'}
bpy.utils.register_module(__name__)
bpy.types.Scene.color_picker = bpy.props.FloatVectorProperty(subtype='COLOR_GAMMA', default=(1,1,1), min=0.0, max=1.0, description="Color Picker")