Biped の群集

Biped の群集は群集シミュレーションの特別なケースで、脚を持つ動物の複雑な動作を表現するために必要となります。Biped の動作は、複雑なダイナミクスと正確な足の IK コンストレイントを表示します。例として、代理オブジェクトのモーション パラメータから計算された滑らかなカーブの軌道があります。ただし、鳥、魚、昆虫、蛇には適していますが、二足動物の細かい動きをアニメートするには不十分です。このため、群集のいくつかの機能は、Biped の特殊なニーズに的を絞っています。

必要な表現を作成するためには、複数の基本的な Biped の動作を組み合わせて、アニメートされるモーション クリップを作成します。つまり、Biped/群集のシミュレーションを実行するときに、代理オブジェクトは Biped のモーションに影響しません。代理オブジェクトは、モーション フロー グラフで利用できるクリップを使って、実現する目標を設定します。アニメータはこの方法(モーション統合)を使って、手のアニメーションを使用したり、群集のメンバの動作を表現する一連のクリップを作成したモーション キャプチャを採用することで、細かい動作を正確に制御できます。

たとえば、街の通りを走るマラソン走者の一群をアニメートする場合、歩く、走る、ジョギングする、休憩する、水を飲む、応援するなど、さまざまな種類のモーション クリップが必要となります。実際は、マラソン競技で必要な各動作は、1 つのクリップで表せる可能性があります。ただし、いくつかのクリップを寄せ集めただけのモーションでは、不十分です。モーションの連続性や、任意のモーション クリップからトランジションが可能なモーションを考慮する必要があります。任意のモーション クリップからトランジションが可能なのはどのモーションなのかを考えます。

このプロセスを十分に理解するには、このトピックを学習し、以下の群集シミュレーションで Biped を使用するの手順に従ってください。

モーション フロー ネットワークと使用できるスクリプト

Biped のモーション フロー機能には、個別のモーションを相互に適合させて 1 つの滑らかなアニメーションにする方法を定義する仕組みがあります。実際には、モーション フロー ネットワークでは、どのモーションが他のモーションの後に続くかが表示されます。モーション フロー ネットワークが定義されると、ネットワークを通し別のパスに従うことで、広範囲にアニメートされた動作が可能になります。Biped では、ネットワークを介したパスはモーション フロー スクリプトと呼ばれます。

たとえば、次に挙げるのは、モーション フロー ネットワークです。

これは、可能なモーションの簡単なネットワークです。キャラクタが実行できる動作は、スタート、停止、90 度の角度で左右に向く、(walk_L90 および walk_R90)、回れ右だけです(walk_180)。ただし、より自然な群集の動作では、モーション フロー ネットワークを拡大して、45 度で増加する回転や、同じ方向を向きながら別の方向に移動、ぶらぶらする動作、異なる速度での動作など、より短く、細かい動作が必要になります。Biped モーション ライブラリには、試用できる広範囲なクリップのリストがあります。

ヒント: Biped の足跡ベンド操作を直線モーション クリップに適用することで、わずかに右や左に曲がるモーション クリップを作成できます。クリップがモーション キャプチャされている場合、読込み中に、ベンド操作に備えて足跡の抽出を使用する必要があります。わずかに回転するクリップを追加することで、最初に Biped の群集のシミュレーションに細かい修正を加えることができ、目標の位置より正確に設定することができます。

最も適切に機能するモーション フロー グラフに、微調整されたトランジションが組み込まれます。モーション フロー トランジションを確認するときは、グラフを作成する(クリップをグラフに追加し、必要なトランジションを追加し、そのトランジションを最適化する)ときに、テスト スクリプトを作成することをお勧めします。まず、トランジションを適切に最適化できれば、通常は滑らかなトランジションを作成できます。次に、そのトランジションを使用する新しいスクリプトを作成し、そのスクリプトを使用して足がスライドしなくなるまでモーション フローを調整します。

共有モーション フロー ネットワーク機能を利用すると、多数の Biped が 1 つのモーション フロー ネットワークを使用できます。これにより、ご使用のコンピュータのメモリに大きな負担をかけることなく、モーション フロー ネットワークを大きくすることができます。

代理オブジェクト主導型の動作目標

Biped を群集システムの代理オブジェクトに関係付けることで Biped に動作目標を与え、代理オブジェクトに動作を割り当てることができます。

たとえば、上で示したサンプルでの、Biped の代理オブジェクトの動作目標は次のとおりです。

Biped の群集のシミュレーションでは、群集の各 Biped のメンバに最も適したモーション フロー スクリプトが計算され、関係付けられた代理オブジェクトの動作目標を満たします。つまり、以下の処理が実行されます。

