逆ダイナミクス Ik 学習

参考記事:(私のオリジナルではありません)

英文原文:Inverse Kinematics Techniques in Computer Graphics: A Survey (andreasaristidou.com)

Zhihu 翻訳記事:

【ゲーム開発】インバースキネマティクス(IK)の詳しい解説 - Zhihu (zhihu.com)

コンセプト

順運動学 (FK) : ロボットの運動学方程式を使用して、ジョイントの特定のパラメーターに基づいてエンド エフェクターの位置を計算します。順運動学では、ユーザーは関係するすべてのジョイントのパラメータを設定する必要があります。

インバースキネマティクス (IK) : プロセスは FK とは逆で、ロボットの運動学方程式を使用してマニピュレータの関節パラメータを決定し、エンドエフェクタを目的の位置に移動します。エンドエフェクタは、関節 (手や足など) または内部関節 (肘や膝など) にすることができ、必ずしも端にあるとは限りません。IK はロボット技術で初めて登場し、現在ではエンジニアリング、コンピュータ グラフィックス、ビデオ ゲーム、CG アニメーションなどの多くの分野で使用されています。

エンドエフェクタについては、エンドエフェクタを掴むロボットアームの位置、ドアを開けるときのキャラクタの手の位置、歩くときのキャラクタの足の位置、これらをエンドエフェクタと呼ぶことができます。

IK 問題分析

IK には 1 つのソリューションがある場合もあれば、複数のソリューションがある場合もあれば、ソリューションがない場合もあります。

IK の問題を解決するには、次の 2 つの重要な手順があります。

  • 1: ターゲットが到達可能か到達不能かを分析します。存在しないソリューションを探すことを避けることで、処理時間を大幅に節約できるため、ターゲットが手の届く範囲にあるかどうかを確認することが重要です。エンドエフェクタが到達できるターゲット空間は、到達可能なワークスペースと呼ばれます。
  • 2: 解が存在し、その解に到達していない場合は、反復プロセス中に無限ループに入ることを避けるために終了条件を追加する必要があります。たとえば、前回の反復と現在の反復の間のエンド エフェクタの位置の差が指定された許容値より小さい場合、反復回数を制限し、IK ソルバーの計算を終了します。

IK を最適に機能させるには、ターゲットの近くにポーズをとったスケルトンから始めるのが最善です。これにより、アルゴリズムが最も近い解に焦点を当て、妥当な時間内に計算を完了することができます。利用可能な解の数は、ターゲットの位置または運動連鎖の自由度によって異なります。ターゲットに到達できない IK 問題は、過剰制約問題と呼ばれます。目標が達成可能な場合、2 つ以上のチェーンに対して複数の解決策が存在する可能性があります。これにより、IK 問題は制約がなくなり (または冗長になり)、目的の目標を達成するために無限の数の解が存在する可能性があります。

IK 解決アルゴリズム

IK ソルバーは主に、解析手法 (Analytic ファミリ)、数値手法 (数値ファミリー)、データ駆動型手法 (データ駆動型メソッド)、およびハイブリッド手法 (ソルバーのハイブリッド ファミリ) の 4 つの主要カテゴリに分類されます。

各メソッドの詳細な説明については、原文を参照してください~

解析手法アプリケーション TwoBoneIK

TwoBoneIK は、その名前が示すように 2 つのボーン (ルート ボーンを除く) であり、使いやすく、UE4.26 の SolveBasicTwoBoneIK、FAnimNode_TwoBoneIK、Advanced Locomotion System V4 プラグインなど、多くのアプリケーションがあります。

3 つの点で平面が決定されるため、3 次元空間での回転角度を解決するには、制御点 (つまり、UE4 の PoleVector 極座標点) を追加する必要があります。

Unreal Engine の TwoboneIK エクスペリエンス - Joint Target - Zhihu (zhihu.com)

極ベクトルの設定について↑

共同ターゲット

導入

FK はジョイントの回転と長さを通じて各サブスケルトンの位置を計算し、IK はターゲット位置とルート ノードの位置を通じて中間ジョイントの位置を計算します。IK もプログラムされたアニメーションの重要な部分であり、プログラムによって計算された位置をボーン チェーンの変形から推定することができます。

