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


9. 親子関係や時間差での破壊

■ 親子関係

剛体に親子関係を組み込みたいときがあります。
例えば、破壊表現の中で、破片の一部を壊さずにとっておいて、後から時間差で破壊するような場合です。



前節で行ったようにあるタイミングでパーツを全部破片にすると、一瞬で壊れたように見えてしまいます。
スケールの大きな破壊現象の場合は、パーツの一部は壊れないままで落ち始めて、その後時間差で破片になってほしいです。
そこでパーツの一部をさらに、孫の破片としてバラバラにして、時間差で壊すことを考えます。

ところが、2.79までは親子関係を組み込んだ剛体が機能していたのですが、2.8以降では親子関係を組んだ剛体は機能しません。

これは、親も子供も剛体なので、親が自分の位置を決定する際に子供の情報を必要とし、子供は親の情報を必要とする…と、循環参照になってしまうためです。
2.8は循環参照をよりきちんとチェックするようになったために、2.79では(ある意味バグりながら)動いていたものが、あるべき姿としてきちんと動かなくなった、ということのようです。

破壊する物体を、2つのパーツから構成するようにしました。

まずは、物体が地面にちゃんと接地している状態にしたいので、シミュレーションを実行して Apply Transformation をしておきます。
(RigidBody06.html参照)
それぞれ Cell Fracture を実行しました。
シーンが多少複雑なので、破片の数は少なめにしています。

破片について色分けをしています。
また、破片と破片になる前の物体が重なっているので、表示も乱れています。
元の物体は、Cube.A と Cube.B という名前にしました。
それぞれの破片は、FractureA と FractureB というコレクションに含まれるようにしました。
破片、FractureA と Cube.B に剛体設定をして、シミュレーションで壊してみます。
壊れる前の Cube.A は剛体設定を切っておきます。
剛体の設定をするときには、破片をコレクションごとにまとめて選んで、Copy From Active や Calculate Mass をします。
(1個1個設定はしていられないので…)
アウトライナーからうまく選択をするか、Ctrl+G の Select Grouped (グループで選択)を利用するとまとめて選択が手早く行えます。
次に、FractureB の側も剛体にしますが、そのままでは Cube.B と重なっているのではじけ飛んでしまいます。
剛体同士の相互作用の(する/しない)は剛体の設定の中の Collection (コレクション)で設定できます。

ここで出てくるコレクションは、今までに使ったオブジェクトのコレクションとは違う概念です。
20個の枠の中からどのコレクションに所属しているか選択します。(複数同時に所属もできます)

同じコレクションに所属している剛体同士は相互作用して、そうではない剛体同士はすり抜けます。

次のように設定すれば、うまくはじけ飛ぶのを防げます。

FractureA の破片は コレクション 1,2 に所属
Cube.B は コレクション2に所属
FractureB はコレクション1に所属
Plane(地面)はコレクション1,2に所属



■ 時間差設定

赤い破片(FractureB)は時間差で破壊が始まるようにしてみましょう。

Animated(アニメ)設定にキーを打って、最初は手付のアニメーション(つまり静止状態)でいて、ある程度時間が進んでから Animated を切って、シミュレーションによって動くようにします。
これも一つ一つアニメーションを設定するのは大変すぎるので、Ctrl + L によって Link(リンク作成)を使います。
アニメーションデータをリンクすると、アクティブなオブジェクトのアニメーション情報が、選択されたオブジェクト達にコピーされます。
時間差で破壊が起きました。

あとは、赤い破片たち(FractrueB)が動き出す前までの間、Cube.B に親子関係を付ければある程度破壊が進んだ状態から2段階目の破壊が起きそうなのですが…

剛体同士の親子関係は残念ながら機能しません。
そこで Cube.B の動きを剛体としての運動ではなくし、シミュレーションの結果を通常のアニメーションとして保存すれば良いことになります。
ただし、一旦アニメーションにしてしまうと、調整してシミュレーションのやり直しなどがしづらくなってしまいます。

そこで、エンプティに登場してもらいます。
エンプティを原点に配置して…
Constraint の Child of (チャイルド)で、Cube.B の子供の様にすることができます。
オブジェクトメニューの Animation > Bake Animation (アニメーションをベイク)で、エンプティの動きをアニメーションとして焼き付けることができます。
オプションとして、Visual keying (ビジュアルキーイング)と Clear Constraints(コンストレイントをクリア)しておきます。
コンストレイントによる動きを考慮してベイクを行い、ベイク後にコンストレイントがクリアされます。
エンプティは、Cube.B と同じ動きをしますが、その動きはシミュレーションとは関係なくアニメーションとして焼き付けられています。
そのため、剛体である赤い破片も、このエンプティの子供にして動かすことができます。
赤い破片が途中で崩壊する2段階の破壊が表現できました。
これでCube.B を非表示にすれば良い…ように見えますが、まだCube.B は緑の破片とは相互作用してしまっています。

オブジェクトごと削除するのが手っ取り早いですが、
再調整用に残しておきたければ、非表示にして剛体のコレクションを変えて相互作用をなくすなどの工夫をすればよいでしょう。

最終的に、マテリアルを統一してレンダリングすることでこのような動画になりました。



inserted by FC2 system