loose introduction about Animation Nodes (DATA)
- 参照記事
- 基本原則
- Implicit Conversion
- Dynamic Sockets
- Vectorized Sockets
- Data Copying
- Generic Data Type
- Scenes
参照記事
Animation Nodes - Dosuments Data
Reassignment や Copy 設定についてもちゃんと書いてくれている
基本原則
Animation Nodes
はノードのソケットに色を付けることで、そのソケットがそのどんなデータを入力 / 出力するかを表現している。
主に利用されるdataタイプの場合、以下のような色分けがされている。
- light blue : Integer data
- blue : 3D Vector data
- black : Object data
- lavende : Float data
- orange : Matrix data
基本原則として、同じ色同士のソケットでしかノードは接続できない。
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値
Dynamic Sockets
Dynamic Sockets
は、Implicit Conversion
に似た機能。
入力 / 出力ソケットのデータ型を、必要に応じて動的に自動的に変更する。
例えば、Get List Element
ノードはリストを受け取ってその中から要素の1つを返すノードだが、出力ソケットを入力したデータ型にあわせた型に変更する。
これも全てのノードで型の変換をしてくれるわけではない
Vectorized Sockets
Animation Nodes
では1,2,3,4...
というような複数のデータを持ったリストにある個々の要素に対して操作できるようになる Vectorize ( ベクトル化 )
という処理がある。
Data Copying
ここではデータ型には mutable
と imutable
の2種類があることが説明されるが、 Aimation Nodes
上でこの違いを判別することは難しい。
それは掲題の通り、本来なら mutable
なオブジェクトに対して Data Copying
という機能が働いてそうならないように処理しいているのが原因となる。
根っこが python なのでこの
mutable
immutable
を理解したい場合はpythonの方で調べた方が分かりやすい。 むしろノードによるビジュアルプログラミングをするのであれば、中途半端に理解せず知らない状態のままの方が混乱しないかも
ここからは mutable
についてそれなりに知っている、あるいはそもそも知らないことを前提に書いていく。
Animation Nodes
では mutable
なデータ型の場合でも、複数ノードから参照されている場合はノードの出力時に Data Copying
という処理を行う。
つまり、 ユーザが意識しない限り、Animation Nodesで利用するデータ型は処理上では全て immutable
という扱いになる。
設定で強制的に
mutable
に変更することは可能だが、ノードのようなビジュアルプログラムでそれをする必要は限られている。
本家のドキュメントではここから mutable
と immutable
の例としてループ処理を取り上げているが、正直色々かっ飛ばして分かりにくい。
そのため、ノードの内容は変えずに手順を分解して記述する。
Generic Data Type
データ型には Generic
という色んなデータ型が入るものがある。
このデータ型を使うと、異なるデータ型をひとまとめにしたり、別のデータ型へ変換したりすることができる。
Animation Nodes
はある程度なら異なるデータ型でも自動で変換してくれるようになっているが、明示的にデータ型の変換を行いたい場合は、 Convert
ノードを用いる。
ただし
Convert
ノードの変換にも限界はあるので注意。
Scenes