FK の計算は非常に簡単で、親ボーンからの行列乗算を使用するだけです。

しかし、IK の計算はそれほど単純ではありません。最も単純な TwoboneIK であっても、より複雑なマルチボーン IK はもちろんのこと、ジョイント ボーンが配置されている平面を特定するために極座標変数の導入が必要です。

ツーボーン IK

TwoboneIK の原理は、実際には余弦則を使用して角度を解決し、ジョイントの位置を計算することです。

基本的な用語

  • 根元のボーンであるルート ボーンは、脚 IK ではヒップと呼ばれます。
  • 関節の骨、これを中国語でどう訳しますか? とにかく真ん中の骨です? 脚 IK は膝と呼ばれます。
  • エンド ボーン (端のボーン) は、脚 IK ではヒールまたはフットと呼ばれます。
  • エフェクタ、ターゲット位置、エンドボーンが移動したい位置。エンドボーンの方向を決定するために回転が必要になる場合があります。
  • Joint Target、PoleVector、極ベクトルは、Root-JointTarget-Endbone を通るジョイント ボーンを配置する平面を見つけます。

参考記事:IKノードの詳細解説 – Zhihu (zhihu.com)

TwoBoneIk ノードの IK 計算には、End ボーン (つまり、hand_r などのセット IK ボーン)、Joint ボーン ( lowerarm_r などのエンド ボーンの親ボーン)、およびルート ボーン (関節ボーンの親ボーン (upperarm_r など)。

構成:

IKBone : エンドボーンのボーン名。

エフェクタの位置: エンドボーンの最終位置を指定します。

Joint Target Location : 計算後の関節ボーンの位置は無数に存在する可能性があるため、この点と Effector Location およびルート ボーンの 3 点で決まる平面が関節ボーンが配置される平面となります。適切な平面を比較するには、Joint Target Location の値を常に実験して最適な値を取得する必要があります。

Effector Location Space : EffectorLocation の座標系、World Space ワールド座標系、Component Space コンポーネント空間座標系、Parent Bone Space は EffectorSpaceBoneName で設定されたボーンの親ボーンを原点座標系として使用し、Bone Space は EffectorSpaceBoneName で設定されたボーンを使用します。 EffectorSpaceBoneName を原点座標として指定します。

Effector Space Bone Name : EffectorLocationSpace で Bone Space/Parent Bone Space を選択した場合、どのボーンを指定します。

Joint Target Location Space : Joint Target Location の座標系を指定します。

bAllowStreching : 腕​​の長さの調整を許可するかどうか。

ファブリック

Forward and Backward Reaching Inverse Kinematics (Forward and Backward Reaching Inverse Kinematics) は、複数のボーンの IK 計算をサポートしています。TwoBoneIk の計算とは異なり、FABRIK はボーン チェーンを前後にトラバースすることで、ボーンの位置を解に収束させます (そうでない場合もあります)。反復回数と精度によって決定され、最適になります)。

次の図は、ボーン A の IK 計算のプロセスを示しています。

構成:

Percision : 反復の開始前に、先端ボーンの位置と新しい位置の間の距離がこの精度より小さい場合、IK 計算は必要ないことを意味します。反復の開始後、先端ボーンの親ボーンと新しい位置の間の距離は、は、実際のチップ ボーン アームの長さに等しいです。差がこの精度未満の場合、反復は停止します。

Tip Bone:手など、IK チェーンの終了ボーンを指定します。

ルート ボーン:骨盤など、IK チェーンのルート ボーンを指定します。

Max Iteration: 最大迭代次数,默认10。

Effector Transform: Tip bone 新的变换量;

Effector Tansform Space: 指定Effector Transform的值是相对于世界坐标系(World Space),组件坐标系(Component Space),父骨骼坐标系(Parent Bone Space)还是指定的骨骼的坐标系(Bone Space)的。

Effector Transform Bone: 如果Effector Tansform Space选择了Bone Space, 该选项就是指定是哪一个骨骼的。

おすすめ

転載: blog.csdn.net/zaizai1007/article/details/132894177