Biped の群集は群集シミュレーションの特別なケースで、脚を持つ動物の複雑な動作を表現するために必要となります。Biped の動作は、複雑なダイナミクスと正確な足の IK コンストレイントを表示します。例として、代理オブジェクトのモーション パラメータから計算された滑らかなカーブの軌道があります。ただし、鳥、魚、昆虫、蛇には適していますが、二足動物の細かい動きをアニメートするには不十分です。このため、群集のいくつかの機能は、Biped の特殊なニーズに的を絞っています。
必要な表現を作成するためには、複数の基本的な Biped の動作を組み合わせて、アニメートされるモーション クリップを作成します。つまり、Biped/群集のシミュレーションを実行するときに、代理オブジェクトは Biped のモーションに影響しません。代理オブジェクトは、モーション フロー グラフで利用できるクリップを使って、実現する目標を設定します。アニメータはこの方法(モーション統合)を使って、手のアニメーションを使用したり、群集のメンバの動作を表現する一連のクリップを作成したモーション キャプチャを採用することで、細かい動作を正確に制御できます。
たとえば、街の通りを走るマラソン走者の一群をアニメートする場合、歩く、走る、ジョギングする、休憩する、水を飲む、応援するなど、さまざまな種類のモーション クリップが必要となります。実際は、マラソン競技で必要な各動作は、1 つのクリップで表せる可能性があります。ただし、いくつかのクリップを寄せ集めただけのモーションでは、不十分です。モーションの連続性や、任意のモーション クリップからトランジションが可能なモーションを考慮する必要があります。任意のモーション クリップからトランジションが可能なのはどのモーションなのかを考えます。
このプロセスを十分に理解するには、このトピックを学習し、以下の群集シミュレーションで Biped を使用するの手順に従ってください。
Biped のモーション フロー機能には、個別のモーションを相互に適合させて 1 つの滑らかなアニメーションにする方法を定義する仕組みがあります。実際には、モーション フロー ネットワークでは、どのモーションが他のモーションの後に続くかが表示されます。モーション フロー ネットワークが定義されると、ネットワークを通し別のパスに従うことで、広範囲にアニメートされた動作が可能になります。Biped では、ネットワークを介したパスはモーション フロー スクリプトと呼ばれます。
たとえば、次に挙げるのは、モーション フロー ネットワークです。
これは、可能なモーションの簡単なネットワークです。キャラクタが実行できる動作は、スタート、停止、90 度の角度で左右に向く、(walk_L90 および walk_R90)、回れ右だけです(walk_180)。ただし、より自然な群集の動作では、モーション フロー ネットワークを拡大して、45 度で増加する回転や、同じ方向を向きながら別の方向に移動、ぶらぶらする動作、異なる速度での動作など、より短く、細かい動作が必要になります。Biped モーション ライブラリには、試用できる広範囲なクリップのリストがあります。
最も適切に機能するモーション フロー グラフに、微調整されたトランジションが組み込まれます。モーション フロー トランジションを確認するときは、グラフを作成する(クリップをグラフに追加し、必要なトランジションを追加し、そのトランジションを最適化する)ときに、テスト スクリプトを作成することをお勧めします。まず、トランジションを適切に最適化できれば、通常は滑らかなトランジションを作成できます。次に、そのトランジションを使用する新しいスクリプトを作成し、そのスクリプトを使用して足がスライドしなくなるまでモーション フローを調整します。
共有モーション フロー ネットワーク機能を利用すると、多数の Biped が 1 つのモーション フロー ネットワークを使用できます。これにより、ご使用のコンピュータのメモリに大きな負担をかけることなく、モーション フロー ネットワークを大きくすることができます。
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 群集のシミュレーションで使用するクリップは、3ds Max に含まれるサンプルからロードするか、モーション キャプチャ ファイルから読み込むか、または新規に作成します。
Biped 群集のシミュレーションを作成するときには、モーション フロー ネットワーク内のクリップ間のトランジションについて整合性を保つことが重要になってきます。1 つの Biped のトランジションを作成するときには、モーション フロー スクリプトを作成した後で、各トランジションを簡単に訂正できます。群集のトランジションの場合は、シミュレーションの作成が完了した後に各 Biped のトランジションを訂正しようとすると、膨大な時間がかかります。シミュレーションの計算を開始する前に、トランジションが適切であることを確認する方が、はるかに効率的です。
この処理を簡単に行う方法の 1 つとして、各トランジションに含まれるフレーム数(10、15 など)がすべて同じになるように、すべてのモーションを設定する方法があります。このように設定してから、モーションの長さに合わせてトランジションを最適化すると、すべてまたはほとんどのトランジションが問題なく動作します。
トランジションを確認するには、グラフ内のいくつかのトランジションを使用して、1 つの Biped 用の簡単なスクリプトを作成します。モーションを確認しながら、トランジションが適切に表示されるまで個別に調整します。この方法だけで問題のあるトランジションをすべて把握できませんが、ほとんどは把握できます。問題のあるトランジションとは、歩行しなければならないときに足がスキップまたはホップするなど、トランジション時に予期しない動作が発生するトランジションのことです。「トランジションのカスタマイズ」を参照してください。
Biped 群集のシミュレーションを計算するときには、最初の何回かについては、問題のあるトランジションを最初の計算で見過ごしてないかどうかを再度確認してください。何度かシミュレーションを実行すると、問題のあるトランジションをすべてまたはほとんど検出できる可能性が高くなります。
群集システムの一部の機能は、Biped の群集を操作できるように設計されていません。シミュレーションで Biped を使用するときに、以下の動作とパラメータは群集の動作に効果はありません。
以下の手順は、モーション フロー グラフを作成して保存し、複数の Biped を代理オブジェクトに割り当てて、Biped 間でモーション フロー グラフを共有するための基本的なステップであり、これにより代理オブジェクトに割り当てられた動作に基づき、各 Biped に対する個別のモーション フロー スクリプトが自動的に作成されます。
まず、適切なモーション フロー グラフを作成してファイルに保存します。
共有モーション フローを作成するには:
これにより、[開く](Open)ダイアログ ボックスが表示され、ここで同じディレクトリから複数の BIP ファイルを選択して、モーション フロー グラフに同時に追加することができます。連続した複数のファイルを選択するには、クリックと Shift+クリックを使用し、連続していないファイルを選択するには Ctrl+クリックを使用します。
ファイルは、クリップとしてグラフに追加されます。各クリップには、そのクリップが派生したファイルの名前が自動的に付けられます。
次に、クリップ間にトランジションを追加して、ある動作の前後に続く動作を character studio に通知します。これを手動で行うとより詳細に制御できますが、初期のテストでは、トランジションを自動的に追加して最適化することにより、時間を節約できます。
グラフに、各クリップ間およびクリップ自身を指す矢印が表示されます。必要に応じて、停止クリップおよび開始クリップからそれ自身へのトランジションなど、不要なトランジションを削除します。
また、 ([トランジションを作成](Create Transition))を使用して、カスタム グラフをセットアップすることもできます。
群集でシミュレーションを計算すると、このグラフに基づいて Biped に対するモーション フロー スクリプトが生成されます。この場合のようにグラフに複数のクリップがあると、ランダム開始クリップとして指定した 1 つ以上のクリップから、スクリプトに対する開始クリップが選択されます。
続行する前にトランジションの整合性を確認する場合は、ここで確認してください。「トランジションのカスタマイズ」を参照してください。
これにより、スクリプトをこのクリップから開始することが指定され、このクリップが選択される確率の 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 に設定します。
群集シミュレーションで Biped を使用する次の手順は、シミュレーションの作成です。
群集シミュレーションを設定するには:
Biped の重心(COM)オブジェクト(通常 Bip0# という名前の付いたオブジェクト)を選択しなければなりません。アクティブなビューポートで COM 上にマウス カーソルを移動すると、カーソルが十字に変わります。
共有モーション フローを適用するには:
[共有モーション フロー](Shared Motion Flow)機能を使用して、保存したモーション フロー グラフを Biped に適用します。
これにより新しい共有モーション フローが作成され、既定値の名前が割り当てられます。必要に応じて名前を変更できます。
モーション ファイルをロードします。
このモーション フローを共有する Biped を指定します。
ユーザに便利なように、[選択](Select)ダイアログ ボックスにはシーンの Biped の重心オブジェクトのみが表示されます。
[選択](Select)ボタンをクリックすると、ダイアログ ボックスの[このモーション フローを共有している Biped](Bipeds Sharing this Motion Flow)の下のリストに Biped が表示されます。
[共有モーション フロー](Shared Motion Flow)ダイアログ ボックスでもう 1 つ必要な手順として、モーション フローを共有するすべての Biped に対してモーション フロー モードをオンにする必要があります。このダイアログ ボックスの特殊なボタンを使用すると、この操作を 1 つの手順で行うことができます。
これにより、このモーション フローを共有するすべての Biped に対して、モーション フロー モードがオンになります。
代理オブジェクトのオフセットを指定してシミュレーションをテストするには:
代理オブジェクトで制御された Biped のアニメーションを、モーション フロー スクリプトの最初のクリップ、またはランダム モーション クリップで開始することができます。ただし、[共有モーション フロー](Shared Motion Flow)ダイアログ ボックスにモーション フロー ファイルをロードすると、ファイル内のスクリプトは無視されます。そのため、計算していない群集シミュレーションにあり、モーション フローを使用する代理オブジェクトに関連付けられた Biped にはスクリプトは存在せず、モーション フローで設定したランダムな開始クリップを使用することを指定しなければなりません。これは、代理オブジェクトで行います。
シミュレーションを計算します。
シミュレーションが計算されます。
シミュレーションを微調整するには:
通常は、調整が必要です。動作、モーション フローのセットアップ、代理オブジェクトのパラメータを変更するなど、問題を解決する方法は複数あります。
Biped が衝突したりお互いに貫通している場合は、群集の優先順位およびバックトラックの機能を利用することができます。ほとんどの群集またはBiped のシミュレーションには、この 2 つのオプションを使用することを強くお勧めします。
シミュレーションの計算を実行すると、最も優先順位の低い Biped または代理オブジェクトから、Biped または代理オブジェクトが 1 組ずつ計算されます。Biped または代理オブジェクトの計算は、衝突があるかどうかを調べて続けられ、衝突が起こった場合は前のクリップの最後に戻り、必要に応じて前のクリップに戻って、モーション フロー グラフで別のパスが試されます。この方法は時間がかかるので、[バックトラック](Backtracking)は既定値ではオフになっていますが、Biped が衝突した場合は、これが最良の問題解決方法です。