| On this page |
Animateステートでラグドールツールを使用すると、ラグドールシミュレーションをアニメーションに追加することができます。Ragdollツールにするには、上部のツールバーのをクリックするか、Radialメニュー(ビューポートでCを押す)から Ragdoll を選択します。
セットアップ ¶
Animateステートでラグドールツールを使用する前に、以下の手順を実行する必要があります:
-
ジョイント制限のセットでキャラクタのスケルトンを更新します。
-
キャラクタのラグドールコリジョンシェイプを作成します。
-
キャラクタにコリジョンシェイプを追加します。
-
キャラクタのリグのコントロールをキャラクタのスケルトンのポイントにマッピングします。
-
Animateステートで使用されるラグドール設定を設定します。
-
アニメーションシーンにキャラクタを追加します。
ジョイント制限の設定およびコリジョンシェイプの作成の詳細については、ラグドールシミュレーションを参照してください。
Electraのセットアップ ¶
Electra Test Geometryには、上記のセットアップ工程をすべて自動で行なってくれる Configure Ragdoll オプションがあります:
-
Electra SOPで、 Output を APEX Scene に設定します。
-
Configure Ragdoll をオンにします。
-
Ragdoll Character Name パラメータでラグドールの名前を指定します。これは、AnimateステートのSelection Sets HUDに表示されるラグドールの名前です。
-
左側のツールバーにある
Animateをクリックします。これにより、Electra SOPが
APEX Scene Animate SOPに自動的に接続され、Animateステートに入ります。
-
上部のツールバーで
をクリックし、ラグドールツールにします。
一般的なキャラクタのセットアップ ¶
APEX Configure Ragdollレシピは、キャラクタにラグドールをセットアップするために必要なすべてのノードを配置してくれます。そのラグドール構成を、特定のキャラクタに合わせて微調整していくことができます。
Note
このレシピに入力するキャラクタは、パックキャラクタフォルダ構造である必要があります。
この例では、APEX Configure Ragdollレシピを使用して、Electraにラグドールをセットアップします:
-
ネットワークビューでElectra SOPを配置します。
-
Electra SOPで、 Output を APEX Character に設定します。
-
ネットワークビューで、Tabメニューを使用して“APEX Configure Ragdoll”を検索します。このレシピは、ラグドールツール向けにキャラクタをセットアップするための一連のノードを配置します。
-
Electra SOPの1番目の出力を、一連のノードの一番上にある
Null SOPに接続します。
以下のネットワークは、Animateステートのラグドールワークフローを示したものです。APEX Configure Ragdollレシピではノードの名前やレイアウトが異なりますが、ワークフローは同じです:
-
Electraスケルトンにジョイント制限を設定します:
-
Unpack Folder SOPの
skeletonは、Electraからスケルトンを抽出します。 -
Configure Joint Limits SOPは、Electraスケルトンにジョイント制限を設定します。詳細は、ジョイント制限を設定するを参照してください。
-
-
ラグドールコリジョンシェイプを作成します:
-
Unpack Folder SOPの
skinは、Electraからスキンジオメトリを抽出します。 -
Ragdoll Collision Shapes SOPは、Electraのコリジョンシェイプを作成します。詳細は、コリジョンシェイプを作成するを参照してください。
Note
ラグドールシミュレーションのSOPワークフローでは、
Rig Stash Pose SOPは、ラグドールソルバによって後で使用される
rest_transformアトリビュートをキャラクタ上に保存することで、そのキャラクタの静止ポーズを作成します。対照的に、Animateステートのラグドールソルバは、静止スケルトンのBase.skelから静止トランスフォームを読み込みます。Configure Joint Limitsおよび Ragdoll Collision Shapes SOPには、静止トランスフォームが設定されていないことを示す警告が引き続き表示されますが、この警告は無視してかまいません。 -
-
Pack Folder SOPは、更新したスケルトン(ジョイント制限を含む)とラグドールコリジョンシェイプ(マルチ入力に2つの入力)をキャラクタファイルのセットに追加します。Pack Folder SOPで、2つの入力の Name および Type パラメータを以下の値に設定します:
-
1番目の入力、更新したスケルトン:
skeletonUnpack Folder SOPでキャラクタから抽出したスケルトンと同じ名前。例えば、 Name はBase、 Type はskelに設定します。 -
2番目の入力、ラグドールシェイプ:ラグドールシェイプの Name および Type パラメータは、任意の値に設定できます。
パックキャラクタフォルダ構造でのキャラクタ要素の命名については、キャラクタデータの組み立てと抽出を参照してください。
-
-
APEX Map Character SOPは、Electraのリグコントロールをスケルトンのジョイントにマッピングします。これにより、ラグドールの動きをリグコントロールにベイクできるようになります。
-
Map By Name パラメータがオンの場合、同じ名前を持つコントロールとジョイントが自動マッピングされます。
-
コントロールとジョイントを手動でマッピングするには、Map Characterビューアステートに入ります。APEX Map Character SOPを選択し、Displayフラグをオンにしてから、左側のツールバーにある
Show Handleをクリックするか、ビューポートにマウスカーソルを置いてEnterを押します。ビューアステートで、コントロールとスケルトンジョイントの間をクリックします。すると自動的に Mappings マルチパラメータにエントリが作成されます:
キャラクタリグコントロールをスケルトンジョイントにマッピング
-
-
APEX Configure Character SOPは、キャラクタのラグドールプロパティを設定します。 Character Name は、AnimateステートのSelection Sets HUDに表示されるラグドールの名前です。
-
APEX Scene Add Character SOPは、キャラクタファイルをアニメーションシーンに追加します。 Character Name は、AnimateステートのSelection Sets HUDに表示されるキャラクタの名前です。
-
Animateステートに入るには、
APEX Scene Animate SOPを選択し、Displayフラグをオンにしてから、左側のツールバーにある
Animateをクリックするか、ビューポートにマウスカーソルを置いてEnterを押します。
-
上部のツールバーで
をクリックし、ラグドールツールにします。Selection Sets HUDの All Controls の下に、ElectraキャラクタおよびElectraラグドールのセットがあります。
Note
Ragdollツールにいる場合にのみ、Electraラグドールが選択セットに表示されます。
-
プレイバーの
Playを押して、アニメーションを再生します。ラグドールは地面に落下します。これは、ラグドールのデフォルトの挙動です。
Tip
ラグドールが地面に落下しない場合は、
Configure Joint Limits SOPに入力されているMotionClipを確認してください。Electraの場合、Configure Joint Limits SOPへのMotionClip入力として、Electra HDA内にある
motionclip_limitsStash SOPを使用することができます。
プロップを使用する ¶
プロップをラグドールで動作させるには、プロップを“キャラクタ”に変える必要があります。この例では、Electraが立つための薄いボックスの台をシーンに追加します:
-
ラグドール用に
Electraをセットアップします:
-
Output を APEX Scene に設定します。
-
Configure Ragdoll をオンにします。
-
Ragdoll Character Name でラグドールの名前を指定します。
-
-
APEX Scene Add Prop SOPはプロップをキャラクタに変換し、それをシーンに追加します。
-
Prop Name パラメータでは、Selection Sets HUDに表示されるプロップキャラクタの名前を指定できます。プロップのラグドールコリジョンシェイプは、Selection Sets HUDに
<prop_name>_ragdollという名前で表示されます。 -
Ragdoll をオンにして、ボックスのコリジョンシェイプを作成します。 Active をオフにして、ボックスが重力の影響を受けないようにします。
-
リグツリービューでは、APEX Scene Add Prop SOPがスケルトン、リグ、スキン、ラグドールコリジョンシェイプを含むボックスキャラクタ(.char)を作成していることが分かります。
-
-
Animateステートでラグドールツールにしてから、シミュレーションを再生します:
ラグドールシミュレーションを開始 -
Selection Sets HUDの All Controls の下に、Electraキャラクタ、Electraラグドール、ボックスプロップ、ボックスのラグドールのセットがあります。Electraキャラクタ(
)およびElectraのコントロール(
)の表示をオンにします。
-
コントロールのハンドルを使用して、ボックスの上でElectraキャラクタにポーズを付けます。Electraラグドールは、Electraのポーズに合わせて自動的に更新されます。
-
Electraのジョイントの剛性を上げます:
-
Selection Sets HUDで、Electraラグドールを選択します。これにより、Electraのすべてのコリジョンシェイプが選択されます。
-
Gを押して、パラメータHUDを開きます。
-
Ragdoll ▸ Animation タブで、 Stiffness を上げます。
-
-
ボックスを滑りやすくします:
-
ボックスのコリジョンシェイプを選択します。
-
パラメータHUDの Ragdoll ▸ Physical タブで、 Friction を下げます。
プロップ上のElectra -
オブジェクト同士を繋げる ¶
この例では、テザリングによってElectraの手をボックスに繋げます。
-
前の例と同じネットワークを使用して、ボックスプロップをアニメーションシーンに追加します。
-
Animateステートでラグドールツールにします。
-
Selection Sets HUDの All Controls の下に、Electraキャラクタ、Electraラグドール、ボックスプロップ、ボックスのラグドールのセットがあります。Electraおよびボックスプロップのキャラクタ(
)の表示をオフにして、ラグドール(
)およびコントロール(
)の表示をオンにします。
-
コントロールのハンドルを使用してボックスを移動します。
-
シミュレーションを再生します。
APEX Scene Add Prop SOPで非アクティブに設定されているため、ボックスは重力の影響を受けません:
テザリングなしのラグドールシミュレーション -
Electraの手をボックスに繋ぎ止めます:
-
Electraの手のコントロールまたはコリジョンシェイプを選択します。
-
⇧ Shiftを押したまま、ボックスのコントロールまたはコリジョンシェイプを選択します。Electraの手とボックスは、どちらを先に選択してもかまいません。
-
ビューポートでHを押します。
ボックスに繋ぎ止められたElectraの手 Note
シミュレーションの再生時に繋ぎ止めが表示されない場合は、ハンドルパラメータウィンドウで Hide Controls During Playback をオフにします。
-
| To... | Do this |
|---|---|
|
フレーム範囲内にテザリングを作成する |
これにより、 Enable パラメータ(パラメータHUDの Ragdoll ▸ Tethers タブ)にキーフレームが設定され、フレーム範囲にブックマークが作成されます。 既存のテザリングのアクティブなフレーム範囲を変更するには:
|
|
テザリングを削除する |
テザリングを選択して、ビューポート上で⌃ Ctrl + Hまたは⌦ Delを押します。 |
テザリング設定 ¶
テザリングのパラメータは、パラメータHUDの Ragdoll ▸ Tethers タブにあります。テザリングを選択すると、そのパラメータ値を調整できます。アニメーション可能なパラメータについては、ragdoll::Solveを参照してください。
オプション |
説明 |
|---|---|
Enable |
オンのとき、テザリングは有効です。 |
Lock |
オンのとき、テザリングの長さと位置がロックされ、変化しません。剛性を非常に高く設定した状態に似ています。 |
Stiffness |
元のテザリングの長さと位置を維持しようとする力の強さ。このオプションは、 Lock がオフのとき利用可能です。 |
Damping |
動きに適用される減衰。0の値は減衰なし、1の値は、振動を回避するのに十分な減衰になります。0から1の間の値は、(ある程度の減衰で)振動を許し、1より大きな値は、振動のない非常に減衰の大きな動きになります。このオプションは、 Lock がオフのとき利用可能です。 |
Rest Length |
2つのオブジェクト間で維持されるべき距離。自然長が1のとき、テザリングは2つのオブジェクトを元の距離のまま維持しようとします。自然長が0.5のとき、テザリングは2つのオブジェクト間の距離を元の距離の半分に維持しようとします。自然長を維持するために使用される力の強さは Stiffness に依存します。このオプションは、 Lock がオフのとき利用可能です。 |
Recompute Initial Conditions |
テザリングされたオブジェクトのオフセット、回転、自然長を再計算します。このオプションを使用すると、テザリングされたオブジェクトの位置を変更した後、予期せぬ挙動が発生するのを防ぐことができます。 |
Disable Collisions |
オンのとき、テザリングされたオブジェクトは衝突しません。オブジェクト同士が衝突するほど近付くと、互いに貫通するようになります。 |
Override Rotation Stiffness |
オンのとき、( Rotation Stiffness で)回転に異なる剛性を指定できます。このオプションは、 Lock がオフのとき利用可能です。 |
Rotation Stiffness |
Override Rotation Stiffness がオンのとき、この回転剛性が使用されます。 |
既存のアニメーションにラグドールを追加する ¶
この例では、上のキャラクタに既存のアニメーションが設定されており、そのアニメーションの上にラグドールシミュレーションを追加します:
ラグドールモーションを作成する ¶
-
ラグドールシミュレーション用に上のキャラクタをセットアップします。
-
Animateステートでラグドールツールにします。キャラクタのコリジョンシェイプが表示されます。アニメーションを再生すると、ラグドールが地面に落下します。これは、ラグドールのデフォルトの挙動です。
開始時のラグドールの挙動 -
ラグドールがよく見えるように、ラグドールを元のアニメーションの横に移動します:
-
⌃ Ctrl + Gを押して、Animate Settings HUDを開きます。
-
Ragdoll ▸ Actions タブで、 Show Visualizer Offset Handle をオンにします。
-
ハンドルを使用してラグドールを移動します。
ラグドールを視覚化 -
-
背骨のジョイントはアニメーションに追従し、キャラクタの残りはラグドールとしてシミュレートされるように設定します:
-
背骨に沿ってコリジョンシェイプを選択し、Gを押してパラメータHUDを開きます。
-
Ragdoll ▸ Animation タブで、 Active をオフにします。選択したコリジョンシェイプは、ラグドールソルバの影響を受けなくなります。
-
Active チェックボックスをAltクリックし、選択したコリジョンシェイプそれぞれの現行フレームにキーフレームを設定します。選択したコリジョンシェイプのチャンネルは、チャンネルリストに
_active付きで表示されます。
部分的なラグドール -
-
投げの終了時に、キャラクタ全体でラグドールシミュレーションが引き継ぐように指定します:
-
プレイバーのタイムラインで、ラグドールシミュレーションに引き継がせたいフレームに移動します。
-
Active をオンにします。
-
Active チェックボックスをAltクリックし、選択したコリジョンシェイプそれぞれの現行フレームにキーフレームを設定します。
投げの終了時にフルラグドールに切り替える -
ラグドールモーションをアニメーションに戻す ¶
ラグドールモーションを上のElectraに戻すには:
-
上のElectraのすべてのコントロールを選択します(Selection Sets HUDから上のElectraを選択)。
-
⌃ Ctrl + Gを押して、Animate Settings HUDを開き、 Bake タブに移動します。利用可能なオプションの説明については、ベイク設定を参照してください。
Bake to New Layer をオンにすると、オーバーライドレイヤーとして設定された新しいアニメーションレイヤーに、ラグドールモーションの新しいキーフレームが追加されます(新しいレイヤーがベースアニメーションを上書きします)。
-
タイムラインでフレームに移動し、ラグドールモーションをアニメーションに戻していきます。
-
Start Recording Poses をクリックします。
-
タイムラインをラグドールモーションの終了までスクラブします。
-
Stop Recording Poses をクリックします。ラグドールモーションがオーバーライドレイヤーとして新しいアニメーションレイヤーに追加されます。
-
投げの終了後にのみラグドールモーションを適用するには、新しいレイヤーにウェイトを設定します:
-
⇧ Shiftを押したままタイムラインをドラッグして、投げの終了後のフレーム範囲を選択します。
-
オーバーライドレイヤーを
クリックして、 Set Weight from Playbar Selection を選択します。キーフレームが、フレーム範囲の開始フレームおよび終了フレームのレイヤーウェイトに追加されます。
最終アニメーション -
以下の方法で、ラグドールモーションを元のアニメーションに戻すことができます:
-
Bake to New Layer をオンにして、ラグドールモーションのフレーム範囲内でのみキーをベイクします。作成されるアニメーションレイヤーで、新しいレイヤーにウェイトを設定します。これは前の例と同じです。
-
Bake to New Layer をオンにして、アニメーションおよびラグドールモーションのフレーム範囲全体でキーをベイクします。フレーム範囲全体がオーバーライドレイヤーとして新しいレイヤーに書き出されます。
-
Bake to New Layer をオフにして、ラグドールモーションのフレーム範囲内でのみキーをベイクします。このフレーム範囲内で、ラグドールモーションが元のアニメーションに取って代わります。
ラグドールのポージング ¶
ラグドールポーズモードでは、ラグドールシミュレーションをバックグラウンドで実行しながら、キャラクタのコントロールを操作してキャラクタにポーズを付けることができます。
-
前の例と同じネットワークを使用して、ボックスプロップをアニメーションシーンに追加します。
-
Animateステートでラグドールツールにします。
-
ラグドールツール内から、Oを押すか、Radialメニュー(ビューポートでCを押す)から Ragdoll Posing を選択して、ラグドールポーズモードに入ります。
-
Electraにポーズを付けて、アニメーションを再生します:
ラグドールのポージング開始時のシーン -
Selection Sets HUDの All Controls の下に、Electraキャラクタ、Electraラグドール、ボックスプロップ、ボックスのラグドールのセットがあります。ラグドールポーズモードで、Electraキャラクタのコントロール、さらにはElectraおよびボックスのラグドールコリジョンシェイプを操作します。Selection Sets HUDで:
-
Electraキャラクタのコントロールの表示をオンにします(
)。
-
Electraおよびボックスのラグドールコリジョンシェイプの表示をオンにします(
)。
-
Electraキャラクタおよびボックスジオメトリの表示をオフにします(
)。こうすることで、ラグドールコリジョンシェイプが見やすくなります。
-
-
アクティブなコリジョンシェイプを確認するには、Animate Settings HUDの Ragdoll Pose Settings ▸ Actions タブで、 Display Mode を Collision Shapes に設定します。ライトグレーのシェイプがアクティブで、ダークグレーのシェイプが非アクティブです。非アクティブなシェイプは、他のオブジェクトに反応しません。以下の画像では、頭部のみがアクティブです:
ラグドールポーズモードでのアクティブなシェイプと非アクティブなシェイプ -
コントロールを選択すると、それに関連付けられたコリジョンシェイプがアクティブになります。以下の動画では、手のコントロールが選択されているため、手のコリジョンシェイプがアクティブになります(ライトグレーに変わる)。手のシェイプはボックスに反応しますが、指は非アクティブなままなので、ボックスを貫通します:
選択したコリジョンシェイプがオブジェクトに反応 -
指もボックスに反応するようにするには、指をアクティブにします:
-
指のコリジョンシェイプを選択します。
-
⌃ Ctrl + Eを押して、コリジョンシェイプのアクティブステートを切り替えます。
指がボックスに反応 Note
キャラクタのコントロールはコリジョンシェイプに反応しないため、手を動かすと、それらはボックスを貫通しているように見えます。マウスを離すと、コントロールはコリジョンシェイプのの位置に戻ります。
-
ボックスを押すElectra ¶
Electraがボックスを押すようにするには:
-
ボックスをアクティブに設定します:
-
ボックスのラグドールシェイプを選択します。
-
⌃ Ctrl + Eを押します。
-
-
手のコントロールを選択して移動します:
ボックスを押すElectra -
ラグドールポーズモードでは、アクティブなオブジェクトに重力を適用できます:
-
Selection Sets HUDで、ボックスのラグドールのコントロールの表示をオンにします(
)。
-
ボックスのラグドールのコントロールを選択します。
-
をスクロールダウンし、重力を適用します。⌃ Ctrlを押したままスクロールすると、重力の強度が上がります。
ボックスのラグドールシェイプに重力を適用 -
-
Oを押して、ラグドールポーズモードを終了します。ラグドールポーズモードで移動したコントロールに、キーフレームが書き出されます。Animate Settings HUDの Auto Reload Target Animation がオンの場合、ラグドールはキャラクタのポーズに合わせて自動的に更新されます(ラグドールポーズモードのためにElectraキャラクタおよびボックスジオメトリの表示をオフにしていた場合は、その表示をオンにします(
)。
ラグドールポーズモードの終了後 Auto Reload Target Animation がオフの場合、ラグドールポーズモードを終了した際、キャラクタのポーズとそのラグドールシェイプの間に不一致が見られます:
キャラクタとそのラグドールの不一致 以下の操作を行なって、ラグドールをキャラクタに合うように更新します:
-
⌃ Ctrl + Gを押して、Animate Settings HUDを開きます。
-
Ragdoll ▸ Actions タブを選択します。
-
Reload Target Animation をクリックします。
-
表示されたダイアログで、Electraとボックスのラグドールを選択します。
-
Accept をクリックします。
-
How to ¶
| To... | Do this |
|---|---|
|
キャラクタの横にラグドールを表示する |
|
|
ラグドールをキャラクタスキンまたはコリジョンシェイプで視覚化する |
|
|
ラグドールに衝突可能なプロップを取り込む |
プロップを使用するを参照してください。 |
|
コリジョンシェイプのアクティブステートを切り替える |
または
|
|
コリジョンシェイプを元のアニメーションに追従するよう設定する |
他のオブジェクトは、引き続きコリジョンシェイプに衝突することができます。 |
|
特定のジョイントを、元のスケルトンのジョイント位置と一致するよう設定する |
選択したジョイントは元のスケルトンジョイントに追従しますが、キャラクタの残りはラグドールになります。 ジョイントが元の位置からどれくらい移動したかを確認するには:
|
|
キャラクタをラグドールになるように設定する |
|
|
特定のコリジョンシェイプを、他のシェイプと衝突しないよう設定する |
|
|
ラグドールモーションを新しいアニメーションレイヤーに追加する |
詳細は、ラグドールシミュレーションをアニメーションに戻すを参照してください。 |
|
キャラクタのポーズに合わせてラグドールを更新する |
ラグドールが自動的にキャラクタのポーズに合わせて更新されるようにするには、 Auto Reload Target Animation をオンにします。 |
|
ラグドールのパラメータにキーフレームを設定する |
|
|
コリジョンシェイプの密度、跳ね返り係数、摩擦を変更する |
|
|
コリジョンシェイプのパラメータ値をコピーアンドぺーストする |
|
|
コリジョンシェイプのパラメータ値をリセットする |
|
|
交差するコリジョンシェイプを表示する |
|
|
ラグドールポーズモードでアクティブなオブジェクトに重力を適用する |
|
|
グランドプレーンをオンまたはオフにする |
|
|
グランドプレーンを表示または非表示にする |
|
ラグドールパラメータ(パラメータHUDの Ragdoll タブ)およびラグドールソルバの設定(Animate Settings HUDの Ragdoll ▸ Solver タブ)の説明は、ragdoll::Solveおよび
Ragdoll Solver SOPノードのドキュメントで確認できます。