よし、今回はSpreadに関して。
悪い例
大量のデータを処理したい場合どうするか?例えば円を等間隔に5つ作りたい場合。
今まで覚えた分だとCircleノードを5つ用意してGroupノードでまとめてRendererノードに送るのが普通。じゃ100個200個と処理したい場合、この方法ではもうお手上げ。

これを解消するのがSpreadという仕組み。表計算ソフトのことをSpread Sheetっていうけどそれと似たようなもので多量のデータをリストみたいに保持して一度に下流ノードへ渡す仕組み。先のパッチをスプレッドを使用して作ってみる。
いい例
どう、すっきりでしょ。Circleノードは一つしかないけどちゃんと5つの円が描かれてる。これがSpreadの仕組み、新しく使用したものはLinearSpread(Spreads)ノード一つのみ、ここから5つの数値データが出力されて以下のノードはインスタンスとして扱われる。CircleノードのInputPinのXへ5つの数値が入ったSpeadが入力されこれを一つずつ処理していく。出力するときに5つのCircleのSpeadとしてまとめたものがRendererに送られ5つの円が描かれる。ちょっと理解するには難しい、もうすこし数値が目で見えるようにしてみよう、いったいLinearSpreadノードからどんな数字がでているのか。では一つLinearSpreadノードを作成する、InputPinは5つ、Input, Width, Alignment, Phase, Spead Countだ。一番分かりやすいのはSpread Countかな、つまり数値を何個出力するかということ。あとは使って見たほうが分かりやすい。初期状態でSpread Countは1になっているのでこれを10ぐらいにしておこう。次にIOBoxを一つ作り先ほどのLinearSpreadノードのOutputを入力する。
IOBoxへ出力してみる
これじゃ数値が一つしか入っていないようにみえる、が実際にはちゃんと10個の数値が流れている。それを見るためにIOBoxを拡張表示してやろう。InspektorでIOBoxをみてみよう1Rowsってなっているところを10Rowsにする、んでIOBoxの右下あたりをドラッグして拡げてやる。
IOBoxの拡張表示
10個の数値がIOBoxへ入力されているのが分かる?この数値どうやって出てくるかってと、InputPinの右から1番目のInput(ややこしいな)の値0を中心に2番目のWidthの幅、初期状態では1.0なので0を中心に-0.5から0.5までをSpreadCountの値ぶん等間隔に数値を出力した数値だ。ちょっとややこしいが、Alignmentは今まで扱ってきた数値ではない、InputPinを右クリックすると分かるがメニューがプルダウンするはず。これはどこを基点に等間隔にするか、初期状態のCenteredっていうのはInputの0を中心に、LeftJustifiedは数直線で言うと左端つまり-0.5から、RightJustifiedは0.5から、以上3つのAlignment値はカウントの基点が変わるだけで間隔はどれもWidth/SpreadCountになる。一つだけ違うのがBlockで両端を固定してその間を等間隔にする。実際にはWidth/(SpreadCount+1)の間隔になる。
これでLinearSpreadから出る値がわかったのでCircleノードのInputPin Xにつなげて出力してみよう10個の図形がかかれるはず。
10個円を出力
ややこしいねぇ。でもこれがv4の「売り」の部分だと思うので理解は必須やね。

あともう一つ忘れてたLinearSpreadのInputPinにPhaseってのがある。理解しにくいので置いておけばよいが日本語で言うところの”位相”でWidthの周期をもったノコギリ波と見なした位相ってことになる。

次はもっとSpread。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です