Final IKのUnityでの設定を解説【体幹・手・脚で必要項目を整理】

Final IKのUnityでの設定は体幹・手・脚・移動での項目に分かれているって本当?
必要項目を整理すると大事なのは通常は数ヶ所って本当?
こんな疑問に答えます。

僕はVRoidで漫画が作れるiPhoneアプリComicamを開発して公開中です。
そんな僕が解説していきます。

Final IKのUnityでの設定を解説【体幹・手・脚・移動で必要項目を整理】

Final IKの基本の使い方はこちらの記事で解説してます。
» Final IKを解説【3カ所の入力で人物を動かせます+微調整も大事】

VTuberの作り方の全体の流れはこちらで解説しています。
» VTuberの作り方【準備から最後のアップまで10記事以上で解説】

Final IKの中でもVTuberに使用するVRIKの設定項目を整理していきます。

コンポーネント変数の一覧=ボーンマッピングの根幹を設定します

名称 意味 注意事項 おすすめの設定
Fix Transforms 変換の修正 Trueのままにしておけば、プラグインが計算するすべての変換を各更新の初期状態に修正
アニメーション化されていないボーンとアニメーターのカリングの潜在的な問題を小コストで防止
References ボーンマッピングの
リファレンス
(15項目)
各ボーンマッピングが自動的に配置される
もしヒューマノイドキャラクターでない場合は手動で自動検出を選択
胸・首・肩・つま先のボーンはオプションで脚のないキャラクターでもOK
脚を使用したくない場合はすべての脚参照の欄を空のままにする

ここは基本的に自動で入ります。

ソルバー変数の一覧=全体の数値の計算方法の設定

名称 意味 注意事項 おすすめの設定
IK Position Weight- マスターウェイト 全体のウェイト
LOD 細かさの度合い
(Level of Detail)
レベル 0
完全なディティールの解決。
レベル 1
肩の解決、植物の足のストレッチの無効化、脊椎の解決の質の低下。
パフォーマンスが約30%向上
レベル 2
カリングする(必要がないポリゴンを描画しない)
移動が有効な場合はルート位置と回転は更新する
Plant Feet つま先の埋め込み trueの場合に頭のターゲットが届かない場合でもつま先を植えたままにする
そのためモデルが高すぎてモデルに届かない場合カメラが頭から出る可能性がある
有効にすると脚を複数回計算する必要があるためプラグインのコストが増加

全体の数値の計算方法の設定です。
VRIKはFull Body Biped IKと比較すると約2〜3倍高速とのことですが、LODを調整すればさらに高速にできます。

脊椎の変数の一覧=体幹の動き方を調整します

