ニッチなblender手記

世の中には自分に似た人が3人いるとされています。その人達へと情報共有するために主にblenderの記事を書いていきます。

waving OBJ in blender

概要

Animation Nodes を利用して、複数のオブジェクトが波のように動くアニメーションを作成する。

参考

下の参考先を見て理解できれば以降を読む必要はない。


[05 Object Instancer] Introduction to Animation Nodes Tutorial Series for Beginners


#3 - Animation Nodes in Blender 2.8 - Tutorial Series

大量のオブジェクトが波打つような動きをする方法


#6 - More Fun with Audio - Animation Nodes Blender 2.8 Tutorial Series


Create a Looping Animation using Instancing in Blender 2.9

手順

  1. ウォーミングアップ
    1. 大量のオブジェクトを用意する
    2. 個々のオブジェクトへそれぞれ異なる位置となるように移動させる
    3. フレーム単位で位置が変わる(=移動)ようにする
  2. 本番
    1. 大量のオブジェクトを用意する
    2. オブジェクトを移動させて、一定の範囲をオブジェクトで敷き詰める
    3. 個々のオブジェクトを操作できるようにする
    4. 波形の移動をするようにする
  3. 別解
    1. Blender の Instance 機能を利用して、オブジェクトを大量配置する
    2. Wave モディファイアを利用して波形の移動をするようにする
  4. 応用
    1. Animation Nodes を使って、一枚の板ポリを波打たせる

ウォーミングアップ

一気に波形に動きをつける前に、下図のように複数のオブジェクトが時間と共に上下へ移動するようなものを作る。

f:id:r9aArrowhead:20210114185843g:plain

大量のオブジェクトを用意する

f:id:r9aArrowhead:20210114184813j:plain f:id:r9aArrowhead:20210114184820j:plain

個々のオブジェクトへそれぞれ異なる位置となるように移動させる

f:id:r9aArrowhead:20210114184827j:plain f:id:r9aArrowhead:20210114184835j:plain

フレーム単位で位置が変わる(=移動)ようにする

f:id:r9aArrowhead:20210114184843j:plain

本番

大量のオブジェクトを動かす方法が分かったところで、本番に移る。
ここでは下図のようにより波のような動きをするような調整をしていく。

f:id:r9aArrowhead:20210114185125g:plain

大量のオブジェクトを用意する

f:id:r9aArrowhead:20210114184900j:plain f:id:r9aArrowhead:20210114184907j:plain

オブジェクトを移動させて、一定の範囲をオブジェクトで敷き詰める

f:id:r9aArrowhead:20210114184921j:plain f:id:r9aArrowhead:20210114184913j:plain

個々のオブジェクトを操作できるようにする

f:id:r9aArrowhead:20210114184928j:plain f:id:r9aArrowhead:20210114184935j:plain f:id:r9aArrowhead:20210114184943j:plain f:id:r9aArrowhead:20210114184950j:plain

波形の移動をするようにする

ここで本格的に三角関数を用いて波形のアニメーションを実装するが、オブジェクトのY軸の位置を0より上にしたことがここで関わってくる。
三角関数は基本的に -1 から 1 の間を遷移するので、初期位置は0の方が上下移動が分かりやすくなる。

f:id:r9aArrowhead:20210114184956j:plain f:id:r9aArrowhead:20210114185004j:plain f:id:r9aArrowhead:20210114185010j:plain f:id:r9aArrowhead:20210114185018j:plain f:id:r9aArrowhead:20210114185027g:plain

f:id:r9aArrowhead:20210114185117j:plain

以上で完成となるが、更に処理をプロシージャルに。
最初はシリンダーオブジェクトを手で作成したが、この部分も Animation Nodes を利用して生成しておく。折角だからよりパラメトリックでプロシージャルにしておきたい。

f:id:r9aArrowhead:20210114185206j:plain f:id:r9aArrowhead:20210114185213j:plain

別解

今回 Animation Nodes で作成した方法は、バニラの blender でも実現できる。

ただし、利用するモディファイアの仕様変更が影響するため、 blender 2.91以降 が条件となる。

Blender の Instance 機能を利用して、オブジェクトを大量配置する

f:id:r9aArrowhead:20210114185221j:plain f:id:r9aArrowhead:20210114185229j:plain f:id:r9aArrowhead:20210114185235j:plain f:id:r9aArrowhead:20210114185242j:plain f:id:r9aArrowhead:20210114185249j:plain

Wave モディファイアを利用して波形の移動をするようにする

f:id:r9aArrowhead:20210114185259j:plain f:id:r9aArrowhead:20210114185314g:plain f:id:r9aArrowhead:20210114185436j:plain f:id:r9aArrowhead:20210114185444g:plain f:id:r9aArrowhead:20210114185526j:plain f:id:r9aArrowhead:20210114185535g:plain f:id:r9aArrowhead:20210114185740j:plain f:id:r9aArrowhead:20210114185748g:plain

欠点

オブジェクトを一つ一つ生成しなくてもいいので作業的には楽になるが、同時に以下のような問題が発生する。

  • 大量のオブジェクトを生成するため、メモリ消費量が上がる
  • オブジェクトの数に比例してループ処理によるCPUへの負荷が上がる
  • サイン波などを利用した独自の波形を作成しようと思った場合、感覚ではなく数学的知識が要求される

また、 今回の範囲では Animation Nodes と バニラで結果はあまり変わらなかった。
しかし、より複雑な動きを追求していく場合はそれぞれ得手不得手が分かれるのでどちらで実行するかを選ぶ必要がある。