(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



VR上で自分の動きを録画してアニメーションを作る【Unity】【VR】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.4.20f1
SteamVR Plugin 2.5.0 (sdk 1.8.19)
Final IK 1.9
EasyMotionRecorder v1.1.6
Very Animation 1.2.3p2


はじめに

UnityはAsset Storeを中心に色々なアニメーションのを入手することが可能ですが、

ピンポイントで「こんなアニメーション欲しい!」という場合、

丁度いいアセットというのは中々無いことが多いです。


とは言え、自分で一から作るというのも難易度が高いと思います。


今回はそんな時に使える、VR上で自分の動きを録画してアニメーションを作る方法の紹介です。

f:id:kan_kikuchi:20200429081753g:plain


先に流れをざっくり説明すると以下のような感じです。

  1. Steam VR PluginでVR上での操作を実装
  2. Final IKで自分の動きとキャラクターの動きを連動
  3. EasyMotionRecorderで動きをアニメーションとして録画
  4. Very Animationで録画したアニメーションを編集


なおFinal IKとVery Animationは有料アセットなので、あしからず。


Steam VR PluginでVR上での操作を実装

まずSteam VR Pluginを使って、UnityでVRでの操作を実装します。

SteamVR Plugin | Integration | Unity Asset Store


実装と言ってもアセットをインストールしてシーンを再生するぐらいで終わります。

詳しくは以前に導入記事を書いているので、そちらを参考にしてみてください。



以下のような感じでVR上で動けるようになっていればOKです。

f:id:kan_kikuchi:20190114181924g:plain:w800



Final IKで自分の動きとキャラクターの動きを連動

次にFinal IKで自分の(コントローラーとヘッドセットの)動きとキャラクターの動きを連動させます。

Final IK | Animation Tools | Unity Asset Store


Final IKインストール後、適当なシーンにCameraRigというPrefabを設置します。

なお、他のカメラ(デフォルトで設置されているMain camera等)は消します。

f:id:kan_kikuchi:20200423125248j:plain


そしてCameraRigの以下の場所に

LeftHandとRightHand、そしてHeadというGameObjectを配置します。

f:id:kan_kikuchi:20200424070349j:plain


さらに連動したいモデルを配置し、

Satomi Character Pack | 3D Characters | Unity Asset Store


そのモデルにVRIKというコンポーネントをAdd

f:id:kan_kikuchi:20200423130847j:plain


VRIKコンポーネントの以下の項目に先程作成したGameObjectを設定します。

f:id:kan_kikuchi:20200424070518j:plain


とりあえずこれで自分の動きに合わせてモデルが動くようになります。



ただし、前が見えなかったり、動きが変だったりするので次項から調整をしていきます。

前が見えるように調整

初期状態だと、カメラの前に顔があって前が見えないので

CameraのClippingPlanesのNearを変更して、近いものはカメラに映らないようにします。

f:id:kan_kikuchi:20200423162917j:plain


目安としては、顔が見えなくて体や手が見えるぐらいの値にする感じです。

f:id:kan_kikuchi:20200423163002j:plain



動きを確認できるように鏡を配置

次に自分の動きがVR上でも確認出来るように目の前に鏡的な物を置きます。


ProjectのCreateからRender Textureを作成、Sizeを2048 × 2048等大きめに設定します。

f:id:kan_kikuchi:20200423163816j:plain


新たにCameraを作成し、

f:id:kan_kikuchi:20200423164456j:plain


モデルが写るように配置します。

f:id:kan_kikuchi:20200423164514j:plain


そのCameraのTargetTextureに先程のRender Textureを設定し、

カメラの映像がRender Textureに描画されるようにします。

f:id:kan_kikuchi:20200423164527j:plain


さらにMaterialを作成し、

f:id:kan_kikuchi:20200423165022j:plain


ShaderをUnlit/Textureにした後、Render Textureを設定します。

f:id:kan_kikuchi:20200423165136j:plain


最後にPlaneを作成し、

f:id:kan_kikuchi:20200423165149j:plain


先程作成したMaterialを設定後、

f:id:kan_kikuchi:20200423165202j:plain


VR上のカメラから見えるように配置すれば完了です。

f:id:kan_kikuchi:20200423165253j:plain


これで自分がどんな動きをしているか簡単に確認出来るようになります。





手や足の調整

ここからは手や足の位置や動きを調整していきます。

なお、人やモデルによって各数値は変わるので、その点は注意してください。


まずはCameraRig以下に配置したRightHandとLeftHandのPositionとRotationを調整して

手首の角度をコントローラーに合わせます。

f:id:kan_kikuchi:20200424070829j:plain


実際に調整前後のモデルを見てみると以下のような感じ。

f:id:kan_kikuchi:20200424070044j:plain f:id:kan_kikuchi:20200424070055j:plain


次にCameraRigのScaleのYを調整して身長を合わせます。

自分が直立してる時にモデルも直立してる感じになればOKです。

f:id:kan_kikuchi:20200424071728j:plain
f:id:kan_kikuchi:20200424072127j:plain


同様にCameraRigのScaleのXとYを調整して手の幅を合わせます。

両手を広げた時にコントローラーが両手の先にある感じになればOKです。

f:id:kan_kikuchi:20200424071747j:plain
f:id:kan_kikuchi:20200424072110j:plain


さらに膝の角度をVRIKのSwivel Offsetで調整、

f:id:kan_kikuchi:20200424072519j:plain


歩幅をLocomotionで調整すれば完了です。

f:id:kan_kikuchi:20200424072529j:plain


なお、コントローラーを消したい場合はModelを非アクティブにします。

f:id:kan_kikuchi:20200424073746j:plain


調整後は以下のような感じで違和感がほとんどなくなるかと思います。





EasyMotionRecorderで動きをアニメーションとして録画

自分の動きとキャラクターの動きを連動出来るようになったら、

Easy Motion Recorderを使って、その動きを録画していきます。


なお、Easy Motion Recorderというは以下のものでGitHub(MITライセンス)で公開されています。



以下のリリースページからunitypackageをダウンロードしそれをプロジェクトに導入後、


f:id:kan_kikuchi:20200427192857j:plain


シーン上にEasyMotionRecorderを配置し、

f:id:kan_kikuchi:20200427193117j:plain


EasyMotionRecorderに付いている

Motion Data PlayerとMotion Data RecorderのAnimatorにモデルを設定すれば準備完了。

f:id:kan_kikuchi:20200427193309j:plain


キーボードのRで録画をスタートし、Xでストップ出来ます。

f:id:kan_kikuchi:20200427193438j:plain


なお、ストップと同時にResouresに録画されたファイルが保存されます。

f:id:kan_kikuchi:20200428193032j:plain


そしてそのファイルをExport as Humanoid animation clipsし、

アニメーションファイルをエクスポートした後、

f:id:kan_kikuchi:20200428193051j:plain


アニメーションファイルの

Bake into Poseにチェックを入れ、Based UponをOriginalに設定すれば、

f:id:kan_kikuchi:20200429070549j:plain


とりあえずのアニメーションファイルが出来ます。

f:id:kan_kikuchi:20200428193119g:plain


録画開始時や終了時に余計な動作があったり、位置がおかしかったりでそのままは使えないので、

次項からはこのアニメーションを編集していきます。


Very Animationで録画したアニメーションを編集

アニメーションの編集はそのままだと大変なのでVery Animationというアセットを使っていきます。

Very Animation | Animation Tools | Unity Asset Store


ちなみに以前、紹介記事を書いていたりします。



Very Animationのインポートが済んだらアニメーション編集用シーンを作り、モデルを配置します。

f:id:kan_kikuchi:20200429065623j:plain


そのモデルに、先ほど作成したアニメーションファイルを設定します。

f:id:kan_kikuchi:20200429070357j:plain


さらに、Very Animationのメインウィンドウを表示し、

f:id:kan_kikuchi:20200429071425j:plain


そのウィンドウのOpen Animation Windowを押し、

(Animation Windowを既に開いてる場合は次へ)

f:id:kan_kikuchi:20200429071432j:plain


配置したモデルを選択した状態でEdit Animationを押せば、

f:id:kan_kikuchi:20200429071441j:plain


準備OK。

f:id:kan_kikuchi:20200429075301j:plain


まずはメインウィンドウのToolsからKeyframe Reductionを選んで実行します。

これにより、無駄なキーが削減されます。

f:id:kan_kikuchi:20200429075325j:plain


次にTrimを選び、アニメーションの必要な所だけ切り出します。

f:id:kan_kikuchi:20200429075518j:plain


最後にRoot Motion位置を合わせれば最低限の調整は完了です。

f:id:kan_kikuchi:20200429075630j:plain


とりあえずこれで使い物になるアニメーションが出来ると思います。

f:id:kan_kikuchi:20200429081753g:plain



参考