【AviUtl】ボーン制御にIKを導入してみよう
閉じる
閉じる

【AviUtl】ボーン制御にIKを導入してみよう

2019-03-09 09:35
    今回と次回次々回動画で、素体に使うスクリプトの紹介・エラー集を書いてます。



    前にボーン制御を紹介する動画を作りましたが、その後「簡易IK」というスクリプトが出ました。

    @簡易IK

    IKというのはなんかこう、直線移動に強い感じの関節の制御の仕方だそうで…
    詳しくはこちらで(丸投げ)
    重要!FKとIKの違い

    導入すると親の座標を動かすことで関節を曲げることができます。
    通常のボーン制御は回転で関節を曲げさせるので、そこが違う点です。
    上のgifでは親()を適当に左右に動かして関節を曲げている。この動きを通常のボーン制御でやろうとするとクッソ面倒。
    歩くモーションとか、設置感が必要な動作で使うと非常に便利ですよ。
    という周知記事ですよ。

    ボーン制御のおさらい

    知ってる人は飛ばしてどうぞ

    長々とした動画もありますが(他人事)、まあ

    ・ボーン制御(親)を動かすと親番が同じボーン制御(子)も動く
    ・親は子より上のレイヤに置く
    ・フィルタ順は上から親→子(肘関節とかの末端に近い親)→子(全身制御とかの広範親)

    この辺りを把握していればちゃんと動きます。
    上の動画では失敗例とかも取り上げてるので、組んでてなんか変な動きしたら見てみるといいかもしれない。

    簡易IKの導入





    本題です。
    まずはひざより下/上の2つのパーツで足を作ることを想定して作ります。
    先に手順をざっくり書くと、


    1.動かしたいパーツを置き、それとは別に
      親A・親B・関節・関節先の4つのオブジェクトを用意する。

    2.上記の各オブジェクトがどこにあるか把握するためのガイドを用意する。

    3.関節の末端側を中心に、拡張描画の中心点X,Yを使って画像の中心点を合わせる

    4.「関節」フィルタの「親A(B)との距離」の数値や、各パーツの「回転」の数値を調整して、根本側の関節の位置を調整する。

    5.動作確認して完成。


    こんな感じです。文字にするとちょっと面倒そうですが、数分あれば十分できますできます。

    それじゃそれぞれ順を追って見てみましょう。


    1.動かしたいパーツを置き、それとは別に
      親A・親B・関節・関節先の4つのオブジェクトを用意する。
    ※この画像では2.で言うガイド(4色の点のこと)がありますが、実際操作するときは親非表示にチェック入れるなり透明度100にするなりで、親は見えないようにします。

    親A=黒点=股関節らへん 
     付けるフィルタはボーン制御(親)
     X,Y座標で足の付け根がある位置、拡大率で足全体の大きさを調整可能

    親B=赤点=爪先の位置の指定をする親
     付けるフィルタはボーン制御(親)
     IK関節の操作は主にこの親の座標の位置で決める

    関節=青点=ひざより上パーツの、ひざ部分の親
     付けるフィルタは上から

     関節@簡易IK
     ボーン制御(親)【ひざ上パーツ用】
     
    「A(B)との距離」の数値でパーツの位置調整をする(後述)
     関節の曲がる方向を決定するフィルタでもある

    関節先=紫点=ひざより下パーツの、つま先部分の親
     付けるフィルタ上から
     
     関節@簡易IK
     ボーン制御(親)【ひざ下パーツ用】

     「関節方向を向く」のチェックボックスは、パーツを3パーツで分ける場合
     (ふとももーすねー足首)の足首とかではチェックを外す
     チェックが入ってると常にひざに対して足が垂直になるが、チェックを外すと最初の状態から向きが変わらない…つまり地面の方向に足が向くようになる


    そしてひざ上パーツに関節親と同じ親番のボーン制御(子)
    ひざ下パーツに関節先親と同じ親番のボーン制御(子)を付けておきます。

    関節・関節先フィルタを付けたオブジェクトは、親A・親Bの位置関係から決まります。
    そのため、関節・関節先フィルタが付いたオブジェクトの座標は下手に動かしてはいけません。原点(0,0,0)から動かさないようにしましょう。
    もし動作確認時に動きが変なことになってたら、関節関節先の座標が変な位置にある、または余計なボーン(子)フィルタの影響を受けてしまってることがあるかもしれないので確認してみましょう。
    ちなみに「原点から動かさない」というのは2体間に配置スクリプトにも共通して言えます(別記事で紹介予定)。

    片足だけで6個オブジェクト使うのか…と思う人もいそう。
    ひざ上パーツと関節、ひざ下パーツと関節先の統合は実は可能です。
    ただ、それをすると面倒なポイントが少し増えるので…その話は別の記事でするかもしれない。


    2.上記の各オブジェクトがどこにあるか把握するためのガイドを用意する。


    1.のパーツを全部置き、未調整のまま親Bを動かしてるところ。
    どの点を中心にして回転しているのか中々分かり辛い。
    回転軸が分からないまま安易に画像の位置合わせをすると…

     案の定意味不明な回転の仕方をしてしまいます。

    回転軸が見えないまま位置調整をするなんて苦行をしても仕方がないので、回転軸を見えるようにしてしまいましょう。
    という訳で、原点(0,0,0)に適当な図形を4つ置き、それぞれ親A、親B、関節、関節先に対応したボーン制御(子)フィルタを取り付けます。
    そうして操作すると、このように黒点が足の根本、青点がひざ、紫点が爪先らへんになるんだな、ということが見えるようになりました。
    ※赤点は爪先の目標点みたいな点
    これが分かれば後は、これらの点にパーツの位置を合わせるだけです。

    3.関節の末端側を中心に、拡張描画の中心点X,Yを使って画像の中心点を合わせる
    4.「関節」フィルタの「親A(B)との距離」の数値や、各パーツの「回転」の数値を調整して、根本側の関節の位置を調整する。


    まずパーツの位置合わせなんですが、ひざ上パーツならひざ部分から、ひざ下パーツなら爪先から、つまり関節の末端側から合わせた方がいいです。
     関節間同士の距離を調整する「関節」フィルタの「Aとの距離」を先に触って見てみましょう。

     これは、ひざ上パーツの親になる「関節(青点)」が黒点の親Aからどれだけ離れてるかっていう数値なので、この数値を動かすと青点並びにひざ上パーツ側が動いて位置調整がなされます。
     従って仮に黒点側にひざ上パーツを合わせてからAとの距離の調整をする(ひざ部分が青点からずれてる状態で調整する)と…ガッツリ二度手間になります。

     従来のボーン制御はむしろ根本側を調整するものなので、ボーン制御に慣れた人がガイド無しで取り掛かると引っ掛かりそうなポイント。僕はめっちゃ引っ掛かりました(半ギレ)

     話もどして位置合わせの仕方なんですが、これは基本的にパーツ側(ひざ上/下の画像)の中心点X,Y座標を調整して合わせます。親側の関節・関節先の座標や回転Zは触ってはいけません(動作が破綻します)。


     パーツ側は座標を原点(0,0,0)に置くと中心点が自動的に膝(青点)に来るので、中心点X,Yの数値を調整して中心と膝が重なるように位置調整すればOKです。
     あとは距離や向きを調整して黒点側とも位置を合わせればひざ上パーツの調整は完了です。
    ※中心点で調整したのはこの「向きの調整」がやりやすくなるから、というのもありますが、他のケースで中心点を使わないと微妙な破綻が発生することがあるため(別記事で記述予定)

     一方で「Bとの距離」の数値をいじると、青点は赤点・紫点・ひざ下パーツを残して離れていきます。従ってひざ下パーツは爪先を関節先(紫点)に合わせてから、青点に寄せていくと早いですね。

    5.動作確認して完成。
    これで簡易IK関節の完成です。
    モーション作るときはガイドを消すのを忘れずに。


    おまけ
     簡易IKも上位のボーン制御(親)を設置することができます。
     上半身+両足全体、つまりは全身を動かす親を付けることももちろん可能なのですが、
    簡易IKでぜひ付けてみてほしいのが、上半身+親Aを制御する、つまり親Bのみ省いたボーン親(ひとまず全身親と呼ぶこととします)です。

     足元である親B以外を動かす全身親は、上下に動かすだけで屈伸したり両足ジャンプさせたり、前後に動かせば前傾させたりといったモーションが簡単になります。

    ↑全身親を適当に振り回してるところ。足がちゃんと接地しに行っている

     例えば実際にモーションを作ったときに「全体的に前のめりになってるな…」と思ったら、全身親の座標を後ろに下げただけで結構違って見えるようになったりするので、あるのとないのとでは大分勝手が違うと思いますよ。

    ちなみに簡易IKに上位のボーン親を取り付ける場合、
    親Aとして付けたボーン制御(親)フィルタよりも、
    全身親の影響を受けるために付けたボーン制御(子)フィルタの方がに来るように配置します。


    従来の奴だと確かマズい配置なんですけど、こうじゃないと動かないしこれでちゃんと動くし…大丈夫でしょう!
    こうしておけば後は親Aから関節・関節先まで影響が行くようなので、親A用オブジェクト以外には全身親ボーン(子)は取り付けません。
    全身親使うとフィルタが大分増えるので動作が重くなるかもしれません。でも動くならお勧め。


    さいごに
    宣伝なんですけども、あのー、 えー、ここまで書いた簡易IKを導入した素体などをいくつか、上げておりますので、もしよければw、そちらも是非使っていただければなんて思います(半笑い)

    レイヤ多いし簡易IK以外にも2体間に表示とかも導入してるしでクッソ重いし、ディスプレイの解像度次第ではめっちゃ作業しにくいけど、差し替え用で使えない…なくはないんじゃない?
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。