Blenderの物理演算機能の1つである「剛体」での、「オブジェクト同士のコリジョン(衝突)判定」などについての色々なメモ。
コリジョン(衝突)の形状とは?
例えば、以下のようなシミュレーションがあったとします。
▲[厚みのある平面]に、[立方体]を落下させた様子 |
この場合↑は、違和感なく衝突しますが、
例えば、以下↓のように、[厚みのある平面]に「面の差し込み」+「押し出し」で”窪み”を作って、その窪み部分に[立方体]を落下させると、実際より上の部分で衝突してしまいます。
▲[窪みのある平面]に、[立方体]を落下させた様子 |
こういう時、[厚みのある平面]の衝突コリジョンの”形状”を変更してやる事で、以下↓のように違和感なく衝突させる事ができます。
▲厚みのある平面に、立方体を落下させた様子 |
このように、衝突する形状の条件をきちんと設定してやらないと、意図するシミュレーション結果になりません。
衝突させるオブジェクト同士の形状を考慮して、衝突の形状条件を設定してやる必要があります。
コリジョン(衝突)のシェイプ(形状)設定
コリジョン(衝突)の形状(シェイプ)は、[剛体コリジョン]パネルの中の「シェイプ:」より設定できます。
メッシュ
メッシュの形状を完璧に再現できる衝突条件です。(重心はオブジェクトの原点になる)
ただし、その分処理が遅めです。
▲立方体:ボックス 土台:メッシュ (凹部分のシミュレーションも正確に行える) | ▲立方体:ボックス 土台:メッシュ (凸部分のシミュレーションも正確に行える) |
凸包
メッシュの頂点間を結んだ形状の衝突条件になります。(重心はオブジェクトの原点になる)
▲立方体:ボックス 土台:凸包 (頂点間なので、単純な凹部分は平面になる) | ▲立方体:ボックス 土台:凸包 (頂点間なので、凸部分などは傾斜のような形になる) |
円錐
高さがZ軸、半径は X または Y 軸の大きい方を使用した円錐が衝突条件になります。Z軸が上方向となります。(重心は常に円錐の中心になる)
▲立方体:ボックス 土台:円錐 (円錐部分が衝突条件になり、それ以外の部分はすり抜ける) | ▲[編集モード]にした状態で移動すると、円錐の形状をずらす事が可能 |
円柱
オブジェクトの円柱形状が衝突形状になります。(重心は常に円柱の中心になる)
▲モンキー:円柱 土台:凸包 (モンキーのバウンディングボックス(半径)が衝突対象) |
カプセル
オブジェクトのカプセル形状が衝突形状になります。(重心は常にカプセルの中心になる)
▲モンキー:カプセル 土台:凸包 (モンキーのバウンディングボックス(半径)が衝突対象) ※土台は傾けている |
球
オブジェクトのバウンディングボックス(半径)が衝突形状になります。(重心は常に球の中心になる)
▲モンキー:球 土台:凸包 (モンキーのバウンディングボックス(半径)が衝突対象) ※土台は傾けている |
ボックス
オブジェクトの”バウンディングボックス”が衝突対象になります。(重心は常にボックスの中心になる)
▲モンキー:ボックス 土台:凸包 (モンキーのバウンディングボックスが衝突対象) |
処理の重さ
処理の重さは
メッシュ > 凸包 > 円錐 ≒ 円柱 ≒ カプセル ≒ 球 ≒ ボックス
という感じで、「メッシュ」が一番重くなります。次いで「凸包」です。
この2つは、オブジェクトの形状を元に計算されるので、再現性が高い分、負荷も重くなります。
コリジョングループ
コリジョングループでは、衝突するオブジェクトのグループを設定できます。
同じグループに属している剛体同士だと衝突がシミュレーションされますが、異なるグループに属している剛体同士だとスリ抜けるように出来ます。
▲土台:コリジョングループ1 UV球:コリジョングループ1 立方体:コリジョングループ1 (全て同じコリジョングループ) | ▲土台:コリジョングループ1、2 UV球:コリジョングループ1 立方体:コリジョングループ2 (UV球と立方体は異なるコリジョングループ) |
▲土台:コリジョングループ2 UV球:コリジョングループ1 立方体:コリジョングループ1 (土台をすり抜ける) | ▲土台:コリジョングループ1 UV球:コリジョングループ2 立方体:コリジョングループ1 (UV球と土台は異なるコリジョングループ) |
コリジョングループは、[剛体コリジョン]パネルの「コリジョングループ:」より設定できます。
コリジョングループを複数選択する場合は、Shiftキー+左クリックを押します。
このページの情報は以上です。
コメント