したがってサンプルでは、シミュレーションは常に、Biped の代理オブジェクトが球に向かう最も適切な歩行クリップをネットワークから選択します。 各 Biped のスクリプトは、群集が計算するように展開されます。これは、群集の計算方法の選択が、次に最適な Biped のクリップがその Biped のアクティブなクリップに制限されているという点で、リアル タイムのゲーム エンジンに似ています。

Biped 群集の回避、優先、バックトラック

群集の Biped は常にモーション フロー スクリプトに従うため、Biped の回避動作は異なります。通常の代理オブジェクトとは異なり、Biped の代理オブジェクトはモーション フロー スクリプト パスに沿ってしか動けないため、衝突が起きた場合、character studio は現在のスクリプトの前回のクリップへバックトラックして別のパスを見つけます。複雑な群集の相互作用がある場合、1 つのバックトラックでは不十分なので、これには多少時間がかかります。計算ではバックトラックのクリップからすべてのパスが調査され、失敗すると、前回のクリップをバックトラックし、それが解決されるまで続きます。

Biped の現在のスクリプトが次のような場合を例に挙げます。

walk_start
walk 
walk_L90

衝突が walk_L90 クリップの間に起こり、Biped は walk クリップの終わりにバックトラックし、失敗した左回りの代わりに別のクリップを試します。それが失敗したら、次に適切な選択が実行されます。

ヒント: 切迫した状況で衝突を避けるには、停止モーションが効果的であるため、モーションの停止とさまよいをモーション フロー ネットワークに含めると、過剰なバックトラックを防ぐことができます。一般的に、速度と方向の種類が多いほど、バックトラック機能が解決策を見つける速度が速くなります。

バックトラックを計算で管理するために、Biped の群集メンバは優先順位に従い一度に計算されます。このため、群集の相互作用はアニメーションに追加されるそれぞれの連続した Biped で累積されます。つまり、各 Biped は完全なアニメーションが計算される順番を待ち、前に計算された Biped を避けることになります。したがって、最も優先度の低い Biped は、より高い優先度を持つすべての Biped を避けて通らなければならないため、衝突に合う回数が最も高くなります。

Biped 群集のキャラクタを準備する

Biped 群集のシミュレーションを作成するには、複数の Biped が必要になります。群集シミュレーションは、クリップを Biped に適用するときに、各 Biped の脚の長さを考慮します。このため、Biped が最初から適切なサイズであれば、シミュレーションがより正確になります。

最も簡単なワークフローは、次のようになります。

これらの設定を行うと、キャラクタを群集シーンに統合しやすくなります。キャラクタの合成が完了すると、メッシュ自体は非表示になり、システムのパフォーマンスが向上します。

Biped 群集のモーションを準備する

Biped 群集のシミュレーションで使用するクリップは、3ds Max に含まれるサンプルからロードするか、モーション キャプチャ ファイルから読み込むか、または新規に作成します。

Biped 群集のシミュレーションを作成するときには、モーション フロー ネットワーク内のクリップ間のトランジションについて整合性を保つことが重要になってきます。1 つの Biped のトランジションを作成するときには、モーション フロー スクリプトを作成した後で、各トランジションを簡単に訂正できます。群集のトランジションの場合は、シミュレーションの作成が完了した後に各 Biped のトランジションを訂正しようとすると、膨大な時間がかかります。シミュレーションの計算を開始する前に、トランジションが適切であることを確認する方が、はるかに効率的です。

この処理を簡単に行う方法の 1 つとして、各トランジションに含まれるフレーム数(10、15 など)がすべて同じになるように、すべてのモーションを設定する方法があります。このように設定してから、モーションの長さに合わせてトランジションを最適化すると、すべてまたはほとんどのトランジションが問題なく動作します。

トランジションを確認するには、グラフ内のいくつかのトランジションを使用して、1 つの Biped 用の簡単なスクリプトを作成します。モーションを確認しながら、トランジションが適切に表示されるまで個別に調整します。この方法だけで問題のあるトランジションをすべて把握できませんが、ほとんどは把握できます。問題のあるトランジションとは、歩行しなければならないときに足がスキップまたはホップするなど、トランジション時に予期しない動作が発生するトランジションのことです。「トランジションのカスタマイズ」を参照してください。

Biped 群集のシミュレーションを計算するときには、最初の何回かについては、問題のあるトランジションを最初の計算で見過ごしてないかどうかを再度確認してください。何度かシミュレーションを実行すると、問題のあるトランジションをすべてまたはほとんど検出できる可能性が高くなります。

