Для того чтобы получить веса вертексов меша, как они распределяются по его вертекс-группам, при помощи Blender Python API нужно соотнести индекс вертекс-группы с индексом группы текущего вертекса.
Для начала нужно в цикле пройти по всем вертекс группам меша:
1 |
for group in bpy.context.object.vertex_groups: |
Индекс текущей группы можно получить через свойство index
1 |
group_index = group.index |
Выделим в список вертексы, которые входят в вертекс-группу с текущим индексом:
1 2 |
vert_in_group = [vert for vert in bpy.context.object.data.vertices \ if group_index in [i.group for i in vert.groups]] |
Здесь мы для каждого вертекса текущего активного объекта проверяем, входит ли индекс текущей вертекс-группы в список групп этого вертекса.
В результате мы получили список вертексов, разделенных по вертекс-группам:
1 2 3 4 5 6 |
# Group, group index: 0 # [bpy.data.meshes['Suzanne'].vertices[3], bpy.data.meshes['Suzanne'].vertices[9],... # Group.001. group index: 1 # [bpy.data.meshes['Suzanne'].vertices[2], bpy.data.meshes['Suzanne'].vertices[8],... # Group.002, group index: 2 # [bpy.data.meshes['Suzanne'].vertices[51], bpy.data.meshes['Suzanne'].vertices[60],... |
Один вертекс может принадлежать нескольким группам.
Посмотреть в какие группы входит вертекс можно следующим образом:
1 2 3 4 5 6 7 8 9 10 |
vg = [[group.group for group in vert.groups] for vert in vert_in_group] print(vg) # Group , group index: 0 # [[0], [0], [0], [0], [0, 2], [0], ... # Group.001 , group index: 1 # [[1], [1], [1], [1], [1], [1], [1] ... # Group.002 , group index: 2 # [[0, 2], [1, 2], [0, 2], [0, 1, 2], [0, 1, 2], [2]... |
Для того чтобы сопоставить индексы групп вертексов с индексом вертекс-групп нужно взять местоположение нужного индекса вертекс-группы в списке групп вертекса и уже от этой группы получить веса:
1 2 3 |
gr = [v.groups[[g.group for g in v.groups].index(group_index)].weight for v in vert_in_group] print(gr) |
В результате мы получаем список весов вертексов в соответствии с вертекс-группами меша:
1 2 3 4 5 6 |
# Group , group index: 0 # [1.0, 0.9997303485870361, 0.9992071390151978, 1.0, 1.0, 1.0, 1.0, ... # Group.001 , group index: 1 # [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, # Group.002 , group index: 2 # [1.0, 0.09085874259471893, 0.7725147604942322, 1.0, ... |