VR Dance Viewer 用 アセットバンドルの作り方(VRM Animation Brige 編)

2024/07/19

Unity VRDanceViewer

t f B! P L
今回の記事は、VR Dance Viewer 用アニメーションのアセットバンドル(.ab) を作る際、VRMブレンドシェイプを操作する方法になります(本体0.11以降対応)。 基本的なアニメーションのアセットバンドルの作り方はこちらをみてくださいね。

事前準備

こちらの記事の事前準備に加え、UniVRMと Toolフォルダの VRDanceViewer-AnimationBrige.unitypackage をインポートしてください。

VRMブレンドシェイプを操作するアニメーションクリップの作り方

VRMアバターをシーンに配置し、VRMアバターのインスペクターの下部に
uniharu / VrmAnimationBridge フォルダにある AnimationBridge をドラッグ&ドロップしてセットします。




セット(アタッチ)できるとAnimationBrigeの項目が追加されます。



アニメーション作成時に、インスペクターの AnimetionBrige 内の項目を編集して記録することで、VRM ブレンドシェイプを操作できます。


操作できる項目は、以下の通りです :
Lip_A , Lip_I , Lip_U , Lip_E , Lip_O , Blink , Blink_L , Blink_R , Expression_Joy , Expression_Angry , Expression_Sorrow , Expression_Fun

指定可能な数値は、最小値 0 , 最大値 1 です(半分だと 0.5 になります)。


頭に I がついている以下の項目でもブレンドシェイプを操作することができます :
ILip_A , ILip_I , ILip_U , ILip_E , ILip_O , IBlink , IBlink_L , IBlink_R , IExpression_Joy , IExpression_Angry , IExpression_Sorrow , IExpression_Fun

こちらは最小値 0 , 最大値 100 の数値でブレンドシェイプの値を指定できます。


無印と I がついているパラメーターが両方あるクリップの場合、Iがついている方が優先されますが、1つのクリップで無印と I のパラメーターは同時使用しないでください。

音声ファイルからAnimetionBrigeを作成する

こちらをご覧ください。
OVRLipSyncで音声ファイルからリップシンクアニメーションを作る

VRM1でのプレンドシェイプ変換

VRM1では、AnimationBridge で指定した値が以下の表のように変換されます(Iつきの方も同様)。加えて、Expression_Surprised が利用できます。
(VRM0 の場合は Expression_Surprised の値は無視されます)

AnimationBridge VRM0 VRM1
Lip_A A Aa
Lip_I I Ih
Lip_U U Ou
Lip_E E Ee
Lip_O O Oh
Blink Blink Blink
Blink_L Blink_L BlinkLeft
Blink_R Blink_R BlinkRight
LookUp LookUp LookUp
LookDown LookDown LookDown
LookLeft LookLeft LookLeft
LookRight LookRight LookRight
Expression_Joy Joy Happy
Expression_Angry Angry Angry
Expression_Sorrow Sorrow Sad
Expression_Fun Fun Relaxed
Expression_Surprised
Surprised


アニメーションファイル(YAML)を直接書き換える

この方法は「試してみたら動いた」程度の情報であり、おそらくUnity的には推奨されません。
書き換えるファイルのバックアップは必ずとってください。


このようなアニメーションクリップのブレンドシェイプを VRM AnimetionBrige に移植しようと思った場合、ブレンドシェイプの値をスクリプトのパラメーターとして変換する方法がUnityには(おそらく)ありません(知ってたら教えてください)。


なので、アニメーションファイルをテキストエディタで開き直接編集します。

このような Body の ブレンドシェイプ A を指定している部分を

    attribute: blendShape.A
    path: Body
    classID: 137
    script: {fileID: 0}
    flags: 0


このように書き換えます。
通常のブレンドシェイプは 0から 100の値で格納されているので、ILip_A の方を使います。
    attribute: ILip_A
    path: 
    classID: 114
    script: {fileID: 11500000, guid: be9e79c488fe86a43bd18422f2d73ee0, type: 3}
    flags: 16

同様に、I, U, E, O と表情の近そうなものを書き換えます。

うまくいくと、このようにブレンドシェイプの値が AnimationBrige の値に変更されます。

(先ほどのアニメーションクリップを対応していないアバターに付けたため、変換していない項目は黄色のエラー表示になっています)



この変換したデータをアセットバンドルとしてビルドすることで、VRMの口や表情が動くデータになります。


(将来的にはツールとか作って楽に書き換えれるようにしたいなぁ)


関連記事

VR Dance Viewer マニュアル
VRDanceViewer用アセットバンドルの作り方

このブログを検索

Amazon.co.jp[PR]

このブログについて

QooQ