名称
(VRIK.solver.
spine.〜)
意味 注意事項 おすすめの設定
Head Target ヘッドターゲットの指定 カメラのトランスフォーム自体は当てはめない
ただカメラをHeadを親子関係のあるGameObjectにしておけば、頭のボーンの方向に合わせて位置/回転を調整可能
一番の推奨はカメラはアバターの目の間に移動し、アバターの頭の骨を複製し、カメラにペアレント化して割り当てること。
自分が動かしたいキャラクター(VRMファイル)のHead(頭)を設定
Pelvis Target 骨盤ターゲット
(オプション)
着席したリグやバックパックやベルトに追加のトラッカーがある場合に便利
アバターの骨盤の骨を複製して骨盤のトラッカーにペアレント化してその次にそのスロットに複製を割り当てるのを推奨
Position Weight 頭部ターゲットの位置のウェイト headTargetをnullにした場合はこの値を0に設定するまでヘッドはheadTargetの最後の位置にプルされることに注意
Rotation Weight 頭部ターゲットの回転のウェイト headTargetをnullにした場合はこの値を0に設定するまで頭部はheadTargetの最後の回転に回転し続けることに注意
Pelvis Position
Weight
骨盤ターゲットの位置のウェイト pelvisTargetをnullにした場合はこの値を0に設定するまで骨盤はpelvisTargetの最後の位置に引き寄せられることに注意
Pelvis Rotation
Weight
骨盤ターゲットの回転ウェイト pelvisTargetをnullにした場合はこの値を0に設定するまで骨盤はpelvisTargetの最後の回転まで回転し続けることに注意
Chest Goal 胸が向く方向 下のChest Goal Weightがが0より大きい場合に有効
Chest Goal Weight 胸を回すウェイト
Min Head Height キャラクターの頭の最小の高さ
(ルートから)
Body Pos Stiffness 体が頭の位置に追従する量
Body Rot Stiffness 体が頭の回転に追従する量
Neck Stiffness 胸が頭の回転に追従する量
Rotate Chest
By Hands
胸が手の位置に追従する量
Chest Clamp Weight 胸の回転の留め具合 値0.5=頭に対して胸を90度回転
値0=頭に対して胸を180度を許可
値1=頭に対して胸をロック
Head Clamp Weight 頭の回転の留め具合 値0.5=headTargetを基準に頭を90度回転
値が0=headTargetを基準に頭を180度回転
値が1=headTargetを基準に頭をロック
Move Body Back
When Crouching
しゃがんでいる時に水平移動する量 プレイヤーがしゃがんでいる時に
その値だけ-character.forward軸に沿ってボディを水平に移動
Maintain Pelvis Position 骨盤の位置の維持量 骨盤がアニメーション化時に位置をどのくらい維持するか
Max Root Angle 頭部の回転が体に作用するまでの最大許容値 頭部のターゲットがこの角度を超えて回転した場合にキャラクターのルートを自動的に回転
Root Heading Offset デフォルトで斜め向きにする調整 ルート見出しの角度オフセット
この値を調整して垂直軸を中心にルートをHMDに対して相対的に回転させる
アバターを斜めの姿勢で立てるバトルゲームなどに役立つ

体幹の動き方の調整値が多いです。

腕の変数の一覧=曲がり方や長さを設定します

名称
(VRIK.solver.
leftArm〜)
意味 注意事項 おすすめの設定
Target 手のターゲット ハンドコントローラーそのものではなくGameObjectを親にして手のボーンの方向に合わせて位置/回転を調整できるようにすること
推奨設定はハンドコントローラーがアバターに保持されているようにアバターの手に移動し、アバターのハンドボーンを複製してハンドコントローラーにペアレント化すること。
その次にこのスロットに複製を割り当てる。
自分のVRMファイルのHandを設定
Bend Goal 肘が曲がる方向  「Bend Goal Weight」> 0の場合、肘はこのTransformに向かって曲げられる
Position Weight 手のターゲットの位置の重み ターゲットをnullにした場合はこの値を0に設定するまで
手はターゲットの最後の位置に引かれたままになることに注意
Rotation Weight 手のターゲットの回転重量 ターゲットをnullにした場合はこの値を0に設定するまで
手はターゲットの最後の回転まで回転
Shoulder Rotation Mode 肩の骨の回転のためのさまざまなテクニック ・Yaw Pitch
・記入予定
・記入予定
Shoulder Rotation Weight 肩の回転のウェイト
Shoulder Twist Weight 腕を持ち上げた時に肩を後ろにひねるウェイト
Bend Goal Weight 曲げのゴールターゲット 0より大きい場合はこの曲げのゴールターゲットに向かって肘を曲げる
Swivel Offset 肘の曲げ方向の角度オフセット
Wrist To Palm Axis 手のボーンのローカル軸
(手首→手のひら方向)
手首から手のひらの方向を指す手のボーンのローカル軸
手の骨の向きを定義するために使用
異なる骨の向きを持つ別のアバターからVRIKコンポーネントをコピーした場合は
VRIKヘッダーを右クリックしてコンテキストメニューから「Guess Hand Orientations」を選択
Palm To Thumb Axis 手のボーンのローカル軸
(手のひら→親指方向)
手のひらから親指の方を指す手のボーンのローカル軸
手の骨の向きを定義するために使用
異なる骨の向きを持つ別のアバターからVRIKコンポーネントをコピーした場合は
VRIKヘッダーを右クリックし、コンテキストメニューから「Guess Hand Orientations」を選択
Arm Length Mlp 腕の長さ これを使用して腕を短くしたり長くしたりする
手と前腕のlocalPositionの変位によって機能する
Stretch Curve 腕の伸び 腕の長さを基準にしたターゲット距離による腕の伸び
・時間1=ターゲットまでの距離が腕の長さと等しいポイントでのストレッチ量を表す
・時間2=ターゲットまでの距離が腕の長さの2倍になるポイントでのストレッチ量を表す
値はストレッチの量を表す
線形曲線は45度上昇することで実現される
最後のキーを同じ量だけ上下に移動してストレッチの範囲を広げる
曲線のスムージングは​​肘のスナップを減らすのに役立つ
(ターゲット距離が腕の長さに達する前に腕を少し伸ばし始る)
この曲線に最適な値を得るには、「VRIK(Basic)」デモシーンに移動し、パイロットキャラクターからストレッチカーブをコピー

