Script: Remove unused vertex groups from shape - BadDogSkyrim/PyNifly GitHub Wiki

""" Remove unused vertex groups from shape 
Useful when creating a full mesh from a half mesh. Mirror the mesh 
then run this script to flip the vertex groups.
"""

import bpy
import bmesh

obj = bpy.context.object

bm = bmesh.new()
bm.from_mesh(obj.data)

deform_layer = bm.verts.layers.deform.active
used_groups = set()
if deform_layer:
    #log.debug("Have deform layer")
    for v_index, v in enumerate(bm.verts):
        for g_index, w in v[deform_layer].items():
            #if v_index==2945: log.debug(f"Vert 2945 in group {obj.vertex_groups[g].name} with weight {w}")
            if w > 0.0001:
                used_groups.add(obj.vertex_groups[g_index].name)

all_groups = set([g.name for g in obj.vertex_groups])
unused_groups = all_groups.difference(used_groups)

for g in unused_groups:
    if not g.startswith("FO4") and not g.startswith("SBP"):
        print(f"Deleting group '{g}'")
        obj.vertex_groups.remove(obj.vertex_groups[g])