【Blender】 いらないシェイプキーをまとめて削除する

使わないシェイプキー(Maya, Unity で言うブレンドシェイプ)が大量にあってファイルサイズが無駄に肥大化している場合、Python スクリプトで一括削除すると便利です。

シェイプキーが大量にある例
いらないシェイプキーが大量にある……

シェイプキーが設定されているメッシュが m_avg オブジェクトにあり、Basis シェイプキー以外を削除したい場合は以下のようなスクリプトを実行します。

f:id:arcturu:20201228184532p:plain
m_avg オブジェクト内のメッシュのシェイプキーを消したい

import bpy

# 消したいシェイプキーが存在するメッシュのオブジェクト名
target_name = "m_avg"

# 当該オブジェクトを選択する
bpy.data.objects[target_name].select_set(True)

# シェイプキーのリストを取得する
shape_keys = bpy.data.objects[target_name].data.shape_keys.key_blocks

# シェイプキーのリストを逆順に舐める
# (先頭から消すとインデックスがずれるので後ろから消す)
for i, shape_key in reversed(list(enumerate(shape_keys))):
    # 消したくないシェイプキーは除外する
    if shape_key.name != "Basis":
        # シェイプキーを選択して、削除
        bpy.context.active_object.active_shape_key_index = i
        bpy.ops.object.shape_key_remove()

参考