制限事項

群集システムの一部の機能は、Biped の群集を操作できるように設計されていません。シミュレーションで Biped を使用するときに、以下の動作とパラメータは群集の動作に効果はありません。

手順: 群集シミュレーションで Biped を使用する

以下の手順は、モーション フロー グラフを作成して保存し、複数の Biped を代理オブジェクトに割り当てて、Biped 間でモーション フロー グラフを共有するための基本的なステップであり、これにより代理オブジェクトに割り当てられた動作に基づき、各 Biped に対する個別のモーション フロー スクリプトが自動的に作成されます。

注: これらの手順では、ユーザが足跡およびキーフレームの方法で Biped をアニメートし、アニメーションを BIP ファイルで保存する方法を理解していることを前提としています。共有モーション フローを使用する準備として、開始、歩行、右に曲がる、左に曲がる、停止、待機など、さまざまな Biped のモーションを作成し、保存する必要があります。「BIP アニメーションのロードと保存」を参照してください。

まず、適切なモーション フロー グラフを作成してファイルに保存します。

共有モーション フローを作成するには:

  1. Biped を追加し、 [モーション](Motion)パネルに移動します。
  2. [Biped]ロールアウトで、 ([モーション フロー モード](Motion Flow Mode))をクリックします。
  3. [モーション フロー](Motion Flow)ロールアウトの ([グラフを表示](Show Graph))をクリックします。
  4. [モーション フロー グラフ](Motion Flow Graph)ツールバーで、 ([複数のクリップを作成](Create Multiple Clips))をクリックします。

    これにより、[開く](Open)ダイアログ ボックスが表示され、ここで同じディレクトリから複数の BIP ファイルを選択して、モーション フロー グラフに同時に追加することができます。連続した複数のファイルを選択するには、クリックと Shift+クリックを使用し、連続していないファイルを選択するには Ctrl+クリックを使用します。

  5. モーションの統合に使用する BIP ファイルを選択し、[OK]をクリックします。

    ファイルは、クリップとしてグラフに追加されます。各クリップには、そのクリップが派生したファイルの名前が自動的に付けられます。

    注: 最適な結果を得るには、特に Biped が異なる角度で曲がるシミュレーションの場合は、異なる回転クリップをできるだけ多数使用します。最小セットアップには、45 度、90 度、135 度、180 度の右に曲がる歩行および左に曲がる歩行がそれぞれ含まれています。

    次に、クリップ間にトランジションを追加して、ある動作の前後に続く動作を character studio に通知します。これを手動で行うとより詳細に制御できますが、初期のテストでは、トランジションを自動的に追加して最適化することにより、時間を節約できます。

  6. (すべてのトランジションを作成)をクリックします。各モーションの最初の 30 パーセントと最後の 30 パーセントを使用して、トランジションが作成されます。

    グラフに、各クリップ間およびクリップ自身を指す矢印が表示されます。必要に応じて、停止クリップおよび開始クリップからそれ自身へのトランジションなど、不要なトランジションを削除します。

    また、 ([トランジションを作成](Create Transition))を使用して、カスタム グラフをセットアップすることもできます。

  7. トランジションを 最適化します。「[トランジションの最適化](Transition Optimization)ダイアログ ボックス」を参照してください。

    群集でシミュレーションを計算すると、このグラフに基づいて Biped に対するモーション フロー スクリプトが生成されます。この場合のようにグラフに複数のクリップがあると、ランダム開始クリップとして指定した 1 つ以上のクリップから、スクリプトに対する開始クリップが選択されます。

    続行する前にトランジションの整合性を確認する場合は、ここで確認してください。「トランジションのカスタマイズ」を参照してください。

  8. ([ランダム スタート クリップを選択](Select Random Start Clips))をクリックしてから、クリップをクリックします。

    これにより、スクリプトをこのクリップから開始することが指定され、このクリップが選択される確率の 100 パーセント(既定値)が使用されます。

    さまざまな Biped を異なるクリップで開始させる場合は、Ctrl キーを押しながらクリックすることにより、ランダムな開始クリップを複数選択します。すべてのクリップに対して[ランダム スタートの確率](Random Start Probability)を既定値の 100 に設定すると、各 Biped のスクリプトに対して、開始クリップがこれらのクリップからランダムに選択されます。

    特定のクリップが開始する確率を変更するには、クリップを右クリックして[ランダム スタートの確率](Random Start Probability)設定を変更します。たとえば、各 Biped のスクリプトをクリップ A、B、または C のいずれかで開始するとします。クリップ A をクリップ B や C の 2 倍の確率で選択されるようにする場合は、[ランダムな開始クリップ](Random Start Clips)ツールを使用し、まずクリップ A、その後にCtrl を押しながらクリップ B と C をクリックします。各クリップを順番に右クリックして、[ランダム スタートの確率](Random Start Probability)をクリップ A は 60 に、クリップ B と C は 30 に設定します。

    注: 確率の値は、任意に設定できます。重要なのは、比率を正しく設定することです。たとえば、値を 80/40/40 または 20/10/10 のどちらに設定しても、同じ結果が得られます。
    注: MFE ファイルを[共有モーション フロー](Shared Motion Flow)ダイアログ ボックスにロードした後、モーション フロー グラフでランダムな開始クリップおよび開始の確率を設定したり変更したりすることができます。この手順については、後ほど説明します。
    注: 群集シミュレーションを計算した後など、Biped にモーション フロー スクリプトが既に存在する場合は、後続の計算にスクリプトの最初のクリップを使用することができます。
  9. [モーション フロー](Motion Flow)ロールアウトの ([ファイルを保存](Save File))をクリックし、グラフを MFE 形式で保存します。

    群集シミュレーションで Biped を使用する次の手順は、シミュレーションの作成です。

