【Unity4】Unityでスクリプトからスキンメッシュアニメーションのフルコントロールに挑戦 、完了

昨日の推測に間違いはなく、実際に検証できた。

まずは動画を貼り付けておく。

表情のアニメーションと関節のアニメーションはおのおの独立している。

また、口の動きは途中、縦に開くシェイプと横に開くシェイプがブレンドされている。

これらの動作は、メカニムを介さず、FBX内のモーションも使用せず、全てスクリプトからリアルタイム(フレーム更新処理内)で動かしている。

動かすためのデータはというと、VMDやBVHのパーサーを作るのも大掛かりなので、今回は簡単なモーションデータとブレンドシェイプのフォーマットを定義して、実行時にUnityから読込んで動かしている。

たとえばモーションデータフォーマットはBVHのフォーマットをさらに簡略化したようなもので以下のようになっている。

Character1_Neck, Character1_LeftArm, Character1_RightArm
  0,  0,  0,-20,  0, 70,  0,  0,-70,  0
 30,  0,  0,-30,  0, 60,  0,  0,-60,  0
 60,  0,  0,-20,  0, 70,  0,  0,-70,  0
 90,  0,-15,-20,  0, 80,  0,  0,-80,  0
120,  0, 15,-20,  0, 70,  0,  0,-70,  0
150,  0,  0,-20,  0, 60,  0,  0,-60,  0
180,-15,  0,-20,  0, 70,  0,  0,-70,  0
210, 15,  0,-20,  0, 80,  0,  0,-80,  0
240,  0,  0,-20,  0, 70,  0,  0,-70,  0

先頭行では動かしたいターゲットボーンのユニークな名前を羅列する。

二行目以降で、キーフレーム毎の各ターゲットのオイラー角度(X,Y,Z)となっている。

各ターゲットのオイラー角度は、親からの相対角度で、いわゆるボーンローカル回転角(ここ重要)

先頭カラムがフレーム番号で、以降は先に定義したターゲットの順番に格納している。

ブレンドシェイプも似たようなもので、オイラー角度がウェイトに置き換わっているくらい。

これで、アニメーションデータをあらかじめパッケージすることなく、外部ファイルとして取り込んで、キャラクターをアニメーションさせることも可能である。

うん、ひょっとしたら、前回の記事とあわせるといままで一番誰かの役に立ちそうな記事になったかもしれない。わはは。

4年前

コメントを残す

メールアドレスが公開されることはありません。