シェイプキーで表情を作成している時に、動かすつもりのなかった頂点まで動かしていたことに気付くことがある。
選択したシェイプキーのみ修正する
手動で実施する場合の手順は以下の通りである。
- Edit モードで移動を取り消したい頂点を選択する
- Vertex > Blend from Shape をクリックする
- Shape を設定する
- Blend の値を -1 に設定する

シェイプキーを1つだけ修正するなら手動でも問題ないが、複数あると面倒なので、以下の手順を利用する。
- Edit モードで移動を取り消したい頂点を選択する
- 以下のスクリプトを実行する
import bpy
i = bpy.context.object.active_shape_key_index
key = bpy.context.active_object.data.shape_keys.key_blocks[i].name
bpy.ops.mesh.blend_from_shape(shape=key, blend=-1, add=True)

全てのシェイプキーを修正する
シェイプキーを複製していたせいで、全てのシェイプキーを修正しなくてはならないような場合がある。

手動で実施する場合の手順は以下の通りである。
- Edit モードで移動を取り消したい頂点を選択する
- 別のオブジェクトとして分離(P)する
- シェイプキーを全て削除する
- 元のオブジェクトに統合(Ctrl + J)する
しかし、オブジェクトを分離できない場合は、Blend from Shape を利用して、シェイプキー毎に修正してゆかなければならない。それは面倒なので、以下の手順を実行する。
- Edit モードで移動を取り消したい頂点を選択する
- 以下のスクリプトを実行する
import bpy
keys = bpy.context.active_object.data.shape_keys.key_blocks.keys()
for i in range(1, len(keys)):
bpy.context.object.active_shape_key_index = i
bpy.ops.mesh.blend_from_shape(shape=keys[i], blend=-1, add=True)
bpy.context.object.active_shape_key_index = 0

以上