ニッチなblender手記

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

loose introduction about Animation Nodes (Loop)

概要

下図を見て理解できるのであれば以降の項は読まなくていい。

f:id:r9aArrowhead:20201218151212j:plain

ここでは Animation Nodes が標準提供している Loop ノードについて調べる。

f:id:r9aArrowhead:20201218142309p:plain

参照

Animation Nodes - Doc - Loop

Wiki - iterator

Parameters And Iterators

ここの話は冒頭の画像が何しているか分かった上でなければ理解できない。

覚えておくべきは、ループ処理には以下のような要素が存在するということ。そしてこのページでは以下の要素に対する解説と利用方法が記載されているということ。

ヘッダ構成ミスか?

ここでループ処理に必須のインデックスやイテレータの話をしてくれているが、多分これを読んで分かる人はこの文章を読む必要がない。
Loop処理がビジュアルプログラミングの中でもプログラミング側に近い概念となるため仕方がないとは思う。

Dive into Python 3 - a-fibonacci-iterator のような話が理解できる前提の内容となっている。
つまり、インデックスもイテレータも知っている前提での話をしている。
よって割愛。

ここ読むならまずは上記リンクや 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 - for文 を読むぐらいの気概が必要となる。

f:id:r9aArrowhead:20201218142333p:plain

Generators

ここではジェネレータについての説明がある。
ジェネレータを理解するにはイテレータを知る必要がある。

f:id:r9aArrowhead:20201218142344p:plain f:id:r9aArrowhead:20201218142349p:plain f:id:r9aArrowhead:20201218142529p:plain f:id:r9aArrowhead:20201218142534p:plain f:id:r9aArrowhead:20201218142539p:plain f:id:r9aArrowhead:20201218142545p:plain f:id:r9aArrowhead:20201218142553p:plain

Advanced Node Settings

Advanced Node SettingsDescription という、ノードにラベルを追加できることだけ記載されているので割愛。

Iterator Sockets

ここではイテレータだがジェネレータで書いたことと重複したので割愛。

Parameter Sockets

  • Input:他ノードからのインプット可否の ON / OFF
  • Output:他ノードへのアウトプット可否の ON / OFF
  • Copy:後述の Reassignment Operators として利用できるようになる。別項があるのでここでは割愛。
  • Default:ソケットの初期値を設定する。パラメータとして選択したデータ型によってはなかったりする。
  • Hide:設定はあるが記述がない

f:id:r9aArrowhead:20201218142610p:plain f:id:r9aArrowhead:20201218142618p:plain f:id:r9aArrowhead:20201218142833p:plain

Reassignment Operators

ループ処理内で変更したデータを外部へ渡したい場合は、 Reassignする。これだけ覚えておけばいい。

基本的にリスト型のデータは immutable となっている。つまり、ループ処理中にパラメータで渡したリスト型データの中身を変えることはできない。

とはいえ、 Animation Nodes はリスト型であってもノードのネットワーク構成内容によってはリスト型の内容をコピーして mutable のように振る舞うため、Loop処理時ぐらいにしか気にすることはない。

f:id:r9aArrowhead:20201218142859p:plain f:id:r9aArrowhead:20201218142906p:plain f:id:r9aArrowhead:20201218142914p:plain f:id:r9aArrowhead:20201218142920p:plain

List Generators

ジェネレータで書いたことと重複したので割愛。

Break Condition

Loop処理の break を設定する。

f:id:r9aArrowhead:20201218142927p:plain f:id:r9aArrowhead:20201218142934p:plain f:id:r9aArrowhead:20201218142940p:plain

Execution Mechanism

これはループ処理の基本的なメカニズムが説明されている。

  1. Loop Input ノードはループ処理の開始として 現在 indexiterator が参照している番号を返す。そして、 Parameter として設定された値を返す。
  2. ループの本体(List Generators, Reassignment Operators, Break Condition) 、およびブレーク条件を除くすべてのLoop input ノードとネットワークを形成しているノードを、Loop Input ノード の出力ソケットが出力する値に基づいて実行される。
  3. break condition ノードの数だけ処理をする。
    1. Continue 入力ソケットの値が False の場合、ループを終了する。
  4. Generator Output ノードの数だけ処理する。
    1. Condition 入力ソケットの値が Trueの場合、ノードが参照しているリストへ値を追加する。
  5. Reassignment ノードの数だけ処理する。
    1. Condition 入力ソケットの値が True の場合、そのパラメータの値が入力値に変更されます。

上述の処理の流れを図にしたのが、冒頭に掲載したシーケンス図となる。以下に改めて再掲する。シーケンスを厳密にすると分かりにくくなるので、一番大きく処理が変わる breake 処理だけ分岐を記載した。

f:id:r9aArrowhead:20201218151212j:plain f:id:r9aArrowhead:20201218151221j:plain

examples

Animation Nodes のDocでは例をいくつかのせている。

挙動な内容についてはそれぞれページの画像を真似て作れば分かるので割愛。