左手も右手も同じです。

脚の変数の一覧=曲がり方や長さを設定します

名称
(VRIK.solver.
leftLeg〜)
意味 注意事項 おすすめの設定
Ttarget 足/つま先のターゲット フットトラッカーそのものではなくGameObjectを親にして足/つま先のボーンの方向に合わせて位置/回転を調整できるようにすること
つま先のボーンが割り当てられている場合はプラグインはそのままつま先が使用されるが、
つま先のボーンが割り当てられていない場合は、代わりに足のボーンが使用される
自分のVRMファイルのLegを設定
Bend Goal 膝が曲がる方向 「Bend Goal Weight」> 0の場合、膝はこのTransformに向かって曲げられる
Position Weight つま先/足のターゲットの位置の重み ターゲットをnullにした場合はこの値を0に設定するまで
つま先/足はターゲットの最後の位置に引かれたままになることに注意
Rotation Weight つま先/足のターゲットの回転ウェイト ターゲットをnullにした場合はこの値を0に設定するまで
つま先/足はターゲットの最後の回転まで回転
Bend Goal Weight 曲げのゴールターゲット 0より大きい場合はこの曲げのゴールターゲットに向かって、膝を曲げる
Swivel Offset 膝の曲げ方向の角度オフセット
Bend To Target Weight ターゲットウェイトに向けての曲がり具合 0→ベンドプレーンは骨盤の回転にロックされ、足を回転しても膝の方向には影響しない。
1→脚の目標回転に膝が足の前方軸に向かって曲がるようになる
間の値は、2つの間で破棄されます。
Leg Length Mlp 脚の長さ これを使用して脚を短くしたり長くしたりする
足とふくらはぎのlocalPositionの変位によって機能する
Stretch Curve 脚の伸び 腕の長さを基準にしたターゲット距離による腕の伸び
・時間1=ターゲットまでの距離が腕の長さと等しいポイントでのストレッチ量を表す
・時間2=ターゲットまでの距離が腕の長さの2倍になるポイントでのストレッチ量を表す
値はストレッチの量を表す
線形曲線は45度上昇することで実現される
最後のキーを同じ量だけ上下に移動してストレッチの範囲を広げる
曲線のスムージングは​​肘のスナップを減らすのに役立つ
(ターゲット距離が腕の長さに達する前に腕を少し伸ばし始る)
この曲線に最適な値を得るには、「VRIK(Basic)」デモシーンに移動し、パイロットキャラクターからストレッチカーブをコピー

左足も右足も同じです。
腕と重なっている部分も多いです。

移動の変数の一覧=歩く時の足の動き方を設定します

