このワークフローでは、Maya で PhysX プラグインを使用してラグドールを作成し、Stingray に書き出す方法について説明します。このチュートリアルの第 2 部は、ラグドールを他のアプリケーションで作成する場合にも当てはまります。
関連項目:
Maya の PhysX プラグインをダウンロードしてインストールします。「DCC ツール用 PhysX プラグインをインストールする」を参照してください。
Maya で、プラグイン マネージャ(Plug-in Manager)(ウィンドウ > 設定/プリファレンス > プラグイン マネージャ(Window > Settings/Preferences > Plug-in Manager))を使用してプラグインをロードします。
プラグインがロードされている場合、メイン メニューバーに PhysX メニューが表示されます。
Maya の基本設定(Preferecces)で 作業単位(Working Units)をメートル(meter)に変更します。
(物理エンジンで行った方が良い結果が得られます。)
シーンで時間範囲を拡張します。
これにより、後で物理をテストする余地ができます。
ヒップ/骨盤はリジッド ボディを追加する必要がある最初のボーンです。
ヒップ ジョイントを選択し、PhysX > Rigid Bodies を択してダイナミック リジッド ボディを作成します。
既定では、PhysX は現在のジョイントにアタッチされた各ジョイントのシェイプを作成します。
簡単な物理のみが必要であるため、余分なジョイントを削除して 1 つのみを保持します。
次のようにリジッド ボディのシェイプを調整して、ジオメトリに近づけます。
アウトライナ(Outliner)でシェイプを選択し、アトリビュート エディタ(Attribute Editor)でシェイプ ノードのアトリビュートを見つけます。
目的に合ったシェイプ タイプ(Shape Type)を選択します。ただし、凸面ハル(Convex Hull)と三角メッシュ(Triangle Mesh)は避けます。
ジオメトリにフィットするようにシェイプのサイズを調整します。(この例では大きくします。)
シェイプ トランスフォームを使用して、シェイプをオフセットし、ボディの中心に近くすることができます。
シェイプおよびスキン ジオメトリへのフィット具合が問題なくなるまで続けます。
PhysX > Play/Stop Simulation を選択します。
キャラクタが床に落下します。
PhysX > Rewind Simulation を選択して編集を再開します。
ヒップのリジッド ボディを選択し、アトリビュート エディタ(Attribute Editor)を使用して Simulation Type を Kinematic に切り替えます。
これは、他のリジッド ボディでの作業時に動くのを防ぐためです。
脊椎のボーンを選択し、リジッド ボディを追加します。
作成された余分なシェイプを削除し(1 つのみ保持)、胴体のジオメトリを表すように配置します。たとえば、次のようになります。
(オプション) Physx > Play Simulation を選択した場合、キャラクタは 2 つに分割されます。
Simulation Type が Kinematic に設定され、胴体が地面に落下するため、ヒップ セクションは(予想どおり)移動しません。
次に、2 つのリジッド ボディ間のコンストレイントが必要です。
ヒップのリジッド ボディを選択し、[Ctrl]キーを押しながらクリックして、胴体のリジッド ボディを選択します。
(選択する順序は重要です。ここでは胴体をヒップに拘束します。逆ではありません)。
PhysX > Constraints > Create constraint を選択します。
アウトライナ(Outliner)でコンストレイントを選択し、次に アトリビュート エディタ(Attribute Editor)で半径スケール(Radius Scale)を増やします。
シーン ビューで、コンストレイント制限の白い表示を確認できます。
コンストレイントをテストするには、物理シミュレーション(Physx > Play Simulation)を起動します。
胴体がヒップに拘束されていることがわかります。ただし、コンストレイントは調整できます。
物理的な観点から意味をなすように配置します(接続された 2 つのボディの間のどこか、一般にはジョイント(足首、膝、腕)の位置)。
まず Swing アトリビュートから始めて、選択したジョイントの限度を調整します。
ツイスト アトリビュートについては、ほとんどの場合、最初のラグドール バージョンに対して Twist Freedom Mode を Locked に設定することをお勧めします。
最初のバージョンの使用後に、別のツイスト設定を試すことができます。
シミュレーションを再生し、制限のツイークを停止し、結果に満足できるまで繰り返します。
胴体のリジッド ボディを選択し、Simulation Type を Kinemat に設定します。
上記と同じプロセスを引き続き使用して、追加の脊椎ジョイント、頭、腕および脚で、スケルトン階層の上位に移動します。
一部のケースでは、PhysX でリジッド ボディを作成できないことを示すエラーが表示されます。たとえば、次のようになります。
==============in nxPerformDynamics, cmd = nxRigidBody -active -m 1 -den 1 -omd 0 -adp 0 -dp 0 -sf 0.2 -df 0.2 -b 0.6 -iv 0 0 0 -iav 0 0 0 There an existing rigid body: |master|Reference|Hips|HipsRigidBody1. Command will not be executed. If mesh is in a group, use rigidbody to add a physics shape.
このエラーは、キャラクタ階層の下位にあるジョイントに作成する前に、上位にあるジョイントにリジッド ボディを作成しようとする場合に発生することがあります。(たとえば、脊椎に作成する前に、ヒップに作成した場合です。)
この問題を避けるには、まず階層の下位にリジッド ボディを作成してから、上位に対して作成します。
各リジッド ボディおよびコンストレイントに問題がなければ、Stingray に書き出す準備を行うことができます。
各リジッド ボディを選択し、Simulation Type を Dynamic に設定し直します。
シミュレーションを再生します(Physx > Play Simulation)。
キャラクタを適切に折りたたむ必要があります。
ファイル > すべて書き出し(File > Export All) > [ ]を選択して FBX 書き出しオプション(FBX Export Options)を開き、プリセットの編集(Edit preset)をクリックします。
書き出しプリセットを編集(Edit export preset)オプションが表示され、書き出されたファイルで FBX オプションを変更できます。
左側のパネルで下方にスクロールし、詳細オプション(Advanced Options)の単位(UNITS)を表示します。変換先のファイル単位(File units converted to)を選択して右クリックし、有効化(Enable)を選択します。
有効になったら、変換先のファイル単位(File units converted to)をセンチメートル(Centimeters)に設定します。
プリセットを保存し、OK、閉じる(Close)の順にクリックします。
書き出しオプションに戻り、APEX/PhysX ファイル形式を選択します。
ファイル タイプ特有(File Type Specific)の書き出しオプションで、Asset File Format を APX に設定して XML として書き出します。
Stingray プロジェクト ディレクトリに移動し、ラグドール ファイルを Stingray プロジェクトの既存のキャラクタ ユニット ファイルと同じ名前で同じ場所に保存します。
たとえば、キャラクタ ユニットが Guy.unit の場合、物理ファイルに Guy.xml という名前を付けます。
Stingray の Asset Browser でキャラクタ ユニットを右クリックして、Re-import をクリックします。
前の手順で保存した PhysX ファイルが、ユニット ファイルの横に表示されます。
キャラクタ ユニットをダブルクリックして、Unit Editor を起動します。
PhysX シーンからのすべてのリジッド ボディが、左に一覧表示されます。
groundPlane オブジェクトを選択し(書き出し時に PhysX によって追加された)、Properties パネルを使用して無効にします。(Enabled オプションをオフにします。)
キャラクタの倒壊を見るには、レベルにキャラクタ ユニットを配置して、Play を押します。
ユニットがスポーンされてすぐには、ラグドールをアクティブにしたくないでしょう。リジッド ボディを無効にしてみましょう。
Unit Editor で各リジッド ボディを選択し、Properties パネルで Enabled オプションをオフにします。
Asset Browser でユニットを右クリックし、Create Animation Controller を選択します。
Anim Controller エディタで Ragdolls を右クリックし、Add New Ragdoll を選択してこのユニットのラグドールを定義します。
Ragdoll Bones プロパティで、青い矢印をクリックして、各リジッド ボディを希望のカテゴリに移動します。(既定では、すべてが Dynamic として定義されています)。
Ignored(アクティブでなく、シーンに表示されません)
Dynamic(物理的に駆動)
Kinematic(アニメーション)
groundPlane を選択して Ignored に移動します。
Layers を右クリックし、Add Layer を選択して通常のアニメーション状態を追加し(レイヤを選択し、右クリックして Add New State > Clip State)、General 設定でレイヤの通常のアニメーション状態を選択します。
レイヤを右クリックして Add New State > Add Ragdoll state を選択し、General 設定で以前に作成したラグドールの定義を指定します。
イベントとトランジションを追加し、ラグドール状態に入ったりラグドール状態から抜けたりします。
「アニメーション コントローラをセットアップする」も参照してください。
アニメーション コントローラとコンパイルを保存します。
これで、必要に応じて、ラグドールのオンとオフを切り替えることができます。
部分的なラグドールにより、物理で駆動される四肢を作成できますが、ボディの他の部分はアニメーションで駆動します。この例では、左腕でのみラグドールをアクティブにする方法を示します。
Skeleton Editor で、たとえば左腕を分離する BlendMask を作成します。
Anim Controller エディタで、以下になるようにラグドール定義を作成します(Ragdolls > Add New Ragdoll)。
左腕が Dynamic アクター(物理を使用)
Spine4 が Kinematic アクター(左腕が spine4 に接続されているため必須。されていない場合、腕は地面に落下します)。
他のボディはすべて Ignored
Anim Controller エディタで、部分的なラグドールのみのレイヤを作成し、既定の空白の状態を付与します(新しいレイヤを右クリックして、Add New State > Empty State を選択)。
重要: 部分的なラグドールには専用のレイヤが必要です。
移行するラグドールの状態を追加します。
ブレンド マスクとラグドール定義を指定します。
左腕でのみラグドールをアクティブにすることができます。