今回の記事は、VR Dance Viewer 用アニメーションのアセットバンドル(.ab) を作る際、VRMブレンドシェイプを操作する方法になります(本体0.11以降対応)。 基本的なアニメーションのアセットバンドルの作り方はこちらをみてくださいね。
VRMブレンドシェイプを操作するアニメーションクリップの作り方
VRMアバターをシーンに配置し、VRMアバターのインスペクターの下部に
uniharu / VrmAnimationBridge フォルダにある AnimationBridge をドラッグ&ドロップしてセットします。
事前準備
こちらの記事の事前準備に加え、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用アセットバンドルの作り方



0 件のコメント:
コメントを投稿