【Csharp】XNAでIK実装、その3

前回はアーム全体にIK計算を適用してみたんだけれども、ひとつ課題があった。

IKターゲットがIKの影響を受けるボーンの全長より遠い距離にある場合、おおむねうまく行っているように見えた。

しかし、IKの影響を受けるボーンの全長より近い距離にある場合、アームの根元の動きが堅いというか、かゆいところに手が届かないような動作になってしまっていた。

今回は、この課題に対して調整を加えてみた。まず、動画がこちら。

いつものとおり、左が自力でIK計算した結果で、右がBlenderによるもの。

まだまだ、Blenderの計算結果には及ばないとはいえ、アームの根元の柔軟さはだいぶ改善されたように思う。

どんなことをやったかというと、冒頭の画像にもあるように、IK計算に入る前にIKターゲットとの距離を測る。

IKターゲットまでの距離が、IKの影響を受けるボーンの全長より近い位置にある場合、根元のボーンに対して、本来IK計算で曲げるべき方向とは逆の方向に対してあらかじめ曲げておく、というものだ。

ちなみに他のデータも併記しておこう。

まず、IK計算は無条件で4回繰り返している。

1回のIK計算で曲げられる角度の限度は15度(π/12)まで。

IKの距離が近い場合にあらかじめ曲げる角度は、ボーンの全長とIKまでの距離の差分に応じて最大約72度(π/2.5)までとしてある。

計算ロジックを最適化していないため、なんども重複した計算をしているので、かなり負荷が高いものになっている。

それに、やっぱりBlender側で算出されたIKの動作にはまだまだ及んでいないけれども、とりあえず自力でのIK計算はこれで終了とする。

どこかでもっと画期的なIK計算アルゴリズムに出会えたら、改めて検証してみたいと思う。

4年前

コメントを残す

メールアドレスが公開されることはありません。