群集シミュレーションを設定するには:

  1. 3ds Max をリセットします。
  2. 任意の数の代理オブジェクトの群集シミュレーションを、作成する群集シーンに合った動作を使用してセットアップします。最初は Biped を使用しないで、代理オブジェクトだけを操作して、群集メンバのモーションの概要を設定します。
    ヒント: 最初にモーションの統合を開始する際は、8 個程度の代理オブジェクトを使用する比較的小さい群集を使用します。
  3. シミュレーションを計算し、希望のモーションが得られるよう必要に応じて設定を調整します。
  4. Biped およびキャラクタをシーンに合成し、代理オブジェクトの[モーション パラメータ](Motion Parameters)ロールアウト [Biped]領域設定を使用して、各代理オブジェクトを異なる Biped に関係付けます。

    Biped の重心(COM)オブジェクト(通常 Bip0# という名前の付いたオブジェクト)を選択しなければなりません。アクティブなビューポートで COM 上にマウス カーソルを移動すると、カーソルが十字に変わります。

  5. 各代理オブジェクトに対して[Biped を使用](Use Biped)をオンにします。
    ヒント: 複数の代理オブジェクトを一度に Biped とリンクするには、群集ヘルパー オブジェクトを選択してから、[セットアップ](Setup)ロールアウト ([Biped/代理オブジェクトの関係付け](Biped/Delegate Associations))をクリックします。このダイアログ ボックスを使用して代理オブジェクトと Biped を接続し、各代理オブジェクトの[Biped を使用](Use Biped)をオンにします。「オブジェクトを代理オブジェクトにリンクする」を参照してください。
  6. ランダム スタート クリップを最初のクリップとして使用するように Biped と代理オブジェクトを設定します。[複数の代理オブジェクトを編集](Edit Multiple Delegates)ダイアログ ボックスを使用すると、複数の代理オブジェクトに同時にこれを設定できます。

共有モーション フローを適用するには:

    [共有モーション フロー](Shared Motion Flow)機能を使用して、保存したモーション フロー グラフを Biped に適用します。

  1. 任意の Biped を 選択し、 [モーション](Motion)パネルに移動します。
  2. [Biped]ロールアウトで、 ([モーション フロー モード](Motion Flow Mode))をクリックします。
  3. [モーション フロー](Motion Flow)ロールアウトの ([共有モーション フロー](Shared Motion Flow))をクリックします。
  4. [共有モーション フロー](Shared Motion Flow)ダイアログ ボックスで[新規](New)ボタンをクリックします。

    これにより新しい共有モーション フローが作成され、既定値の名前が割り当てられます。必要に応じて名前を変更できます。

    モーション ファイルをロードします。

  5. [パラメータ](Parameters)領域 [.mfe をロード](Load .mfe)ボタンをクリックし、[開く](Open)ダイアログ ボックスを使用してモーション フロー ファイルをロードします。一般的には、これは上記の手順で保存したファイルです。

    このモーション フローを共有する Biped を指定します。

  6. [パラメータ](Parameters)領域で[追加](Add)ボタンをクリックし、[選択](Select)ダイアログ ボックスを使って共有モーション フローを共有する Biped を指定します。

    ユーザに便利なように、[選択](Select)ダイアログ ボックスにはシーンの Biped の重心オブジェクトのみが表示されます。

    [選択](Select)ボタンをクリックすると、ダイアログ ボックスの[このモーション フローを共有している Biped](Bipeds Sharing this Motion Flow)の下のリストに Biped が表示されます。

  7. モーション フローを正しく共有するには、Biped の脚のスケールが同じでなければなりません。最初の Biped とスケールが異なる Biped がある場合、警告が表示され、この警告ボックスで[OK]ボタンをクリックすると、リストにスケールが間違っている Biped であることが示されます。この時点で、リスト内の Biped の 1 つを選択して[共有モーション フローのスケールを設定](Set Shared Motion Flow Scale)ボタンをクリックし、この Biped のスケールに他の Biped のスケールを合わせることができます。または、[間違ったスケールをリセット](Reset Wrong Scales)ボタンのいずれかをクリックし、スケールが間違っている Biped またはその脚をスケールし直すことができます。続行する前に、必ずいずれかの方法を実行してください。

    [共有モーション フロー](Shared Motion Flow)ダイアログ ボックスでもう 1 つ必要な手順として、モーション フローを共有するすべての Biped に対してモーション フロー モードをオンにする必要があります。このダイアログ ボックスの特殊なボタンを使用すると、この操作を 1 つの手順で行うことができます。

  8. ([複数の Biped をモーション フローに入れる](Put Multiple Bipeds In Motion Flow))をクリックします。

    これにより、このモーション フローを共有するすべての Biped に対して、モーション フロー モードがオンになります。

  9. [OK]ボタンをクリックしてダイアログ ボックスを終了します。

代理オブジェクトのオフセットを指定してシミュレーションをテストするには:

    代理オブジェクトで制御された Biped のアニメーションを、モーション フロー スクリプトの最初のクリップ、またはランダム モーション クリップで開始することができます。ただし、[共有モーション フロー](Shared Motion Flow)ダイアログ ボックスにモーション フロー ファイルをロードすると、ファイル内のスクリプトは無視されます。そのため、計算していない群集シミュレーションにあり、モーション フローを使用する代理オブジェクトに関連付けられた Biped にはスクリプトは存在せず、モーション フローで設定したランダムな開始クリップを使用することを指定しなければなりません。これは、代理オブジェクトで行います。

  1. [複数の代理オブジェクトを編集](Edit Multiple Delegates)ダイアログ ボックス [Biped]領域で、すべての代理オブジェクトに対して[ランダムな開始クリップ](Random Start Clip)を指定します。

    シミュレーションを計算します。

  2. 群集オブジェクトを 選択し、 [修正](Modify)パネルに移動します。
  3. [計算](Solve)ロールアウトで、[計算を終了](End Solve)フレームを希望の値に設定します。
  4. [計算](Solve)をクリックして、シミュレーションを実行します。

    シミュレーションが計算されます。

  5. フレーム スライダをドラッグするか、アニメーションを再生して、計算されたシミュレーションを確認します。

シミュレーションを微調整するには:

    通常は、調整が必要です。動作、モーション フローのセットアップ、代理オブジェクトのパラメータを変更するなど、問題を解決する方法は複数あります。

    Biped が衝突したりお互いに貫通している場合は、群集の優先順位およびバックトラックの機能を利用することができます。ほとんどの群集またはBiped のシミュレーションには、この 2 つのオプションを使用することを強くお勧めします。

  1. 代理オブジェクトに異なる優先順位を割り当てるには、[優先順位](Priority)ロールアウトのコントロールを使用します。一般的には、群集の先頭に位置する代理オブジェクトの優先順位を、最も高く設定します(つまり、[優先順位](Priority)設定の値を最も小さくする)。
  2. [計算](Solve)パネル [Biped]領域で、[Biped/代理オブジェクトのみ](Biped/Delegates Only)をオンにし、[優先順位を使用](Use Priorities)、[バックトラック](Backtracking)の順にオンにします。既に計算を実行している場合は、[計算前にキーを削除](Delete Keys Before Solve)もオンにすることをお勧めします。

    シミュレーションの計算を実行すると、最も優先順位の低い Biped または代理オブジェクトから、Biped または代理オブジェクトが 1 組ずつ計算されます。Biped または代理オブジェクトの計算は、衝突があるかどうかを調べて続けられ、衝突が起こった場合は前のクリップの最後に戻り、必要に応じて前のクリップに戻って、モーション フロー グラフで別のパスが試されます。この方法は時間がかかるので、[バックトラック](Backtracking)は既定値ではオフになっていますが、Biped が衝突した場合は、これが最良の問題解決方法です。