名称
(VRIK.solver.
locomotion〜)
意味 注意事項 おすすめの設定
Weight 移動のウェイト 手続き型移動の内外でのブレンドに使用
Foot Distance 足の間の距離 脚の間のこの距離を維持 0.2
Step Threshold ステップを作成するしきい値 ステップのターゲット位置が現在の足跡から少なくとも
・この距離にあるか
・足が現在の足跡に到達していない
・足跡の角度が下の項目の「角度のしきい値」を超えている
この場合にのみステップを作成
0.25
Angle Threshold 足跡の角度のしきい値 ステップターゲット位置が現在の足跡から少なくとも
・上の項目の「ステップしきい値」以上離れている
・足が現在の足跡に到達していない
・足跡の角度がこの値を超えている
この場合にのみステップを作成
Com Angle Mlp 重心の角度 圧力ベクトルの中心を乗算
値を大きくするとバランスが崩れた場合にキャラクターの歩みが早くなる
Max Velocity 頭部/手のターゲット速度の最大の大きさ 予測で使用される頭部/手のターゲット速度の最大の大きさ
Velocity Factor 頭/手のターゲット速度予測の量 頭/手のターゲット速度予測の量
Max Leg Stretch 足の最大伸ばし量 別の位置に足を踏み入れる前に足をどれだけ伸ばすことができるか
1…完全に伸びている
2…(記入予定)
Root Speed 足の中間点へのスピード 足跡の水平方向の中間点に向かってキャラクターのルートを急ぐ速度
Step Speed 足の次の点へのスピード 足を次の位置に移動する速度
Step Height ステップ時の足の高さ 正規化されたステップの進行(0-1)による足の高さ
Heel Height ステップ時のかかとの高さ 正規化されたステップ進行(0-1)によるかかとの高さオフセット
Relax Leg Twist Min Angle 足がねじれ回転する最小の角度 理想的な回転がこの角度を超えている場合、足が回転していないときに足が回転し、足のねじれ回転を緩和
Relax Leg Twist Speed 足がねじれ回転する最小のスピード 脚のねじれ回転を緩和するために足が踏み込んでいないときに足を回転させる速度
Step Interpolation ステップの補間モード ・In Out Sine
・記入予定
・記入予定
Offset 重心のオフセットの位置座標 近似された重心のオフセットの位置座標

歩く時の微調整が可能です。

Final IKのUnityの作業でさらに知っておきたいこと【実際に組み込んでいこう】

Final IKはUnityでマウスカーソルを合わせると説明がポップアップしますが英語です

説明が出るのはありがたいのですが英語だとスピーディーな理解がしんどいので整理しました。

VRIKセットアップの例サンプルファイルが存在

VRIKのセットアップの例のサンプルファイルが「Plugins / RootMotion / FinalIK / _Integration」にあります。
デモを実行するにはOculus やSteamVRのパッケージを入れてあるのが前提です。
» 参考:SteamVR Pluginをダウンロードする方法【その後の作業の概要も紹介】

VRIKには回転の制限が付いてます→不自然には曲がりません

「Rotation Limits」を適用することで不自然に曲がらないようにすることができます。

VRIKでは回転制御を無効にしてからOn Post Updateを使用する必要があります

VRIKは独自の制約があるため手順が必要です。

・Startで回転制限を無効にして更新を制御
・VRIKの設定
・VRIK.solver.OnPostUpdateデリゲートを使用して更新

これでVRIKの上にRotationLimitsを適用して手のボーンが合理的な制限を超えて不自然に曲がらないようにするなどができます。

体と足に追加のトラッカーを付けれます(キャリブレーション)

キャリブレーション(体と足にトラッカー追加)のデモが存在します。
デモのファイル場所を確認中です。

アバターのサイズのみを調整するならターゲットとボーンを合わせればOKです

アバターのサイズのみを調整するなら、プレーヤーをまっすぐに立てて、頭のターゲットの高さをアバターの頭の骨の高さと比較することで簡単に調整できます。

Final IKをUnityで実際に利用していこう

Final IKのUnityでの作業を理解したら実際にVRoidなどの3Dモデルに組み込んでVTuberのように動かしていきましょう。

Final IKの基本の使い方はこちらの記事で解説しています。
» Final IKを解説【3カ所の入力で人物を動かせます+微調整も大事】

VTuberの作り方の全体の流れはこちらで解説しています。
» VTuberの作り方【準備から最後のアップまで10記事以上で解説】

Final IKの購入はこちら

» 参考:Final IK(Unityアセットストア)

参考:
http://www.root-motion.com/finalikdox/html/page16.html
http://www.root-motion.com/finalikdox/html/class_root_motion_1_1_final_i_k_1_1_i_k_solver_v_r.html
http://www.root-motion.com/finalikdox/html/class_root_motion_1_1_final_i_k_1_1_v_r_i_k.html

というわけで今回は以上です。
個性的な3Dモデルを使い時なんかは特に設定値の意味の理解が大事になってくると思います。

関連記事UnityのXR Mecanim IK Plusを解説【色んなポーズが簡単に可能です】

関連記事VRoidの完全マップ【入門・基礎・中級・上級を徹底解説】

-Unity