ニッチなblender手記

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

loose introduction about Animation Nodes (DATA)

参照記事

Animation Nodes - Dosuments Data

Animation Nodes - Doc Loop

Reassignment や Copy 設定についてもちゃんと書いてくれている

Youtube - [Tut] advanced feature in the loop node P1; reassignment - blender animation nodes; AN-fundamental

基本原則

Animation Nodes はノードのソケットに色を付けることで、そのソケットがそのどんなデータを入力 / 出力するかを表現している。

主に利用されるdataタイプの場合、以下のような色分けがされている。

  • light blue : Integer data
  • blue : 3D Vector data
  • black : Object data
  • lavende : Float data
  • orange : Matrix data

基本原則として、同じ色同士のソケットでしかノードは接続できない。

f:id:r9aArrowhead:20201214171017p:plain

f:id:r9aArrowhead:20201214172059p:plain

Implicit Conversion

冒頭で ノードは同じデータ型でのみ接続できる と記載したが、一部例外が存在する。

Integer型の 1 や float型の 1.00 あるいは boolean型の True (1) は全てスカラー値としてみれば同じ 1 を表現している。
こうした 見え方は違うが中身は同じ データの型に関しては、多少のズレは発生することがあったとしても別のデータ型ソケットへ接続することができる。

1.01 を 1 に丸めた時に小数点以下の値が扱われなくなるのと同じ

ただし、 全てのデータ型が相互変換されるわけではない 点に注意。
この変換処理が行われるのは、以下のデータ型の間のみである。

  • Integer
    • 1, 2, 3 など整数値
  • Float
    • 1.2, 2.345 , 3.14159265359 など小数値
  • Boolean
    • True, False などのboolean値

f:id:r9aArrowhead:20201214171033p:plain

Dynamic Sockets

Dynamic Sockets は、Implicit Conversion に似た機能。 入力 / 出力ソケットのデータ型を、必要に応じて動的に自動的に変更する。

例えば、Get List Element ノードはリストを受け取ってその中から要素の1つを返すノードだが、出力ソケットを入力したデータ型にあわせた型に変更する。

これも全てのノードで型の変換をしてくれるわけではない

f:id:r9aArrowhead:20201214171040p:plain

Vectorized Sockets

Animation Nodes では1,2,3,4... というような複数のデータを持ったリストにある個々の要素に対して操作できるようになる Vectorize ( ベクトル化 ) という処理がある。

f:id:r9aArrowhead:20201214171047p:plain

Data Copying

ここではデータ型には mutableimutable の2種類があることが説明されるが、 Aimation Nodes 上でこの違いを判別することは難しい。

それは掲題の通り、本来なら mutable なオブジェクトに対して Data Copying という機能が働いてそうならないように処理しいているのが原因となる。

根っこが python なのでこの mutable immutable を理解したい場合はpythonの方で調べた方が分かりやすい。 むしろノードによるビジュアルプログラミングをするのであれば、中途半端に理解せず知らない状態のままの方が混乱しないかも

ここからは mutable についてそれなりに知っている、あるいはそもそも知らないことを前提に書いていく。

Animation Nodes では mutable なデータ型の場合でも、複数ノードから参照されている場合はノードの出力時に Data Copying という処理を行う。
つまり、 ユーザが意識しない限り、Animation Nodesで利用するデータ型は処理上では全て immutable という扱いになる。

設定で強制的に mutable に変更することは可能だが、ノードのようなビジュアルプログラムでそれをする必要は限られている。

f:id:r9aArrowhead:20201214171119p:plain

本家のドキュメントではここから mutableimmutable の例としてループ処理を取り上げているが、正直色々かっ飛ばして分かりにくい。
そのため、ノードの内容は変えずに手順を分解して記述する。

f:id:r9aArrowhead:20201214171125p:plain f:id:r9aArrowhead:20201214171534p:plain f:id:r9aArrowhead:20201214171540p:plain f:id:r9aArrowhead:20201214171547p:plain f:id:r9aArrowhead:20201214171554p:plain f:id:r9aArrowhead:20201214171601p:plain f:id:r9aArrowhead:20201214171607p:plain f:id:r9aArrowhead:20201214171613p:plain f:id:r9aArrowhead:20201214171621p:plain f:id:r9aArrowhead:20201214171627p:plain f:id:r9aArrowhead:20201214171635p:plain f:id:r9aArrowhead:20201214171645p:plain f:id:r9aArrowhead:20201214171652p:plain f:id:r9aArrowhead:20201214171658p:plain f:id:r9aArrowhead:20201214171704p:plain f:id:r9aArrowhead:20201214171710p:plain f:id:r9aArrowhead:20201214171719p:plain f:id:r9aArrowhead:20201214171725p:plain f:id:r9aArrowhead:20201214171732p:plain f:id:r9aArrowhead:20201214171739p:plain f:id:r9aArrowhead:20201214171747p:plain f:id:r9aArrowhead:20201214171754p:plain f:id:r9aArrowhead:20201214171802p:plain f:id:r9aArrowhead:20201214171809p:plain f:id:r9aArrowhead:20201214171817p:plain f:id:r9aArrowhead:20201214171825p:plain f:id:r9aArrowhead:20201214171831p:plain f:id:r9aArrowhead:20201214171838p:plain f:id:r9aArrowhead:20201214171849p:plain

Generic Data Type

データ型には Generic という色んなデータ型が入るものがある。
このデータ型を使うと、異なるデータ型をひとまとめにしたり、別のデータ型へ変換したりすることができる。

f:id:r9aArrowhead:20201214172044p:plain

Animation Nodes はある程度なら異なるデータ型でも自動で変換してくれるようになっているが、明示的にデータ型の変換を行いたい場合は、 Convert ノードを用いる。

ただし Convert ノードの変換にも限界はあるので注意。

f:id:r9aArrowhead:20201214172051p:plain

Scenes

f:id:r9aArrowhead:20201214172730p:plain