見出し画像

【Animation】IKFK(ほぼ)変換方法【Maya】


はじめに

皆さん、こんにちは。涼海と申します。
今回は、私がアニメーション制作時に悩んだアニメーションのIKFK変換についてメモしていきたいと思います。
こちらは特にFKからIKへの変換方法について書かれております。
いつもの通り間違い等あるかもしれませんが、見つけたらそっと私のXにでもご連絡いただけたらと思います。
では、よろしくお願いいたします。

参考

毎度のことながらいつもありがとうございます。

アニメーションのIKFK変換

なぜこのような悩みが発生したのか

私がこのアニメーションのIKFK変換で悩んだのは、以下のようなワークフローでアニメーションをしようと考えたからでした。

  1. FKでアニメーションをつける

  2. 手のFKをアニメーション維持したままIKに変換

  3. 手の位置がずれないようにアニメーション微調整

この時の2.の部分で、FKのアニメーションをIKに変換する必要がありました。

IKFK変換のワークフロー

では、まずは全体的なフローです。

  1. Locatorを3つ作成

  2. FKアニメーションをしたリグの手首のコントローラーに1.で作成したLocatorをそれぞれMatch Transformする

  3. LocatorをそれぞれのコントローラーにConstraintする

  4. LocatorのアニメーションBakeをおこなう

  5. リグのFKをIKに変更する

  6. IKの手首肘のポールベクターのコントローラーを4.でBakeしたLocatorにそれぞれConstraintする

  7. IKの手首肘のポールベクターのコントローラーのアニメーションBakeをおこなう

短く言うと「FKのアニメーションをWorldBakeしてIKに変換する」ということになりそうです。

次にひとつひとつの工程をより具体的に見ていきましょう。

このアニメーションはFKで作成してあります。
これをIKアニメーションに変換してみましょう。

FKアニメーション

まずは、上記1~3. の内容についてです。
以下画像のようにLocatorを作成して、それぞれにConstraintをおこないます。
Locatorは手首に1つ、肘には2つ作成します。
肘のLocator「PoleVector」は、Locator「elbow」の子になるように親子付けして、TZ30ほど動かしています。
これは、肘の位置にPoleVectorコントローラーを配置してしまうと、アニメーションがうまくいかない可能性があるためです。

Locatorはそれぞれのコントローラーと同じ位置にあります(Match Transform)
また、小さいですが画像中心あたりにPoleVectorのLocatorがあります

Constraintを終えて、Locatorがリグに追従していることを確認したら、次に4.であるアニメーションBakeをおこないます。
Bakeが終わったら、LocatorについているConstraintを削除してください。


※私は最初、このBakeをAnimbot内のBake機能を用いておこないました。
 普段であればちゃんと機能するのですが、この時はうまく機能しなかった
 ため、Maya標準のBake機能を使用しました。


最後に5~7.についてです。
FKであったのをIKに切り替えます。
IKに切り替えたら手首の位置などが変わってしまうと思うので、これをLocatorの位置にMatch Transformします。

リグによるのですが、この時私の場合では2つ問題が起こりました。
一つ目はMatch Transformしても、手首の回転が合わない、というものです。

LocatorにIKのWristコントローラーをMatch Transformした状態
手首が逆方向に回転してしまっている

これは元々のFKのコントローラーの軸とIKのコントローラーの軸が180°ほど異なっていることが原因でした。
そのため、Match Transformをした後に手首を手動で180°回転し、そのあとLocatorにParentConstraintをしました。

FKとIKのコントローラー軸
FKが-Z Frontなのに対してIKがZ Frontになっている

ここが(ほぼ)である理由です。
そもそもちょうど180°違うのかどうかもわからないし、手動での回転となるため、(ほぼ)というようになっています。

手首のRXを180°回転させた状態

2つ目は、PoleVectorコントローラーがParentConstraintでコンストレイントできなかったというものです。
これは、PoleVectorコントローラーのRotateにLockがかかっていたことが原因でした。
そのためParentConstraintではなく、PointConstraintをおこなうことで解決しました。

このようにそれぞれのLocatorにコントローラーを合わせてConstraintした後に、コントローラーをアニメーションBakeします。

これで、アニメーション(ほぼ)IKFK変換は終了となります。

IKアニメーション

さいごに

今回はアニメーションのIKFK変換についてメモをしました。

実は、今回の内容は私自身が全て調べたものではなく、とある知り合い(https://twitter.com/NekoNeco_Cat)に教えていただいた内容を、実際にやってみて、私なりに解釈したものとなります。
この場を借りて、お礼を申し上げたいと思います。
助かりました。ありがとうございました。

また、皆さんもここまで読んでくださり、ありがとうございました。

では、また逢う日まで。

この記事が気に入ったらサポートをしてみませんか?