参考動画
NLAエディタでアクションを結合・合成する方法
アクションの準備
アクションAとアクションBをどのように合成するかで準備が変わってくる。
一番わかり易いのは、アクションAは表情の動き, アクションBはBodyの動きといった感じで役割分担をさせている場合。
必要な箇所だけアクションを抽出する
例えばアクションDの中から指の動きだけ抽出したいという場合。
必要な指のリグだけ選択する。
同じくPoseModeのビュー内でCtrol + I を押し、さっきの必要な部分以外を選択した状態にする。
ActionEditorのChannel – DeleteChannelsを実行する。
再生してみてうまく抽出できていればOK。
この具合でそれぞれのアクション部位を分担しておく。
アクションエディタの使い方はここ
アクションのストリップ化
各アクションの作成が済んだら、FakeUserのマークがアクティブか確認しておく
アクションをNLAエディタで扱えるようにする(ストリップ化)。よく使うのは3つ
①ActionEditorのPushDownを押す(押すと割り当てられていたアクションは表示されなくなる)というもの
②NLAEditorを開き、オレンジの横のボタンを押すという方法
③NLAEditorのAdd – AddActionStrip でアクション一覧が表示されるのでそこからストリップ化したいアクションを選択するという方法。
一見わかりづらそうだが、NLA画面で操作が済むので、複数アクションを合成する場合はこれが便利
Transitionでつなげる(Aが終わったらBへ移動)
BlendのようにStripAとBを重ねつつ遷移させるのではなく、Aが終わったらBへというのでよい場合。
ふたつのStripを選択して、Shfit + T とすることで間に青色のTransitionが割り当てられる。
Transitionの動きを修正したい
遷移中の動きを修正したいことがある(たとえば予期せぬ箇所で一回転するとかめり込むとか)。
①Transitionの配置されているフレームをBakeする(リグを選択してBakeAction。Poseで)
②生成されたActionをPoseモードなりGraphEditorなりで修正する。
Blendでストリップを結合したり合成したりする
時系列で結合する/ アクションAからBへの移行を制御
ストリップABをNLAエディタに準備する。
同じトラック上に真横にABを並べれば、特別の操作なくABとアクションが進む。
ただタイミングなどを制御したいなら、Aを下段、Bを冗談に配置し、BlendInの値を調整する。
部位で合成する / 上半身と下半身などで別々のアクションを合成する
ここでは、アクションAを利用しつつ手の部分だけアクションBを使う という事例を扱う。
①アクションBの使いたい部分を抽出していく。アクションBをActionEditorにセットし、Poseモードで必要な箇所を選択する。
②Ctrol + I で反転し、ActionEditorの左のリグネーム部分で右クリック、DeleteChannnelsを実行する。
チャンネルが最初に選択した手の部分だけになっていればOK。
③両方のアクションをストリップ化し、手だけのアクションBのストリップを上、全身のアクションAを下のTrackに配置する。再生して確認。
トラックの整理
もし下記画像のようにやたらトラックが多い(RigだけでなくEyeやらChairやら他のオブジェクトがやたらある)という場合は注意が必要。
このとき使用したいのは赤枠のストリップ群だとする。つまりそれらを内包するrigトラックだけあれば事足りる。
それなのに見るとHairやeyeなどといったレイヤーが大量にトラックに存在している。
これはおそらく、それらのオブジェクト(HairやらEye)にも何らかのActionを設定してしまっているからだろう。
そのアクションが自ら設定した必要なものであればそのままでよいが、誤操作で割り当てているアクションの場合は整理しておいた方がいい。というのもトラックは上からのレイヤー構造になっているので、余計なのがあると干渉してくる可能性がある。
と言っても作業は簡単。トラックの名前をヒントに該当のオブジェクトを選択し、アクションエディタを開いて必要のないアクションを×ボタンでアンリンクするだけ。
Unlinkができれば、下記画像のようにTrakがNoActionとなっているはず。
あとはそのトラックを右クリックし、RemoveEmptyAnimationDataを実行する(Unlinkしてない状態でやろうとしても消せない)。
NLAのストリップの編集操作
移動・開始終了フレーム位置の変更
編集したいストリップを選択し、Gキーで移動する。
もしくわStripのプロパティ(Nキーで表示される)内にある FrameStart / FrameEnd で数値で指定する。
アニメーション速度の変更
ActionClipという項目にある、PlaybackScaleを変更することで速度を変えられる。
0.5にすれば速度は半分に、2にすれば倍速になる。
ストリップの複製
複製したいStripを選択し Shift + D で複製可能。新規にトラックが追加され、そこに複製される。
トラックのレイヤー順を変更する
これは移動したいトラックの名前の上で右クリックし、 TrackOrderingで動かす。
ストリップを分離する
再生位置のバーを分割したい箇所にもっていく。分割したいストリップを選択し、右クリックで SplitStrip を実行すると分割可能。
ストリップをリピートする
繰り返したいストリップを選択し、Stripメニューの ActionClip内にある Repeatの数値を変更する。
ストリップのアクションを再編集する
先に画面を分割してアクションエディタやポーズモードを開いておいた方がいい。
準備ができたら編集したいストリップを選択しTabキーを押す。
黄緑に変化すれば編集可能になるので、あとはアクションを作るときと同じように編集する。ポーズを変形し終えたらIキーでキーフレームを登録する
編集が終わったらTabキーで編集モードを終了。
NLAの干渉が邪魔な場合・NLAを一時的に非アクティブにする
NLA内でのアクション編集ではなく、アクションエディタでアクション単体を編集する場合はチェックを外すことで他のアクションの干渉を避けることができる。
その他具体的事例のメモ
リピートさせつつ、首や目だけポーズを変えたいといった事例
例えばあるアクションをNLAでリピートして使う際、少し単調なので首だけとか目だけ角度を変えたいということがある。
一番丁寧にやるならアクションを複製して、複製した方を編集、NLAでくっつけるという方法だろう。
ただ面倒くさかったり、アクションの数が増えすぎて管理しづらくなるというデメリットもある。
次の候補は、例えば首の角度を変えるだけのアクションを用意(例えば正面から右に、左から正面にとか)して、NLAで重ねて合成するという方法。
これはまばたきとか、口の動き(よくあるのはあいうえおの形をつくるという)の場合はいいと思うが、首の角度の場合、用意したアクションの角度がいまいちしっくりこず、再修正したりもう一個別角度のアクションを作るかといったことになる気がする。
最後は使い捨てのアクションを作ってNLAで合成するという方法。これはとにかく楽だが、あとから再度同じアクションを使ってとなると問題が出てくる(ベイクしておくか、使い捨てでなくFakeUserで登録しておくと避けられるが、アクションの数が増えるという副作用あり)
使い捨てアクションの手順(首の角度を変えるを例に)
①アクションをNLAにPushし、リピートしておく
②リグを選択した状態でActionEditorのNewを押して新規にアクションを作る。
そしたらPoseモードに移動し、首のリグを選択し、Iキーで登録する(これは現在の角度が登録されている)。
③そしたらそのアクションをPushDownする。NLAにとりあえず配置されているはず
④同じ手順でもうひとつNewでアクションを作る。
⑤こっちはPoseモードで首の角度を変えてキーを打ち、PushDownする。
⑥2つの首の角度アクションがNLAに配置されている。はじめのが元の角度、次が変更後。
レイヤーの位置としては、元のアクションよりも上にあるか確認。
この状況で再生すると、Aの角度からBに急に変わる。
⑦なのでAを複製し、A – A – B となるようにする。
さらに2つ目のAとBのStripを選択してShift + T を実行する。
Transitionで接続されるので、この箇所でAからBに角度が遷移していく。
繰り返しをもう少し自然にしたい
例えば繰り返す動きがぴったりおなじになると不自然になるので以下のような2つの方法でごまかすと効果的。
リピートを設定しているストリップにノイズモディファイアなどを割り当てて、自然になるように調整するというもの。
ストリップの設定からリピートをするのではなく、ストリップを複製し、複製したストリップの間をTransitionでつなげる(前後のストリップを選択してShit + T)というもの。
アニメーション編集中ウェイトを修正たくなったとき
アニメーションを設定することでウェイト修正したいと思うことはよくある。塗るだけならポーズ付きのままでもいいが、AutoRigProのようなアドオンを使って新規に何かをスキニングしたいといった場合、やはりポーズとかはRest
手順は
①
歩行アクションをループさせると、ポジションがリセットされてしまう
アクションによってはNLAで歩行アニメーションをリピートさせると、ループのたびに位置が最初の地点に戻るということがおこる。(下の画像だと、この位置からオレンジの原点の箇所に毎回ワープする感じになってしまう)
対処法1
リピート回数が少ないならこっちが楽だと思う。
ActionEditorを開く。
ポーズを全部選択して、歩行アクションのキーをまるごと複製してループの回数分だけ貼り付けていく。
この時点だと、NLAでリピートさせたときと同じ動きであり、ループの箇所で戻ってしまう。
ルートのボーンやリグを選択する(腰やhipの場合が多い)
その状態でGraphEditorを開くと、動きがリセットされる箇所が何となく分かる
ジグザグになっている箇所を選択し、Shift+Hでそれ以外を非表示にする。
あとはこれを右上がりになるようにしていく
上げたい箇所を選択し(Bキーでボックス選択できる)、G + Z で上にスライドさせる
修正して再生してみる。直っていればOK(Alt + S でsmoothを実行し微修正することもできる)。
対処法2
アクションをその場で歩行モーションするような感じにする → 前に進む動きは例えばConstraintのTracktoなどで別個に設定するという方法。
アクションの進行方向を変更したい
手前側に歩いてくるというアクションを奥側に進むようにしたいことがあった。
①まず進行方向をいじる
ポースモードを開いてルートのリグを選択
graphEditorの中のZlocationを選択(Shift +H で余分なグラフを非表示にできる。戻すときは Alt + H)
そしたらグラフを選択したまま右クリック – Mirror – でグラフを一括で変更する(今回はByValuesOverZeroValue)
これで進行方向は奥側になるが、体の向きはそのままなのでバックステップで奥に進む感じになる。
②体の向きを変える
やり方が分からなかったので、ポーズモードでルートのボーンを選択し、 R – Z – 180 でZ軸に180度回転させ , I – Rotation でキーフレームを上書きしていった。
打ち直しの途中でグラフエディタを開いてみると、なんとなく規則性が見て取れたので、途中からはグラフエディタでやるということも可能だった。
Mixamoのような全体にキーフレームが打たれているアクションをいじると微調整が大変だったので、いっそのことリグやらキャラを複製して、途中から表示非表示を使って使い分けるという方が楽かもしれない。
特定のボーンやリグの角度のみをGraphEditorで調整、変更(腕のめり込むを修正)
例えばMIXAMOのアニメーションをインポートしてAutoRigProとかでRemapして使用する際、キャラサイズの差異が原因で、手が腰にめり込んでしまうといったことがよくある。
腕のキーフレームを全削除して打ち直すといった方法もあるが、このような少しのめり込みを修正したいという場合。
①PoseModeとGraphEditorを開き、修正したいリグを選択する。
②とりあえずどこか一箇所のキーフレムでいいので、キーを打ち直し、めり込みを修正する(この場合はIキーで打った後、Rotaionだけを上書きした)
③当該のリグを選択したままグラフエディタを見て、今修正した箇所を探す。これはどれくらいの値を修正したかにもよるが、ある程度修正度合いが大きければ、修正した箇所は画像のようにポコっと目立っているはず(画像の場合はXEulerRotationというカーブ)
④あとはこの盛り上がっている箇所の周囲のキーを選択し、馴染むように移動していく。
選択して G – Z とかで行う。
⑤必要というわけではないが、ALT +S でSmoothをかけて仕上げる
NLAで合成したアニメーションをひとつのアクションとして書き出す・ベイクする
ポーズモードでリグやボーンを全選択する(ベイクしたいボーンだけを選択することもできる)。
NLAエディタの Edit – BakeAction を選択。
下のようなポップアップが出るので、フレーム数を指定し、必要な個所にチェックを入れOKを押す。
rigを使っているならPose。OnlySelectedのチェックを外すと全ボーンのキーフレームがベイクされる。
キーの整理 / アクションの軽量化
特に全ボーンの全キーフーレムをベイクしてしまうと、ひとつのアクションのサイズが肥大化しすぎだと感じる。
これを軽くするため、アクションエディタでCleanKeyframesを実行すると、動きのない箇所を整理してくれる(ただし微細な動きだと消してほしくない箇所まで修正されるので、ボーンを選択して実行するなどしたほうがいい)
ActionEditorを開くと、新しくアクションとしてベイクされているはず。
再生してみておかしいところがないならFakeUserをアクティブにし、名前を付け替えておこう。
コメント