OneonetのPyBE

Python,Blender,Excelのいろいろ

Blender:オブジェクトの衝突時に自動で効果音を付ける方法

リジッドボディを利用してオブジェクトの衝突、落下などなどやった時に丁度良いタイミングで音が出たらいいなと思いませんか?そんな希望を叶えるアドインの紹介。これスゴイですよ。
github.com

■セットアップ

  1. リンク先から Bake-Collisions-To-Sounds.py をダウンロード
  2. Blenderを起動し、[編集]→[プリファレンス]
  3. [アドオン]→[インストール]を選択し、先ほどダウンロードしたファイルを選択し、[アドオンをインストール]
  4. インストールしたアドオンを有効化しておく

f:id:oneonet:20220316161859p:plain

■利用方法
アニメーション再生するとオブジェクトが衝突するように事前設定。オブジェクトを配置し、リジッドボディを設定しておきます。その時、何フレームまでのアニメーションになるのかも確認しておきます。
アニメーションの準備ができたら以下を操作。

  1. アニメーションの対象となるオブジェクトを選択状態とする(ココ重要)
  2. [F3]を押して、検索窓に[キーフレーム]と入力。[キーフレームにベイク]を選択。※英語環境の場合、[Bake to Keyframes]
  3. 事前にアニメーションで確認した最終フレーム数に変更して[OK]。1フレーム毎にキーフレームが設定されます。
  4. 画面上部[オブジェクト]→[Bake Collisions To Sounds]でアドインを起動
  5. パラメタについては以下を参考に設定します。
  • [トラック]はまずは"1"に。
  • [ボリューム]は名前の通り。まずは10~30ぐらいの大き目が良いです。理由が後程。
  • しきい値は、小さいほど衝突と判定しやすくなり、音がたくさん挿入されます。0.1前後でオブジェクトに合う値を探してください。
  • フレーム範囲は事前に確認したアニメーションのフレームを設定します。
  • ファイルは、[ファイル名]カンマ[オフセット]の形で指定します。例えば、"c:\tmp\sound.mp3, +10"とか。オフセットは、衝突を検出したフレームからどれだけフレームをずらして音をセットするのかを指定します。最初は"+0"で良いです。オフセットの指定を忘れるとエラーになります。
  • 最後に[OK]を押せば効果音の挿入完了です。

アニメーションを再生させれば合わせて音が出ます。アニメーションレンダリングすれば音付きのアニメーションが出力されます。
f:id:oneonet:20220316162031p:plain
f:id:oneonet:20220316162040p:plain
まずはキーフレームにベイクするところから。忘れがち。

f:id:oneonet:20220316162053p:plain
ボリュームとしきい値はお好みで。ファイル名の後ろにオフセットを付けないとアドインがエラーとなります。

f:id:oneonet:20220316162106p:plain
[Video Editing]で挿入された効果音を確認できます。複数の効果音が密集して挿入されているので、枠が重なった状態で表示されています。

■TIPS

  • オブジェクトを編集した場合はキーフレームのベイクからやり直します。音付けだけやり直す場合は、Video Editing Windowから挿入された効果音を削除してアドインを再実行します。
  • 衝突判定の仕組みはオブジェクトの位置の変化を見ています。各フレームで、対象フレームと前2フレームからオブジェクトの位置を確認し、一定速度で移動していない場合、かつその変化が[しきい値]を超えた場合に効果音が追加されます。一定速度ではない場合に、X,Y,Z軸それぞれでチェックしており、音を変化させたい場合は、音とオフセットをカンマで続けて指定します。
  • また、位置の変化量を効果音量として設定しているので、移動変化速度=衝突速度が速いほど大きな音となります。アニメーションによっては再生音が小さく設定される可能性があるため、最初は大き目の音を設定して調整していくと良いです、と作者の方もコメントされています。