Blenderで複数のオブジェクトに時間差で重力をつけて落下させる

# はじめに

こんにちは。
今回、[Iwaken Lab.アドベントカレンダー2023](https://qiita.com/advent-calendar/2023/iwakenlab)シリーズ２の19日目の記事を担当するジョジョ好きなXRクリエイターの [もふるね](https://twitter.com/mofurune_k) です。


Blenderで3Dモデルを自作しているとき、ふと「物を落下させるアニメーションを作りたい！」と思いました。
でもBlenderは3Dモデリングのソフトであって、物理演算なんてでき・・・

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">ぷるんぷるん生活 3日目 <a href="https://twitter.com/hashtag/1%E6%97%A51%E3%81%B7%E3%82%8B%E3%82%93%E3%81%B7%E3%82%8B%E3%82%93?src=hash&amp;ref_src=twsrc%5Etfw">#1日1ぷるんぷるん</a> <a href="https://twitter.com/hashtag/blender?src=hash&amp;ref_src=twsrc%5Etfw">#blender</a> <a href="https://twitter.com/hashtag/b3d?src=hash&amp;ref_src=twsrc%5Etfw">#b3d</a> <a href="https://twitter.com/hashtag/%E3%82%BC%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#ゼリーアート</a> <a href="https://t.co/usWjGVotKU">pic.twitter.com/usWjGVotKU</a></p>&mdash; しー@Blender学習中 (@appleshinshin) <a href="https://twitter.com/appleshinshin/status/1646709871549579264?ref_src=twsrc%5Etfw">April 14, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

あっできるんだぁ！
X見てたら流れてきたポストで、Blenderは物理演算ができると知りました。
それでは実際にやってみよ～う！


# 参考資料

・夜風のMixedReality（Holomotoさん）
[Blenderで重力をつけオブジェクトを落下させる。](https://redhologerbera.hatenablog.com/entry/2023/06/20/213129)


# 重力をつける

落下させたい3Dモデルをオブジェクトモードで選択して、青い円のマークをクリックします。
物理演算プロパティが開かれるので、リジッドボディをクリックします。

<img width="600" alt="gr01.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/e85f754a-4d64-f8e1-a2a4-2a35f1dab08d.jpeg">

これで重力がつきました！
スペースキーを押して、アニメーションを見てみましょう。

<img width="600" alt="gr02.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/b2829a93-6cb9-3506-801c-668e9ecb5546.gif">

いいですね。落ちていきます。どこまでも。


# 床をつくる

このままだと延々と奈落に落ち続けてしまうので、床を設置しましょう。
Sift+A＞メッシュ＞平面で床を置きます。
これでアニメーションを見てみましょう。

<img width="600" alt="gr03.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/c7a4dc85-28b9-4b23-ac6c-26116790d3f7.gif">

・・・おやぁ？
3Dモデルが床をすり抜けていきます。
これでは、いけませんね。

実は、先程3Dモデルにつけた「リジッドボディ」を床にもつける必要があるのです。
さらに床のリジッドボディのタイプを「パッシブ」に変更します。

<img width="600" alt="gr04.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/249788e9-dece-a9b7-c181-3eadd0adebf0.jpeg">

よし、これでアニメーションを見てみましょう。

<img width="600" alt="gr05b.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/e5ef9ae1-bf24-8823-b20e-b1717ae2805f.gif">

やりましたね！しっかり物理法則に従ってくれています。

リジッドボディのタイプについて解説しますと・・・
アクティブは動くものにつけて、シミュレーション結果によって制御されます。
パッシブは動かないものにつけて、アニメーションシステムによって制御されます。

＜ 注意 ＞
目のマーク（ビューポートで隠す）を押して、見かけ上は消していても物理は残ります。
物理も消したいときは、リジッドボディを解除しましょう。


# 複数のオブジェクトに時間差で重力をつける

3Dモデルを落とせるようになったら、やりたいことがあります。
そう、いっぱい落とす！

<img width="600" alt="gr06.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/510ed390-835c-176a-71d1-b3b3cf619a24.gif">

こんな感じにアニメーションを作ってるときに思いました。
「重力を付けるタイミングを制御したいなぁ」
同時に落とすのではなく、時間差で一つずつ落としたい！

そんなときはこれを変更しましょう！
リジッドボディの設定の「ダイナミック」
これがオンのときは重力に従って落ち、オフのときにはその場で静止するようになります。

<img width="600" alt="gr07.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/9733f6eb-a8e4-ea10-192f-928e03469e3d.jpeg">

アニメーションタブに移動して、ダイナミックのチェックマークにカーソルを合わせてIキーを押してキーフレームを設定します。
試しに以下のように3Dモデルのダイナミックのオンオフを設定してみます。
アニメーションで0フレーム目は全ての3Dモデルをオフ。
15フレーム目は1つ目の3Dモデルをオン。
30フレーム目は2つ目の3Dモデルをオン。
45フレーム目は3つ目の3Dモデルをオン。

<img width="600" alt="gr08.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/f9937e85-c3dd-e76b-1226-f70418b4f4c9.gif">

実験は成功だ！


# おわりに

これで面白い映像が作れるぞーーー！！！

6 HOUR LATER

できたぁ！

<iframe width="560" height="400" src="https://www.youtube.com/embed/ty_9R1STdpg?si=HcAdBlGq9g89iV0a" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

物理演算は、楽しい！！！