リジッド ボディが別のリジッド ボディと接触した時点で、どちらのリジッド ボディも衝突オブジェクトになります。これは、Softimage のその他のシミュレーション(ソフト ボディ、クロス、ヘアなど)とは若干異なります。その他のシミュレーションでは、衝突を生じさせるために障害物オブジェクトを設定する必要があります。たとえば、互いに衝突するビリヤードの球をアニメートする場合は、単に球をリジッド ボディにするだけです。球が互いに接触した時点で、すべての球が衝突に反応します。
ビリヤードの球はすべてアクティブ リジッド ボディとして設定されているため、白球(円で囲まれています)が当たると、すべての球が衝突に反応します。
衝突を作成する場合は、最低 1 個のリジッド ボディをアクティブに設定する必要があります。複数のアクティブ オブジェクトを衝突させると、そのすべてのアクティブ オブジェクトがダイナミクスの作用を受けて動きます。
動かない(ダイナミクスの作用を受けない)障害物を作成するには、それをパッシブ リジッド ボディにする必要があります。たとえば、ビリヤード台のエッジに当たって跳ね返るビリヤード球をアニメートする場合は、球をアクティブ リジッド ボディにし、台をパッシブ リジッド ボディにします。球は台のエッジに接触すると直ちに跳ね返りますが、台は動きません。アクティブ リジッド ボディとパッシブ リジッド ボディの詳細については、「アクティブ リジッド ボディとパッシブ リジッド ボディ」を参照してください。
リジッド ボディはすべて、衝突プロパティのセットを使用して衝突時の互いの反応を計算します。このプロパティには、弾性、摩擦、衝突ジオメトリ タイプ(衝突の計算に使用されるジオメトリ)が含まれます。
衝突における関係を簡潔にするためには、通常は、一度に 1 つのリジッド ボディの値だけを設定する方法をお勧めします。たとえば、多数のアクティブ リジッド ボディが 1 つのパッシブ リジッド ボディから跳ね返る場合、そのパッシブ リジッド ボディのみが衝突プロパティ設定の対象になります。 このようにすると、パッシブ リジッド ボディのパラメータを一定値に保てます。パッシブ衝突リジッド ボディに対する各アクティブ リジッド ボディの反応を異なるものにする場合は、パッシブ リジッド ボディの基本的な衝突プロパティを設定した後で、各アクティブ リジッド ボディの反応を個別に設定できます。
それらのオブジェクトのジオメトリが互いに接触すること(ジオメトリが相互に貫入するポイントがあること)を確認します。
最良の結果を得るためには、シミュレーションの最初のフレーム(初期状態)でリジッド ボディのジオメトリが貫入しないようにリジッド ボディを設定する必要があります。
すべてのリジッド ボディの衝突プロパティを、[Rigid Body]プロパティ エディタで設定します。詳細については、このセクションで説明しています。
シミュレーションを再生して、リジッド ボディを衝突させます。
リジッド ボディの衝突時には、各リジッド ボディに対して使用される衝突専用ジオメトリのタイプを設定することができます。このジオメトリには次のタイプを設定できます。
バウンディング シェイプ(ボックス/球/カプセル)(「バウンディング シェイプ」を参照)
凸面ハル(「凸面ハル」を参照)
リジッド ボディジ オメトリの実際の形状(「実際の形状」を参照)
各タイプの衝突ジオメトリは他のジオメトリとうまく相互作用することができます。たとえば、リジッド ボディ同士であれば、バウンディング ボックス付きのものと、実際の形状ジオメトリを持つものとの衝突が可能です。
大まかには、できる限りバウンディング シェイプ(ボックス、球、およびカプセル)を使用してください。このタイプは、ほかの衝突タイプと比べてより安定したジオメトリを速く作成できます。この次に速く安定したジオメトリを作成できるのが凸面ハルです。実際の形状の衝突は、オブジェクトをどうしても実際の形状にする必要がある場合にのみ使用してください。実際の形状は安定しており、速く作成できますが、適切な動作を得るためには微調整が必要となります。
リジッド ボディを選択すると、選択した衝突ジオメトリのタイプに応じて、その衝突ボリュームの範囲を示す黄色いワイヤフレームが、選択したリジッド ボディの周りに表示されます。
[Visibility Options]プロパティ エディタ([Shift]+[S]キーを押す、または目のアイコンから[可視性オプション]を選択する)の[属性]ページの[衝突プリミティブ](Collision Primitives)設定を使用して、衝突ジオメトリの可視性を切り替えることができます。
シェイプの精度が重要でない場合や、バウンディング シェイプのジオメトリがリジッド ボディの形状にほぼ近い場合は、バウンディング シェイプが手軽でお勧めです。衝突をチェックしつつオブジェクトの位置を絶え間なく計算するため、バウンディング シェイプを使用すると時間を大幅に節約できます。たとえば、ビリヤード台の上に散らばるビリヤードの球をシミュレートする場合は、ビリヤードの球にはバウンディング球を、ビリヤード台にはバウンディング ボックスを使用します。
バウンディング シェイプは、オブジェクトのポイントの周りで計算されます。したがって、NURBS および分割されたサーフェイスの場合は、ポイントがサーフェイスの上方に位置するため、サーフェイス上でバウンディング ボリュームが正確に定まりません。
このオプションは、PhysX ダイナミクス エンジンに対してのみ使用可能です(「ダイナミクス エンジンの選択」を参照)。
凸面ハルはオブジェクトの実際のシェイプをすばやく概算し、シュリンクラップされているオブジェクトのような結果を生成します。リジッド ボディの凹凸や穴は計算されませんが、それを除けば元のリジッド ボディと同じ形になります。
ほとんどの場合はリジッド ボディの実際のシェイプを高い再現性で再構築し、実際のシェイプ ジオメトリを使用する場合よりも高速になるという利点があります。
黄色いラインは衝突ジオメトリを表すため、衝突が発生する場所を予測できます。ここで、黄色いラインはボウルの内側が「分離」されて衝突の一部になっていないことを示し、サクランボは単純にボウルの上部で跳ね返ります。
PhysX(「実際の形状 - PhysX」を参照)ダイナミクスエンジンのどちらを使用している場合でも、[実際の形状]を衝突ジオメトリとして設定できます。ただし、どちらを使用するかに応じてプロセスおよび結果は異なります。
実際の形状では、正確な衝突を表現できますが、バウンディング シェイプまたは凸面ハルよりも計算に時間がかかります。しかし、リジッド ボディの形状の不規則さ、穴、凹凸、尖った部分などを衝突時に考慮する場合は、実際のシェイプし使用しなければなりません。
シェイプが不規則であったり、穴、凹凸、尖った部分などを衝突時に考慮するリジッド ボディ オブジェクト(上に示す内側にさくらんぼが落ちている鉢など)には、実際の形状の衝突ジオメトリが必要です。
ダイナミクス エンジンとして PhysX を使用した[実際の形状]を選択すると、衝突データが作成され、衝突対象の各リジッド ボディのジオメトリが計算されます。この衝突データは、衝突時のリジッド ボディの実際のジオメトリに基づいて作成されます。
[Rigid Body]プロパティ エディタで、[衝突タイプ](Actual Shape)リストから[実際の形状](Collision Type)を選択します。
[ディテール](Detail)を設定して、衝突データの精度を定義した後、リジッド ボディの形状([低]、[中]、[高]、または[お茶で一服])を定義します。
[サブディビジョン レベル](Subdivision Level)の値を変更することによって、衝突ジオメトリの解像度を設定します。
[実際の形状]タイプの衝突では、リジッド ボディの衝突データ(「ペネトレーション マップ」または「pmap」とも呼ばれます)が作成されます。衝突データは、基本的にリジッド ボディのソリッド モデル(3D マップ)です。このデータは、リジッド ボディ全体のグローバル情報に基づいて、衝突するオブジェクトがどの方向に跳ね返るべきかを指定します。
最初に行われる衝突データの計算には時間がかかりますが、計算が完了すると、高速かつ正確に衝突がシミュレートされます。別のリジッド ボディ(複製など)に同じジオメトリはある場合、それらは同じ衝突データを共有します。シミュレーションの計算時間を長引かせることなく、シーン内に多数のリジッド ボディを配置できます。
衝突データは、シミュレートする各フレームのリジッド ボディごとに作成され、シーンが開いている間はコンピュータのキャッシュに保持されます。シーンを保存すると現在のフレーム(シーンを保存するときにシミュレーションを実行していたフレーム)の衝突データのみが保存されます。これにより、多数のリジッド ボディのそれぞれに衝突データが保存されている場合などにデータが大きくなりすぎません。シーンを再ロードすると、各リジッド ボディに衝突データが再び作成されます。
次の 4 つの要因が、実際の形状と他のオブジェクトがどれほどうまい具合に衝突するかどうかを左右します。
リジッド ボディ ジオメトリの解像度(「高解像度のジオメトリ」を参照)
ディテール レベル(「ディテール」を参照)
サブディビジョン レベル(「サブディビジョン レベル」を参照)
シミュレーション サブステップの数(「リジッドボディシミュレーションの精度の設定」を参照)
実際の形状の衝突は、高解像度のジオメトリで最もうまく機能します。これは、計算に必要なオブジェクトの形状に関する情報をより多く含んでいるためです。三角形が多いほど衝突の仕上がりがよくなります。高度にテッセレートされたジオメトリを使用する利点は、サーフェイスの法線がよりスムーズになることです。この結果、より本物らしい衝突になります。
リジッド ボディに高解像度のジオメトリを作成することができます。これには、高解像度のジオメトリを通常の方法で分割する方法と、またはこのプロパティ ページで[サブディビジョン レベル](Subdivision Level)オプション(下を参照)を選択する方法があります。後者の場合、シミュレーションの外にあるジオメトリには影響は出ません。
衝突ジオメトリの詳細を十分に設定したうえで、リジッド ボディ間でファセットをだいたい同じサイズになるようにしてください。たとえば、非常に小さい三角形で構成されているリジッド ボディと非常に大きい三角形で構成されるリジッド ボディと衝突させようとしても、小さい三角形のリジッド ボディが大きい三角形のリジッド ボディを通過して衝突が発生しない可能性があります。
また、[実際の形状]タイプの衝突は、紙のように平坦なジオメトリではなく、厚みのあるジオメトリや閉じたジオメトリで良好に動作します。グリッドの使用は、一般には適切ではありません。それよりも、いくらかの厚みのある平坦な立方体を使用してください。
[ディテール](Detail)レベルでは、衝突データの精度を定義した後、リジッドボディの形状([低]、[中]、[高]、または[お茶で一服])を定義します。
ご想像のとおり、[低]が最も速く、[お茶で一服]は最も品質がよくなります。リジッド ボディ ジオメトリに穴、凹凸、尖った部分がある場合は、一般に[ディテール]を[中]よりも高い設定にする必要があります。
設定の違いを確認するには、木を使用してください。[低]を設定すると、大きな木の形状(木の幹や枝)が描画されます。[中]では小枝や葉まで、[高]では葉が一枚一枚描画されます。木をより高い設定で描画する必要がある場合は、通常またはスムーズなオブジェクト上で[中]または[高]を設定しても、衝突データの精度には変化はありません。
このチェインのリンクは[ディテール]の[低]で調整されますが、棘のついたボールでは、おそらく[ディテール]を[中]または[高]に設定する必要があります。
[サブディビジョン レベル](Subdivision Level)の値を変更することによって、衝突ジオメトリの解像度を設定できます。このオプションは単純なリニアのサブディビジョン ルールを採用しますが、シュミレーションの外にあるリジッド ボディのジオメトリには反映されません(リジッド ボディの実際のジオメトリには依存しません)。値が大きいほど衝突面がスムーズになり、衝突も正確になります。
たとえば、細身または低解像度のリジッド ボディに対してこの値を大きくすると、衝突に関する問題の解決に役立ちます。この値は衝突の精度に大きく影響しますが、衝突データの作成時間にはほとんど影響しません。
[サブディビジョン レベル]が十分に高い場合、[実際の形状]の衝突ジオメトリでは、これらのインターロッキング リングのような薄いオブジェクトとの連携動作が可能です。
このほか、衝突の精度を高める[Adaptive Substepping]オプションも使用してください。フレームあたりのサブステップ数を増やしたり、弾性を低くする方法も、実際の形状による衝突の安定性の向上につながります。
詳細については、「PhysX 対応の衝突の精度の設定」を参照してください。
衝突レイヤにより、互いに衝突するリジッド ボディの排他的なグループを作成できます。衝突レイヤ番号が一致するリジッド ボディのみを互いに衝突させることができます。衝突させる必要のないリジッド ボディをそれぞれ別のレイヤに配置することにより、衝突処理時間を短縮できます。
たとえば、キャラクタのボディを構成するいくつかのオブジェクトがあるとします。これらは、互いに衝突させたいオブジェクトですが、環境内の要素ではありません。これらのオブジェクトを衝突させるには、そのキャラクタのリジッド ボディ同士に同じレイヤ番号(たとえば 1)を割り当てます。ただし、このレイヤ番号は環境内の他のリジッド ボディ(たとえばデフォルト 0)とは異なる番号にします。
デフォルトでは、すべてのリジッド ボディが衝突レイヤ 0 に割り当てられます。つまり、すべてのリジッド ボディが互いに衝突する可能性があります。
リジッド ボディには、アニメートされたデフォーメーションを適用できます。アニメートされたデフォーメーションには、ラティス、シェイプ アニメーション、エンベロープ、ウェーブなど、あらゆるデフォーム オペレータが含まれます。衝突の一部であるリジッド ボディのデフォーメーションがアニメートされている場合は、[Rigid Body]プロパティ ページで[オブジェクトの変形アニメーションに対応](Animatable Deformation)オプションを選択します。
このオプションは、時間の経過に伴ってジオメトリが実際に変形する場合にのみ必要です。アニメートされた変換(スケーリング、回転、移動)の場合は必要ありません。