こんなかんじ
エフェクトをつけるともっと爆発っぽくなると思います
爆発というより爆散かも
利点
blenderでオブジェクトの爆散を表現する方法として、
・物理演算を使った方法
・破片をひとつひとつキーイングする方法
などがあると思いますが、物理演算は重いしキーイングはめちゃ大変です
今回の方法は物理演算より軽く、自力キーイングより楽だと思います
環境:blender3.3
作り方
オブジェクトを分割し、コレクションにまとめる
分割は自力でもいいですが、Cell Fractureアドオンがおすすめです
分割ができたら、オブジェクトの塊ごとにコレクションを作ってまとめます
(firstDが”破”、secondDが”壊”)
制御用のオブジェクトを用意する
なんでもいいです
今回はEmptyからplane axisを用意し、destroyerと名付けました
ジオメトリーノードで爆散
ジオメトリーノード用のオブジェクトを作って(なんでもいいです)そいつのジオメトリーノードタブでノードを組んでいきましょう
ノード群の全貌はこんな感じです
1枚目が全体図、2枚目がdestroy first/secondの中身です
destroy firstとsecondは全く同じものです
(Ctrl+Gでノードのグループ化を行うことができます)
参考:Blender: ノードグループ(Node Group)の使用方法
2枚目について詳しく見ていきます
Object Infoノードから先ほどつくった制御用のオブジェクト destroyer のScaleを取得し、Separate XYZノードによってベクトルを分割します
取得した値をFloat Curveノードにつっこんで、グラフをこんな感じにします
Float Curveノードは横軸が入力値、縦軸が出力値のグラフをつくります
0から1の値をとります
XYZでやることは同じなので、Y,Zも同様にやります
Float Curveノードから取得した値をMultipyでn倍(n=散逸の範囲を表すパラメータ)して、Addで1(これは固定)を足します
同様に操作したX,Y,ZをCombine XYZで再びVector化します
- Combine XYZ:destroyerのScaleから取得した、各破片の移動量係数ベクトル
- Position:各破片(Collection内のObject)のもともとの位置
- Multipy:ベクトルの各要素の積をとる。アダマール積というらしい
- Group Input:入力したCollection
- Group Output:結果。起こる事象
各破片のワールド原点からのベクトルと、移動係数ベクトルとの要素積をとることで各破片の移動先を決定します
あとは移動先の位置をSet Positionに入れとけばOKです
爆発の中心をワールド原点から変えたい場合
Centerは爆発の中心となるオブジェクトです
例のごとくEmptyでも置いときましょう
もちろん、位置ベクトルを入れて直接指定することもできます
制御の仕方
destroyerのScaleによって制御しているので、それをキーイングすることでアニメーションをつくれます
注意点として、Float Curveノードの範囲が0から1なので、Scaleもそれに合わせる必要があります
Multipyノードの倍率で大きさを決めましょう
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
以上です
物理演算ほどリアルには動きませんが、エフェクトとかつけたらそれっぽくなるのではと思います
今回はやらなかったんですが、破片にランダムな回転をかけたりするのもいいかもしれません
意見や感想があればツイッター( https://x.com/bleibiaccount )のほうにお願いします
ありがとうございました