How to Clean Zero Weight Vertex Groups in Blender

Cleaning zero weight vertex groups in Blender removes unnecessary weight data and empty group containers from your 3D models. This process optimizes your mesh, reduces file sizes, and prevents unwanted mesh deformations or errors during rigging and animation.

Step 1: Remove Zero Weights from Vertices

To strip vertices of zero or near-zero weight values across all existing groups, use Blender's built-in Weight Paint clean tool:

  1. Select your mesh object in the 3D Viewport.
  2. Switch to Weight Paint Mode using the mode selector in the top-left corner (or press Ctrl + Tab and select Weight Paint).
  3. Click on the Weights menu in the top viewport header.
  4. Select Clean from the dropdown menu.
  5. Open the Clean Vertex Group operator box in the bottom-left corner of the 3D Viewport.
  6. Change Subset to All Groups.
  7. Set the Limit value (e.g., 0.001). Any vertex weight equal to or below this threshold will be completely removed from the group.

Step 2: Delete Empty Vertex Groups

Removing the zero weights from vertices does not automatically delete the empty vertex group names from your object's properties list. To remove vertex groups that contain no assigned weights:

Method A: Using the Vertex Groups Menu

  1. Select your object and go to the Object Data Properties tab (green triangle icon) on the right panel.
  2. Lock any active vertex groups you want to preserve by clicking the lock icon next to their names.
  3. Click the down-arrow icon located to the right of the Vertex Groups list.
  4. Select Delete All Unlocked Groups.

Method B: Using a Quick Python Script

If you have many groups and want to automatically remove only those with zero assigned weights without locking groups manually:

  1. Switch to the Scripting workspace or open a Text Editor window in Blender.
  2. Click New to create a new script.
  3. Paste the following script:
import bpy

obj = bpy.context.active_object

if obj and obj.type == 'MESH':
    # Find all groups with assigned weights
    weighted_groups = {g.group for v in obj.data.vertices for g in v.groups if g.weight > 0}
    
    # Remove groups that have no weights
    for vg in list(obj.vertex_groups):
        if vg.index not in weighted_groups:
            obj.vertex_groups.remove(vg)
  1. Select your mesh in Object Mode and click Run Script (or press Alt + P). Any vertex group with no positive weights assigned to any vertex will be deleted instantly.