-Blenderで剛体シミュレーションをするときの手順と注意点-


7. 崩壊させよう(その2)

■ 既にある形状を破片に分解する

ブロック塀のように、パーツの集合体を崩壊させるのは比較的簡単ですが、既にある形状を破壊するにはどうすればよいのでしょうか。
Cell Fracture Add-on を使って、オブジェクトを分割してから崩壊させてみます。

ユーザー設定を使って、Cell Fracture Add-on を有効にします。
すると、画面左のツールシェルフ内に Cell Fracture ボタンが追加されます。
立方体でも良いのですが、多少複雑な形状でも対応していることを見るために、ちょっとだけ複雑な形状を用意します。
このとき、用意する形状は閉じていなければなりません。
(ポリゴンに穴があいていると、どっちが内側でどっちが外側か定義できなくなるので、分割がうまくいかなくなります)
Cell Fracture を実行します。
2.79までから場所が変わり、オブジェクトメニューの Quick Effect の中になりました。
設定できる項目がたくさんありますが、例としてとりあえず下のように設定してみました。
元の形状をばらばらにして、さらにばらけたパーツを再分割を繰り返して破壊していきます。数値を大きくしすぎると、ものすごいパーツ数になってしまうので、最初は控えめの数値で試すのが良いでしょう。

Source Limit: 最初の分割を最大で12個にしました。
Noise: ランダム成分が無いと、整然と分割されてしまうので、ある程度の数値を入れておきます。

Recursion: 最初の破片を最大でもう1回再分割します。
Source Limit: 再分割する破片数の上限です。
Clamp Recursion: 再分割によってこのパーツ数に達したら中断します。
Random: 再分割をする確率です。どのパーツから優先的に再分割をするかは隣の選択肢で設定します。(大きいほうから、小さいほうからなど)

Recenter: 前ページと同じ理由で、破片ごとの原点が正しい位置にくるように計算をするようにします。

Collection: 破片を新規(または既存の)コレクションに設定します。
ここでは Fracture (破片) という名前にしました。
破壊前のオブジェクトと混ざらないようにここは設定しておいた方が良いです。
実行すると、Fracture という名前のコレクションにパーツが大量に作成されました。
破壊前の状態もシーンに残って表示されているので、表示が変になってます。
必要に応じて削除や非表示設定をしておきましょう。

全てのオブジェクトに対して、剛体シミュレーションの設定をします。
前ページと同じように、全ての破片を選択状態にして、アクティブなパーツにたいして1つ剛体設定をして、Copy From Active (アクティブからコピー)を行うのが一番楽だと思います。

崩壊のシミュレーションを行うことができました。

良くあるミスが、破壊前のパーツに剛体設定をうっかりしてしまって、
非表示にしたけれども破片と相互作用して全部が飛び散る…というものです。
ご注意を。

ところで、デフォルトの剛体設定をコピーした状態では、各破片の質量が全部1kgになってしまいます。
同じような大きさの破片ならあまり問題ないのですが、大小の比が大きい時は少し変です。

破片全体を選択しておいてから、 オブジェクトメニューの Rigid Body から Calculate Mass (質量を計算)を使って
破片の大きさに従った質量にできます。


Cell Fracture の中に質量の設定項目がありますが、ゲームモードで利用する場合の名残のようで今は関係ないようですが…?
そのようなユーザー同士のやり取りを少し見ただけなので、本当のところは分かりません。

■ 途中から破壊したい

ところが、この状態では途中から破壊を起こそうとしても、ひび割れ状態からスタートしてしまいます。
表示のオン、オフを使って破壊前のオブジェクトと、破壊後のオブジェクトを切り替える手がありますが、
素直に考えると、数百ある破片を全部表示切替するの…?と怖気づいてしまいます。

グループを利用して楽に表示の切り替えをしてみます。

最初に、すべてのパーツを Deactiveted (非アクティブ化)状態にしておきます。
(Copy From Active を うまく使って…)

こうしておくと、Active な剛体が何かぶつかってくる、(もしくはぶつかりそうになるまで)静止して、破壊が始まりません。

これで、衝突が起きてから初めて崩壊が起こります。
しかし、特に輪郭線などを表示している場合は、ぶつかる前からひび割れ状態なのをどうにかしなければいけません。

コレクションごとに、表示非表示を切り替えれば何とかなりそうですが…
実はコレクションの表示/非表示はキーを打って時間変化させることができません。
そこで Instancing(インスタンス化)機能を使います。
まず、Fracture コレクション全体を非表示にしておきます。
さらに、エンプティを一つ原点に配置します。
そして、Instancing 機能で、コレクション全体をコピー表示します。
これによって、エンプティの表示/非表示に従って、コレクション(のコピーの)の表示/非表示が切り替わります。
衝突の瞬間に、衝突前の物体と表示と非表示が入れ替わるようにキーを打ちます。
(表示、非表示も、ショートカットの I でキーを打つことができます!)

これで、数百の破片の表示、非表示の制御の代りに、エンプティ1つの制御で済むようになりました。
ぶつかってから初めて破片に分割されるようになりました。
ところで、実はよく近づいてゆっくり再生するとわかるのですが、
非アクティブな状態は、衝突が起きてからではなく、「動いている剛体がすぐ近くに存在したら」解除されてしまうようです。
ゆっくりと近づいている物体の場合、ぶつかる直前に崩壊が始まってしまうので、何か別の手立てを考えないといけません。

(目に見える衝突物はダミーで、見えない剛体を使うなど…)

■ おまけ

残念ながら、スザンヌは閉じていない形状(目のあたりで別パーツの閉じていない形状が使われている)なので、
Cell Fracture ではうまく分割ができません。

Cell Fracture が有効なのは、完全に閉じた形状だけになります。

inserted by FC2 system