MkItYs

MkItYs > 音楽・漫画・VR・自律制御 > 

images

物理ベースのキャラにアニメーションをコピーする:Unity (ConfigurableJoint) , UnityChan, VRM (VRoid) , DAZ

images

物理ベースのキャラ(アクティブラグドール)に、アニメーションの動きやポージングをさせるための手順です。


検証


OS:macOS 11, Windows 10
アプリ:Unity 2021.2.8f1
ライブライリ:ConfigurableJointExtensions.cs

アニメーションやポーズのコピー


物理ベースのキャラにアニメーションの動きやポージングをさせたい場合、もっとも手っ取り早いやり方は、3Dキャラからアニメーションやポーズをコピーすることです。

これは、3Dキャラの関節の回転を、物理ベースのキャラの能動的なジョイント(ConfigurableJoint )にコピーすることで実現します。ボージングについても、IK/FKの操作はアニメータ(AnimatorController)の管理下にあるので、同じやり方で転写できます。

ただしこの回転は、コピー元とコピー先の、それぞれのボーンの軸の向きの違いを考慮する必要があります。この違いを吸収するメソッドは、次にあります:

https://gist.github.com/mstevenson/7b85893e8caf5ca034e6

このメソッドを使った関節のコピーは、次のようになります(ただしこの方法では、コピー先の初期の回転を、最初に保存しておく必要があります):

ConfigurableJoint cfjdst; // コピー先のジョイント
Quaternion quasrc; // コピー元の現在の回転
Quaternion quoini; // コピー先の初期の回転

cfjdst.SetTargetRotationLocal(quasrc,quoini); // 関節の回転を、コピー元からコピー先に転写する

※1
アニメーションのコピーは、部分的にもできます。この部分的なアニメーションと、ジョイントの強度の設定を組み合わせることで、キャラクタに(手つきのアニメーションとは違う、物理的に)よりリアルな動作をさせることができます。