On this page |
Ragdoll Solver SOPを使用してキャラクタに対してRBD(リジッドボディダイナミクス)シミュレーションを実行することで、そのキャラクタにそのシミュレーションの動きや衝突効果を作成することができます。
Configure Joint Limits SOPと
Ragdoll Collision Shapes SOPは、ラグドールシミュレーションで使用される設定をセットアップすることができます。
ラグドールシミュレーションの作成手順は以下のとおりです:
-
キャラクタスケルトンにジョイント制限を設定する。
-
ラグドールコリジョンシェイプを作成する。
-
ラグドールシミュレーションを実行する。
-
シミュレーション結果を表示する。
以下のワークフローは、Electraテストジオメトリにラグドールシミュレーションを追加します:

Electraテストジオメトリの Output パラメータを Skin Surface に設定します。
Rig Stash Pose SOPは、後で
ラグドールソルバで使用される
rest_transform
アトリビュートをキャラクタ上に保存することで、そのキャラクタの静止ポーズを作成します。
ジョイント制限を設定する ¶
Configure Joint Limits SOPには、スケルトンに対してジョイント制限をインタラクティブに設定/修正することができます。
ジョイント制限は、そのConfigure Joint Limits SOPのビューポートステート内で作成します:
-
Configure Joint Limits SOPを選択します。
-
ビューポート上にマウスカーソルを置いてEnterを押すか、または、ビューポートの左側にあるツールバーの
をクリックして、そのConfigure Joint Limits SOPのビューポートステートに入ります。
-
上部のツールバーの Rotation Limit Display オプションはデフォルトでオンになっているので、ジョイントを選択すると、その回転制限が表示されます。
ジョイントを選択して、回転制限ハンドルを調整します:
ジョイントの回転制限を設定 -
ジョイントの移動制限を設定するには:
-
上部のツールバーの Translation Limit Display をオンにします。
-
移動制限を有効にします:
-
ビューポート上にマウスカーソルをを置いてFを押すと、その制限を有効にするためのHUDが出ます。
-
Translation Limits をオンにします。
-
-
ジョイントを選択して、移動制限ハンドルを調整します。
ジョイントの移動制限を設定 ジョイント制限は、各ポイント上の辞書アトリビュートに格納されます。 その辞書アトリビュートの名前は、Configure Joint Limits SOPの Output Configuration パラメータで設定します。
Note
現在のところ、ラグドールソルバは、ジョイントの移動制限に対応していません。 移動制限は、ポージングにのみ使用されます。
-
-
ジョイントが制限外にあるかどうかを確認するには:
-
Configure Joint Limits SOPの Display Joints Outside Their Limits をオンにします。
または
-
Configure Joint Limits SOPのビューポートステートで、上部のツールバーの Display Joints Outside Their Limits をオンにします。
そのジョイントが制限外にあると、そのジョイントの球が赤に変わります。
ジョイント制限インジケータ ジョイント制限はローカル空間で適用されます。 ジョイントの親が移動すると、ジョイント制限もその親に追従しますが、ジョイント自体を移動させた場合でもそのジョイント制限が適用されます。
ジョイント制限はローカル空間で適用される -
回転制限ハンドルと移動制限ハンドルの表示に関するいくつかの事項:
Configure Joint Limits SOP
-
Display Rotation Limits パラメータや Display Translation Limits パラメータは、Configure Joint Limits SOPのビューポートステートに入ることなく回転制限や移動制限を表示できるようにします。これらのパラメータは、すべてのジョイント制限をガイドジオメトリで表示します。
Configure Joint Limits SOPのビューポートステート
-
ジョイントを選択すると、すべての値が0に設定されたジョイント制限が作成されます。ビューポート上にマウスカーソルをを置いてGを押すと制限値のHUDが出るので、そこで制限値を確認することができます。
-
上部のツールバーの Rotation Limit Display オプションはデフォルトでオンになっているので、ジョイントを選択すると、そのジョイントの回転制限ハンドルが表示されます。
-
Show All Handles がオフ、且つ、 Rotation Limit Display または Translation Limit Display がオンな場合、選択したジョイント(s)にのみ制限ハンドルが表示されます。
-
Show All Handles がオンの場合、すべてのジョイント制限が表示されます。
-
Rotation Limit Display または Translation Limit Display がオフの場合、 Show All Handles の設定に関わらず、それらの制限は表示されません。
Note
Rotation Limit Display または Translation Limit Display がオンになっているのに、ジョイントを選択してもその制限が表示されない場合は、 その制限が有効になっているかどうか確認してください。制限を有効にするには:
-
Configure Joint Limits SOPのビューポートステートで、ビューポート上にマウスカーソルを置いてFを押して、制限を有効にするためのHUDを出します。そして、 Rotation Limits または Translation Limits をオンにします。
または
-
ビューポート上にマウスカーソルを置いてPを押して、ジョイント制限パラメータウィンドウを出します。 Viewer State Dialog タブにある Enable R Limits または Enable T Limits をオンにします。
MotionClipからジョイント制限を計算する ¶
MotionClipがあるのであれば、Configure Joint Limits SOPは、そのMotionClipのポーズに基づいて自動的にジョイント制限を計算することができます。
このサンプルには、ジョイント回転制限を設定するための開始点として使用可能なMotionClipが用意されています。
以下のポーズから生成されたMotionClipがあったとします:
-
MotionClipをConfigure Joint Limits SOPのMotionClip入力(2番目の入力)に接続します。
-
Configure Joint Limits SOPの Compute Limits for Joints from MotionClip をオンにします。
-
Compute Limits セクションにある Group パラメータに、ジョイント制限を計算したジョイントを指定します。
-
Configure Joint Limits SOPのビューポートステートに入ります:
MotionClipから計算されたジョイント制限
How-to ¶
To... | Do this |
---|---|
制限が付けられているジョイントすべてのハンドルを表示する |
Configure Joint Limits SOPの Guide Geometry セクションにある Display Rotation Limits または Display Translation Limits をオンにします。 または Configure Joint Limits SOPのビューポートステートで、 Show All Handles をオンにして、 Rotation Limit Display または Translation Limit Display をオンにします。 |
選択した回転制限/移動制限のみを表示する |
Configure Joint Limits SOPのビューポートステートで:
|
ジョイント制限を調整する |
Configure Joint Limits SOPのビューポートステートで: 上部のツールバーの Show All Handles をオンにして、ジョイント制限ハンドルを調整します。 または ジョイントを選択して、ビューポート上にマウスカーソルを置いてGを押して、制限値HUDを出します。 または ジョイントを選択して、ビューポート上にマウスカーソルを置いてPを押して、ジョイント制限パラメータウィンドウを出します。 Viewer State Dialog タブにある X Angle Range 、 Y Angle Range 、 Z Angle Range の値を調整します。 |
特定のジョイントにのみ制限を設定する |
Configure Joint Limits SOPのビューポートステートで:
Configure Joint Limits SOPの Group パラメータが更新されて、制限が設定されていないジョイントがリストされます(ジョイント名の頭に |
ジョイント制限をコピーアンドペーストする |
Configure Joint Limits SOPのビューポートステートで:
|
ジョイント制限をミラーさせる |
Configure Joint Limits SOPのビューポートステートで:
|
回転制限ハンドルの表示を反転させる |
Configure Joint Limits SOPのビューポートステートで、ジョイントを選択して⇧ Shift + Fを押します。 |
設定されているジョイント制限をすべて削除する |
Configure Joint Limits SOPの Clear Overrides をクリックします。 |
特定のジョイント制限を削除する |
Configure Joint Limits SOPのビューポートステートで:
|
ジョイント制限値をリセットする |
Configure Joint Limits SOPのビューポートステートで:
|
ジョイント制限を有効/無効にする |
Configure Joint Limits SOPのビューポートステートで:
Enable R Limits/Enable T Limits をオフにすると、もはやジョイントに制限が割り当てられなくなります。 制限値はポイント上の辞書アトリビュートに書き出されなくなり、Configure Joint Limits SOPのビューポートステートでは制限ハンドルが表示されなくなります。 しかし、その制限は削除されるわけでなく、 Enable R Limits/Enable T Limits をオンにすることで再びアクティブにすることができます。 |
制限を超えているジョイントを表示する |
Configure Joint Limits SOPの Display Joints Outside Their Limits をオンにします。 または Configure Joint Limits SOPのビューポートステートの上部のツールバーにある Display Joints Outside Their Limits をオンにします。 |
制限を超えているジョイントの制限を広げる |
Configure Joint Limits SOPのビューポートステートで:
|
ジョイント制限ガイドジオメトリのサイズを変更する |
Configure Joint Limits SOPの Guide Geometry Scale を調整します。 |
ラグドールコリジョンシェイプを作成する ¶
Ragdoll Collision Shapes SOPは、スケルトンジョイントに対するキャラクタジオメトリ(スキン)のウェイトに基づいて、コリジョンシェイプを作成します。
コリジョンシェイプは、Ragdoll Collision Shapes SOPのビューポートステートで表示/更新することができます:
-
Ragdoll Collision Shapes SOPを選択します。
-
ビューポート上にマウスカーソルを置いてEnterを押すか、または、ビューポートの左側にあるツールバーの
をクリックして、Ragdoll Collision Shapes SOPのビューポートステートに入ります。
デフォルトでは、Ragdoll Collision Shapes SOPは、すべてのジョイントに対して凸ハルコリジョンシェイプを作成します。
凸ハルコリジョンシェイプ Note
ラグドールソルバーは、凸ハル形状よりもカプセルやボックスなどの基本形状に対して解析を高速に実行します。 これは、ソルバーが特に数千体ものラグドールを同時に実行するような群衆で重要になってきます。
-
コリジョンシェイプの位置、向き、スケールを手動で調整するには、そのコリジョンシェイプのトランスフォームハンドルを使用します:
-
シェイプまたはジョイントを選択します。
-
上部のツールバーの Enable Handle をオンにします。
-
(オプション) ビューポート上にマウスカーソルを置いてYを押して、別のトランスフォームハンドルモードに切り替えます。
-
-
複数のジョイントを包含した1個のコリジョンシェイプ(例えば、手全体が1個のコリジョンシェイプ)を作成するには:
-
指のジョイント/シェイプ(s)を選択します。
-
クリックして、 Merge Convex Hull with Parent を選択します。
選択したジョイントから1個のコリジョンシェイプを生成
Ragdoll Collision Shapes SOPの Generate Shapes セクションの Generate Shapes Group パラメータが更新され、コリジョンシェイプが生成されないジョイントがリストされます(ジョイント名の頭に
^
が付きます)。 これらのジョイントのコリジョンシェイプは親シェイプにマージされました。Note
ジョイントまたはシェイプを選択すると、上部のツールバーの Shape 設定のシェイプが自動的に変更されます。
-
-
複数のコリジョンシェイプの親シェイプへのマージをやり直すには:
-
Zを押して Restore from Groups モードに入ります。マージされたジョイントが選択できるようになります。
-
ジョイントを選択します。
-
ビューポート上にマウスカーソルを置いて
クリックして、 Restore Convex Hull を選択します。
-
再びZを押して、 Restore from Groups モードを抜けます。
-
カスタムコリジョンシェイプを作成する ¶
-
Ragdoll Collision Shapes SOPのビューポートステートで、シェイプまたはジョイントを選択します。
-
上部のツールバーの Shape を Custom に設定します。すると、現在のシェイプが消えます。
-
(オプション) ビューポートの左側にあるツールバーの
Selectボタンを
クリックして、どれかの選択オプションを選択します。
-
ビューポート上にマウスカーソルを置いてSを押して、キャラクタスキンを表示します。
-
カスタムシェイプの作成に使用したいキャラクタスキン上の領域を選択します。
-
SまたはEnterを押して、選択モードを抜けます。選択した領域から凸ハルが構築されます。
カスタムコリジョンシェイプの作成 -
カスタムシェイプを除去するには:
-
シェイプまたはジョイントを選択します。
-
ビューポート上にマウスカーソルを置いてSを押して、キャラクタスキンを表示します。
-
何も選択されないように、キャラクタスキンから離れたところをクリックします。
-
SまたはEnterを押して選択モードを抜けます。
-
基本シェイプの扱い方 ¶
すべてのコリジョンシェイプに基本シェイプを使用するように選択することができます。 この基本シェイプは、スキン(Rest Geometry入力)がない場合に役立ちますが、さらにスケルトンジョイントに基づいて自動的にすべてのコリジョンシェイプを作成たいことでしょう。
すべてのコリジョンシェイプで基本シェイプが使用されるように設定するには:
-
Ragdoll Collision Shapes SOPの Generate Convex Hulls from Skin Geometry をオフにします。このパラメータは、そのRagdoll Collision Shapes SOPのRest Geometry入力(3番目の入力)に何も接続されていない場合は利用できません。
-
Generate Basic Shapes をオンにします。
-
ドロップダウンメニューから、使用したいシェイプを選択します。
特定のコリジョンシェイプで基本シェイプが使用されるように設定するには:
-
Ragdoll Collision Shapes SOPのビューポートステートで、シェイプ(s)を選択します。
-
上部のツールバーの Shape ドロップダウンメニューから基本シェイプを選択します。
基本コリジョンシェイプの向きと位置を変更する ¶
基本コリジョンシェイプを特定のジョイントの方へ向かせるには:
-
Ragdoll Collision Shapes SOPのビューポートステートで、基本コリジョンシェイプ、または、その基本コリジョンシェイプに関連付けられているジョイントを選択します。
-
Aを押します。コリジョンシェイプの向きを変更させることができるジョイントオプションが表示されます:
コリジョンシェイプの向きを変更させることができるジョイント -
基本コリジョンシェイプを向くジョイントを選択します:
基本コリジョンシェイプの向きを変更 Note
上部のツールバーの Compute Shape Transform が Off に設定されていた場合、 Compute Shape Transform を From Convex Hull または From Reference Joint に設定しない限り、その基本コリジョンシェイプの向きが変わる効果を確認できません。
基本コリジョンシェイプの位置を自動的に決めるには:
-
基本コリジョンシェイプ、または、その基本コリジョンシェイプに関連付けられているジョイントを選択します。
-
上部のツールバーの Compute Shape Transform ドロップダウンメニューから以下のどれかのオプションを選択します:
-
From Convex Hull は、基本コリジョンシェイプをスケールし、それを凸ハルの境界内に配置します。
凸ハル境界内に配置されたコリジョンシェイプ -
From Reference Joints は、選択したジョイントと参照ジョイントとの距離を使用してコリジョンシェイプをスケールします。
選択したジョイントと参照ジョイントの間のコリジョンシェイプ -
Off は、コリジョンシェイプの中心が選択したジョイントに位置するようにします。
選択したジョイントに配置されたコリジョンシェイプ
-
How-to ¶
To... | Do this |
---|---|
Ragdoll Collision Shapes SOPのビューポートステートに入らずに、コリジョンシェイプを表示する |
Ragdoll Collision Shapes SOPの Display Collision Shapes をオンにします。 |
コリジョンシェイプを変更する |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
すべてのコリジョンシェイプに基本コリジョンシェイプを使用する |
|
元のコリジョンシェイプに戻す |
Ragdoll Collision Shapes SOPの Clear Overrides ボタンをクリックします。これは、すべてのコリジョンシェイプを元に戻します。 または 特定のシェイプを元に戻すには、Ragdoll Collision Shapes SOPのビューポートステートで:
これは、親シェイプにマージされているコリジョンシェイプは元に戻しません。 それを行ないたいのであれば、“複数のコリジョンシェイプの親シェイプへのマージをやり直す”を参照してください。 |
特定のジョイントのコリジョンシェイプを削除する |
Ragdoll Collision Shapes SOPのビューポートステートで:
Ragdoll Collision Shapes SOPの Group パラメータが更新され、コリジョンシェイプを持たないジョイントがリストされます(ジョイント名の頭に |
削除されたコリジョンシェイプを復元する |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
凸ハルシェイプの生成に使用されるアルゴリズムを変更する |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
カスタムコリジョンシェイプを作成する |
カスタムコリジョンシェイプの作成を参照してください。 |
基本コリジョンシェイプをジョイントの方へ向ける |
基本コリジョンシェイプの向きと位置の変更を参照してください。 |
基本コリジョンシェイプの位置を自動的に決める |
基本コリジョンシェイプの向きと位置の変更を参照してください。 |
キャラクタの片側にコリジョンシェイプをミラーさせる |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
コリジョンシェイプの位置、向き、スケールを手動で調整する |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
コリジョンシェイプトランスフォームに手動で変更された更新を元に戻す |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
トランスフォームハンドルモードを切り替える |
Ragdoll Collision Shapes SOPのビューポートステートで:
|
複数のジョイントを包含した1個のコリジョンシェイプを作成する |
|
複数のコリジョンシェイプの親シェイプへのマージをやり直す |
Ragdoll Collision Shapes SOPのビューポートステートで:
または Ragdoll Collision Shapes SOPの Generate Shapes セクションにある Generate Shapes Group パラメータから、ジョイント名の頭に |
コリジョンシェイプが交差している箇所を表示する |
Ragdoll Collision Shapes SOPの Display Intersections をオンにします。 または Ragdoll Collision Shapes SOPのビューアステートの上部のツールバーの Display Intersections をオンにします。 隣接していないコリジョンシェイプがお互いに交差している領域は赤で表示されます。 これは、ラグドールソルバが重複しているシェイプを処理する際に問題になり得る領域をハイライトするのに役立ちます。 |
コリジョンシェイプの交差を修復する |
Ragdoll Collision Shapes SOPのビューアステートで:
|
ラグドールシミュレーションを実行する ¶
Ragdoll Solver SOPは、入力スケルトンに対してラグドールRBDシミュレーションを実行します。
-
Ragdoll Solver SOPで、Electraが何かに衝突できるように地面を有効にします。 Ground Collision セクションにある Ground Type を Ground Plane に設定します。
-
Ragdoll Solver SOPを選択して、ディスプレイフラグをオンにします。
-
プレイバーの
Playを押して、シミュレーションを再生します。
ラグドールシミュレーション -
上流のConfigure Joint Limits SOPで特定のジョイントに対してジョイント制限が作成されていなかった場合、ラグドールソルバは、それらのジョイントがその場で固定されているものとして扱って、それらのジョイントが動けないようにします。 この例では、足のジョイントにジョイント制限が作成されていません。 ラグドールシミュレーションは、すべてのジョイントに対して実行されますが、その足のジョイントはその場で固定されます:
足のジョイントにはジョイント制限が作成されていません
上半身のみをラグドールとしてシミュレーションする ¶
この例では、上半身のジョイントにのみラグドールシミュレーションを実行したいとします:
-
Ragdoll Solver SOPの Ragdoll セクションの Group パラメータの隣りにある
をクリックします。
-
上半身のジョイントを選択します:
-
開いたリグツリービューで、上半身のジョイントを⇧ Shiftまたは⌃ Ctrl選択して、 Accept をクリックします。
または
-
ビューポート内で、上半身のジョイントを選択して、Enterを押します。
Group パラメータに入っていないジョイントは非アクティブコリジョンシェイプ(シミュレーションされないオブジェクト)として扱われます。
上半身のみのラグドールシミュレーション -
-
ラグドールシミュレーションの横に参照として入力コリジョンシェイプを表示させるには:
-
Ragdoll Solver SOPの Guide Geometry セクションの Display Reference Collision Shapes をオンにします。
-
Offset パラメータを調整して、入力アニメーションからラグドールシミュレーション結果をオフセットさせます。
ラグドールシミュレーションのスケルトンが入力シェイプの位置に表示されます:
元のアニメーション(左); ラグドールシミュレーション(右) -
入力アニメーションに合わせる ¶
ラグドールソルバを実行する前に、単純なアニメーションを追加します:
ラグドールシミュレーションを実行する時に、その入力アニメーションに合わせようとしたいのであれば、Ragdoll Solver SOPの Match Local Transforms をオンにします:
入力アニメーションにもっと強く追従させるには、 Match Local Transforms をオンにしたまま Bend Stiffness を上げます:
ジョイントの位置を入力アニメーションにピン留めする ¶
Electraの右手を入力アニメーションの位置にピン留めするには:
-
Ragdoll Solver SOPの Ragdoll セクションの1つ目の構成セットをデフォルト値のままにします( Group を
*
、 Match Local Transforms をオフ)。 -
Configurations の横にある
をクリックして、もう1つ構成セットを追加します。
-
この2つ目の構成セットでは、右手のジョイントを選択します:
-
Group パラメータの横にある
をクリックします。
-
開いたリグツリービューで、右手のジョイントを選択して、 Accept をクリックします。
または
ビューポート内で、右手のジョイントを選択して、Enterを押します。
Note
Configurations マルチパラメータ内の下にあるエントリーが上にあるエントリーを上書きします。
-
-
Match World Transforms をオンにします。
右手を入力アニメーションにピン留めした結果
取り付けられていないコリジョンシェイプのルートをピン留めする ¶
上流のRagdoll Collision Shapes SOPで一部のジョイントセットにのみコリジョンシェイプを作成していた場合、 例えば、右腕のジョイントにのみコリジョンシェイプを作成していた場合、その右腕をシミュレーションすると、その右腕はどこにもピン留めされていないので重力で落下します:
この腕を入力アニメーションに追従させる1つ目の方法は、 Match World Transforms をオンにすることです。 2つ目の方法は、 Pin Root をオンにすることです。これは、(コリジョンシェイプを持っている)腕のルートジョイントを入力アニメーションにピン留めします。
これは、ジョイントの階層の上位にあるどのコリジョンシェイプにも接続されていないジョイントチェーンがある場合に役立ちます。 Pin Root オプションを使用すると、手動でオブジェクト同士を拘束することなく、ジョイントチェーンをルートジョイントの動きに追従させることができます。 ルートジョイントは、入力アニメーションに追従し、残りのジョイントチェーンはラグドールとしてシミュレーションされます。
キャラクタをオブジェクトに拘束させる ¶
この例では、Electraの手をボックスの角に拘束させます。
-
Box SOPを作成し、そのボックスに単純な動きのキーフレームを設定します。
-
このBox SOPの出力をRagdoll Solver SOPのCollision Geometry入力(3番目の入力)に接続します。
ボックスがElectraに衝突 -
Constraints セクションの Constraints マルチパラメータの横にある
をクリックして、いくつかの拘束を追加します。
デフォルトの拘束 Note
Ragdoll Solver SOPの Collision Geometry セクションでは、このボックスの物理特性を設定することができます。 デフォルトでは、 Collision Type が Animated (Rigid) に設定されているので、このボックスはアニメーションに追従します。 Collision Type を Active に設定すると、このボックスはラグドールとしてシミュレーションされ、重力の影響を受けて、その場に留まります。
-
Electraの左手をボックスに拘束します:
-
Joint Group パラメータの横にある
をクリックします。
-
開いたリグツリービューで、左手のジョイントを選択して、 Accept をクリックします。
または
ビューポート内で、左手のジョイントを選択して、Enterを押します。
-
-
Electraの手をボックスの前面の最も近い角に拘束します:
-
Constrain To を Closest Location on Primitive に設定します。
-
Target Primitives Group パラメータの横にある
をクリックします。
-
ビューポート内で、ボックスの前面を選択して、Enterを押します。
-
-
Electraの手がボックスに近づくようにするために、 Rest Length Scale を下げ、 Stiffness を上げます。
Electraの手をボックスに拘束
To... | Do this |
---|---|
特定のジョイントにのみシミュレーションを実行する |
Ragdoll Solver SOPの Ragdoll セクションにある Group に、シミュレーションしたいジョイントを設定します。 |
ラグドールシミュレーションのそばに入力アニメーションを表示する |
Guide Geometry セクションの Display Reference Collision Shapes をオンにして、 Offset 値を設定します。 |
入力アニメーションの動きに合わせる |
Match Local Transforms をオンにして、 Bend Stiffness と Bend Damping のパラメータを調整します。 |
ジョイントを入力アニメーションにピン留めする |
Match World Transforms をオンにして、 Position Stiffness 、 Position Damping 、 Orientation Stiffness 、 Orientation Damping のパラメータを調整します。 |
ジョイントチェーンのルートを入力アニメーションの動きにピン留めする |
Pin Root をオンにします。 |
ラグドールキャラクタをオブジェクトに拘束する |
キャラクタをオブジェクトに拘束するを参照してください。 |
キャラクタが衝突する地面を有効にする |
Ground Collision セクションの Ground Type を Ground Plane に設定します。 |