本記事ではBlenderのanimation_nodesの使い方の中でもオブジェクトを複製させる方法についてご紹介していきたいと思います。
Blender animation_nodesの基本的な使い方 - TomoGのごちゃまぜ倉庫
Blender animation_nodesの初心者向け基本操作1【複数のオブジェクトを連動させる】 - TomoGのごちゃまぜ倉庫
参考動画
本記事は上記の動画を参考にしていますが、バージョンの違いなのか上記の動画のように行うことはできません。
なので、それについての回避方法を含めて本記事ではご紹介していきたいと思います。
オブジェクトを複製する方法
前提の状態
まず上図が前提の状態となっています。スザンヌを1体追加し、アニメーションノードでは、ノードでスザンヌを読み込みその位置を出力しているだけのものとなっています。
もし、このノードの意味が分からない場合は前回の記事からご覧ください。
Blender animation_nodesの初心者向け基本操作1【複数のオブジェクトを連動させる】 - TomoGのごちゃまぜ倉庫
この状態から本記事の説明を開始していきたいと思います。
複製をしてくれるノードを追加
まずはオブジェクトの複製をするために複製をしてくれるノードを呼び出します。
上図のようにanimation_nodes上で【Shift + A】でオブジェクト>Instancerを追加してください。
そして、上図のようにノードをリンクさせてください。この状態だとまだ複製はされないためご注意ください。
上図の赤線部分の【ソース】は複製したいものをリンクさせてください。本記事だとスザンヌを複製したいため、スザンヌのオブジェクトをインプットしてくれるノードをリンクさせています。
上図の緑線部分の【Instances】は複製する個数を表しています。ここで、複製したい個数を直接入力しても問題ありませんが、位置の移動と連動させたいため、ここにノードを追加していきます。
複製する個数を決定
本記事では一番簡単な平面に複製する方法をご紹介します。
まず上図のようにメッシュ>Generators>グリッドの順で選択してください。
すると上図のようなノードが追加されると思います。
このノードは平面を出力しているノードで
・X/Y Divisions:X/Yの分割数
・長さ/幅:X/Yの距離
を表しています。
次に、このメッシュから頂点数を取得するため、上図のようにメッシュ>Mesh Infoを選択して追加してください。
そして、追加されたMesh Infoと前節で作成しておいたObject InstancerのInstancesをリンクさせようとすると、上図のようにGet List Lengthが自動で挿入されると思います。
もし自動で挿入されるのが嫌な場合は、List>Get Lengthから追加してリンクさせてください。
この追加したノードの説明として、メッシュ情報を分割して、その中から頂点数をListとして出力。
その頂点数のリストから長さ、つまり個数を出力して複製する個数とリンクさせています。
なので上図の例では合計10×10の100個複製することになります。
複製した後の位置決定
前節で複製しましたが、このままだと複製したものが全て同じ位置にあることになります。なので、平面の頂点ごとの場所に割り振っていきたいと思います。
上図のように位置の場所は全てVectorで表現されているため、そのままObject Transforms Outputの位置にリンクさせて問題ありません。
すると上図のようにスザンヌを大量に複製し配置できたと思います。
これで完了となります。
余談1:参考動画について
参考動画では上図のようになっていると思います。上図のInvoke SubprogramとLoop Inputが入っていると思います。
このInvoke SubprogramとLoop Inputは上図のように対応しています。
この当たりはプログラミングをやったことがある人なら引数と関数名と同じような関係といえば分かると思います。
プログラミングをやったことがない人は、上図の各矢印のように対応したもので、動作にはあまり関係のないものとなっています。しかし、これがあると複雑になりやすいノードを綺麗にまとめることができます。
使い方は簡単で、Invoke SubprogramはSubprogram>Invoke Subprogramから、Loop InputはSubprogram>Inputで追加してください。
次に上図の右の赤線部分のように追加したLoop Inputの下部ある名前を適当な名前にしてください。
名前を決めた後、上図の左図の赤線部分にあるInvoke SubprogramのChooseボタンを押してください。
すると、今まで作成してきたLoop Inputが出てくると思いますが、先ほど決めたLoop Inputの名前を選択してOKを選択してください。
次に上図の赤線部分にある+ボタンを押すことで、新しい値を追加することができます。
+ボタンを押した、どのような型にするかを選択することができます。
本記事ではあれば複製したいオブジェクトのリストと複製したオブジュエクトの置き場所を追加したいと思います。
なので
・複製したいオブジェクトのリスト = Object List
・複製したオブジェクトの置き場 = Vector List
となるため、その2項目を追加してください。
すると上図のようになると思います。これが本章の最初でご紹介したようにものとなっています。
後は同じようにこのノードにリンクさせていってください。
本記事の内容では行う意味は薄いと思ったため省きましたが、覚えておくと非常に便利な機能となっています。
余談2:応用
本記事では平面(Grid)を生成して、その生成した平面の頂点の上に並べていくというものでした。
これを応用すると、自分の好きなメッシュの頂点の上に置けるようになります。
例えば上図の赤枠部分のように変更します。オブジェクトのCircleは、オブジェクト追加の円を回転しただけのものとなります。
Mesh Object InputはMesh>Mesh Inputから追加することができます。
そうすると、上図のように円の頂点に沿った並びをすることができます。
このように自分の好きなように変更したメッシュを使って複製していくというのが主な使い方だと思います。
ちょっとガンマを強くしすぎた感あるけど、一応レンダリングできた。
— 智G (@tomohikog12) 2019年11月13日
アニメーション部分をさぼったからそこまですごくなさそうに見えるのが一番残念。 pic.twitter.com/5p1aH0OwOI
上記のツイートで貼った動画に移っているオブジェクトは、本記事と同じような手法で複製しているため、様々な用途で利用できるとご理解頂けると思います。
本記事の内容は以上となります。
animation_nodesで複製は結構行う操作であるため、必ず本記事の方法は覚えておくようにしてください。
本記事は以上です。お疲れさまでした。