作成したシェイプキーと Basis を反転する

汗や涙などのように、頭の内部に隠したメッシュを表情に利用する場合がある。メッシュが見えない所にあるとモデリングできないので、基本的には以下のようにシェイプキーを作成することが多い。
blend = 0 の時に、メッシュを頭の外側に出す。
blend = 1 の時に、メッシュを頭の内側に隠す。

最終的には以下のようにシェイプキーを設定したい。
blend = 0 の時に、メッシュを頭の内側に隠す。
blend = 1 の時に、メッシュを頭の外側に出す。

選択したシェイプキーのみ反転する場合

  1. Edit モードで反転させたい頂点を選択する
  2. 反転させたいシェイプキーを選択する
  3. 以下のスクリプトを実行する
import bpy

bpy.ops.object.mode_set(mode='EDIT')
#bpy.ops.mesh.select_all(action='SELECT') #頂点を全選択する

index = bpy.context.object.active_shape_key_index

if index != 0:
    keys = bpy.context.active_object.data.shape_keys.key_blocks.keys()

    bpy.context.object.active_shape_key_index = 0
    bpy.ops.mesh.blend_from_shape(shape=keys[index], blend=1, add=True)

    bpy.context.object.active_shape_key_index = index
    bpy.ops.mesh.blend_from_shape(shape=keys[index], blend=-2, add=True)

全てのシェイプキーを一括で反転する場合

  1. Edit モードで反転させたい頂点を選択する
  2. 以下のスクリプトを実行する
import bpy

bpy.ops.object.mode_set(mode='EDIT')
#bpy.ops.mesh.select_all(action='SELECT') #頂点を全選択する

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 = 0
    bpy.ops.mesh.blend_from_shape(shape=keys[i], blend=1, add=True)
    bpy.context.object.active_shape_key_index = i
    bpy.ops.mesh.blend_from_shape(shape=keys[i], blend=-2, add=True)

bpy.context.object.active_shape_key_index = 0

所感

スクリプトには必要最低限のコードしか書いていないので、適宜修正して使ってほしい。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です