「あいうえお」の表情を基に VRChat 用のシェイプキーを作成する

本来は英語の発音に合わせて口の形を作るべきだが、VRChat で日本語しか話さないのであれば、むしろ「あいうえお」を Viseme に無理やり割り当てた方が、自然な口の形になるかもしれない。

まずは、VRChat 用の空のシェイプキーを追加する。(空のシェイプキーを追加する
次に以下のスクリプトを実行する。「あいうえお」の口の形を基に適当に作成している。

import bpy

def make_vrchat_shape_keys_from_aiueo():
    
    if bpy.context.mode != 'OBJECT':
        bpy.ops.object.mode_set(mode='OBJECT')
    
    shape_keys = bpy.context.active_object.data.shape_keys.key_blocks
    
    key_dic = {}
    for shape_key in shape_keys:
        if shape_key.name == "A":
            key_dic["A"] = shape_key
        elif shape_key.name == "I":
            key_dic["I"] = shape_key
        elif shape_key.name == "U":
            key_dic["U"] = shape_key
        elif shape_key.name == "E":
            key_dic["E"] = shape_key
        elif shape_key.name == "O":
            key_dic["O"] = shape_key
    
    vrc_keys = {
        "vrc.v_sil":{},
        "vrc.v_PP":{"I":0.1},
        "vrc.v_FF":{"I":0.4,"U":0.1},
        "vrc.v_TH":{"I":0.2,"U":0.5},
        "vrc.v_DD":{"I":0.3,"U":0.5},
        "vrc.v_kk":{"I":0.8,"U":0.4},
        "vrc.v_CH":{"I":0.7,"U":0.6},
        "vrc.v_SS":{"I":0.8,"U":0.2},
        "vrc.v_nn":{"I":0.7,"U":0.5},
        "vrc.v_RR":{"I":0.8,"U":0.5},
        "vrc.v_aa":{"A":1.0},
        "vrc.v_E":{"E":1.0},
        "vrc.v_ih":{"I":1.0},
        "vrc.v_oh":{"O":1.0},
        "vrc.v_ou":{"U":1.0}
    }
    
    for vrc_key in vrc_keys.keys():
        bpy.ops.object.shape_key_clear()
        aiueo_keys = vrc_keys[vrc_key]
        for aiueo_key in aiueo_keys.keys():
            key_dic[aiueo_key].value = aiueo_keys[aiueo_key]
        bpy.context.active_object.shape_key_add(name=vrc_key,from_mix=True)
    bpy.ops.object.shape_key_clear()
    
make_vrchat_shape_keys_from_aiueo()

「あいうえお」のシェイプキーは、それぞれ、”A”, “I”, “U”, “E”, “O” という名前に設定する必要がある。

「い」で縦、「う」で横に口が広がるため、基本的にこの 2 つをミックスして、VRChat 用のシェイプキーを作成している。厳密に設定する必要はないと思われるが、気になるようであれば、適宜 vrc_keys の値を変更すると良い。

コメントする

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