はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】Final IKの「Grounder」を用いて足が地面に接地するようにする

はじめに

今回はFinal IKというアセットのFBBIK Grounderを用いて、キャラクターの足の位置を地面に合わせてみたいと思います。

www.youtube.com

できるもの

f:id:hanaaaaaachiru:20220215153651g:plainf:id:hanaaaaaachiru:20220215153707g:plain
←Animationのみ,Final IK適応→

概要

今回紹介するGrounder足の位置を地面に接地するように垂直方向に補正を加える機能になります。

Grounder is an automatic vertical foot placement and alignment correction system.

http://www.root-motion.com/finalikdox/html/page9.html

具体的な手法は足の位置からRaycastを飛ばし、ヒットした位置まで足を移動させてあげるようです。

f:id:hanaaaaaachiru:20220306200950p:plain
Grounderの仕組み

http://www.root-motion.com/finalikdox/html/page9.html


利用アセット




やり方

Full Body Biped IKコンポーネントをアタッチ

Grounderを利用するためにはFull Body Biped IKコンポーネントをアタッチする必要があります。

Final IK includes an extremely flexible and powerful high speed lightweight FBIK solver for biped characters.

FullBodyBipedIK maps any biped character to a low resolution multi-effector IK rig, solves it, and maps the result back to the character. This is done each frame in LateUpdate, after Mecanim/Legacy is done animating, so it is completely independent from the animating system.

Full Body Biped IK

端的にまとめるとFullBodyBipedIK2速歩行キャラクター用の高速かつ軽量なフルボディIK solverで、アニメーションした後のLateUpdateにて補正を行うよといった感じです。

一見難しそうに見えますが、私たちがやるのはHumanoid型のキャラクターにFullBodyBipedIKコンポーネントをアタッチするだけです。

f:id:hanaaaaaachiru:20220306211301p:plain
FullBodyBipedIKコンポーネント

また自動で対象となるボーンを指すReferencesを入力してくれるので、細かい設定をする必要がないなら本当にアタッチするだけでOKです。

パラメーターの詳細
パラメーター 意味
fixTransforms Trueに場合、Updateでソルバーが利用する全てのTransformsを初期状態に固定する。アニメーションされていないボーンやアニメーションカリングで起こりうる潜在的な問題を解決できる。比較的コストは大きくないそう。
references ソルバーを構築するために必要なキャラクターのボーンへの参照。
rootNode ボディの中心となるボーンへの参照。
weight IKの効果を滑らかにブレンディングするための重み。
iterations ソルバーの反復回数。0の場合は動作させない。

Body以下に関しては省略させてください。

Grounder FBBIKコンポーネントをアタッチ

冒頭で説明したように、Grounder FBBIKコンポーネントをアタッチします。

f:id:hanaaaaaachiru:20220306214016p:plain
Grounder FBBIKコンポーネント

こちらはSolver -> LayersがデフォルトでNothingになっているので変更してあげる必要があります。

LayersどのLayerに属するゲームオブジェクトと接地判定を行うかを設定する項目で、適切に設定してあげます。

お試しで動作確認をするならEverythingでも良いと思いますが、範囲が広ければ広いほどコストがかかってしまうことを忘れないでください。

パラメーターの意味
パラメーター 意味
layers 歩く地面のレイヤー。キャラクター自身のレイヤーを含めないよう注意。
maxStep 足の最大オフセット。
heightOffset キャラクターの高さのオフセット。
footSpeed 足の補間速度。値を上げると、滑らかさを犠牲に正確さがあがります。 (range: 0 - inf).
footRadius 足の大きさ。 (range: 0.0001 - inf).
prediction 予測する範囲の広さ。値を大きくするとより遠くの障害物まで調べますが、滑らかさが悪くなります。 (range: 0 - inf).
footRotationWeight 足の回転をオフセットするための重み。(range:0 - 1)
footRotationSpeed 足のオフセットを補間する速度。 (range: 0 - inf).
maxFootRotationAngle 足のオフセットの最大角度。(range: 0 - 90).
rotateSolver Trueにすると、キャラクターのローカル座標の上方向ベクトルを足の位置補間で利用する垂直ベクトルとして利用するようになります。キャラクターが壁を歩いたり、天井を歩いたりできるようになりますが、パフォーマンスに影響が出ます。必要ない場合はオフにすると良いでしょう。
pelvisSpeed Pelvis(骨盤)の移動速度。 大きくすると、キャラクターの体が上下に素早く動くようになります。 (range: 0 - inf).
pelvisDamper キャラクターのルートの垂直方向の動きを抑えます。(range: 0 - 1).
lowerPelvisWeight Pelvis(骨盤)を一番下にある足に移動させるときの重み。 階段を降りるときに有効なよう。
liftPelvisWeight Pelcvis(骨盤)を一番上にある足に移動させるときの重み。キャラクターがしゃがんでいるときや高い障害物を登る時に有効だそう。
rootSphereCastRadius ルートのキャストする球の範囲。
quality 品質。 Fastest < Simple < Best