結構頭を悩ませる人が多い割に情報が少ない気がしたので、ちょいとまとめてみました。
まあ私も具体的な実装を聞いたわけではありませんが、概念はだいたいこんなものかと。
この記事はIKを設定したことがあるけど実際よくわからん!って人向けですので、初めてという人はまずあにまさ式ミクさんをお手本にしてみましょう。
IKにはいろいろな罠があるので、個別に解説していきます。
罠その1:Loopとか単位角って何?
IKというのは、ターゲットボーンの位置がIKボーンに可能な限り近づくよう、各ボーンの回転角度を自動で計算する機能です。
「Loop」とか「単位角(pmdなら単位制限角)」というのは、その理想の位置に近づけるための計算をするためのパラメータなのです。
Loopの調整
Loopは、1フレームあたりにIKの計算を行う回数。
単位角が、その計算1回ごとにボーンを回転させる最大量で、計算ごとに減衰して微調整になっていきます。
つまり、IKの1フレーム内の処理は
1.単位角の範囲でターゲットボーンがIKボーンに極力近づくよう、影響下ボーンを回転させてみる
2.上記をLoop回数分繰り返す
という感じになっています。(想像)
ちなみに、IK影響下ボーンに角度制限がなく単位角が充分に大きい場合は、Loop回数を増やしてもあまり意味がありません。
角度制限が多いほどLoop回数が必要になる、と覚えると良いです。
Loop回数を増やすほど、最終的な計算結果は理想に近くなっていきます。
ただ、その名の通り、1フレームあたりの処理回数が増えます。
まあ、計算でいうならIKより物理のほうがよっぽど重いですから、処理回数はあまり気にしなくても良いでしょう。
単位角の調整
単位角については、小さくしすぎると1フレーム内でIKの計算が間に合わず、再生してるわけでもないのにIKがうにょーんと動いたり、IKボーンを大きく動かしてものろのろと追随したりします。
逆に大きくすると、1回あたりの計算結果がおおざっぱになってLoop回数を増やす必要がでてきたり、IKがぷるぷるしたりします。
ですので、IKのLoop/単位角の設定は、最初に大きな値を設定してそこからLoop回数を減らし、次に単位角を減らしていくと良い感じになります。
PMDEであにまさ式ミクさんを開いて、いろいろいじってみると理屈がわかりやすいでしょう。
罠その2:IKに子ボーンをつけてもついて行ってくれない!
MMDのIKには、IKの計算結果はIK系列の子ボーンには適用されないという特徴があります。
ですので、例えばひざにアクセサリ用ボーンを追加しても、足IKを動かすとアクセ用ボーンが置いてけぼりになってしまいます。
これを解決するには、回転連動ボーンを使います。
「右ひざ」「右ひざ+」とか、そんな構造を持ったモデルを見たことはないでしょうか?
これがIK連動ボーンです。
IKの系列ボーンの複製を作り、そのボーンを回転連動ボーンにします。
そして、連動元を複製元のボーンにして同じ動きをさせ、ここにアクセボーンなり何なりをくっつけてやれば、見事IKの動きについてきてくれるようになります。
罠その3:PMDEとMMDでIKの動作が違う!
IK系列ボーンに角度制限を入れてないでしょうか?
この角度制限は最小~最大値で設定するのですが、これは左から「最小」「最大」で、「最大」「最小」という入力をしてはいけません。
×「0」「-180」
○「-180」「0」
ここの実装がMMDとPMDEで異なるため、こういう値にすると両者で違う動きをします。
とりあえず思いつくのはこのへんまで。
そのうちネタを思いついたら追記しますw
余談:
あにまさ式ミクの足IKの単位角って「114.5916」とかやたら細かいけど、これってラジアン角でいうところの「2」ですよね。
コメント
適当なpmxモデルをPMDEに読み込んで、IKボーンを選択してみて下さい。
Linkの項の「角度制限」ボタンがONになっていて、ひざボーンのX軸に値が設定されているはずです。
pmdの場合は角度制限の設定がなく、IK系列化の「ひざ」ボーンが自動で角度制限の状態になります。
ありがとうございます!linkにあるボーンをクリックすると出てくるのですね。そのまま見ていたのでわからなかったです・・・IKボーンでないと角度制限は付けられないのでしょうか?