今回はAnemoneの使い方を練習するため、こちらの本のサンプル集に記載されている、Pythonスクリプトで木を作る内容と同じアルゴリズムを実装してみました。
Anemoneのデータは以下のリンクから取得できます。
Step.1 根元の幹の、始点と終点を作成
・今回のケースでは、スライダーを5個、事前に用意します。
調整可能なパラメーターは、一本目の枝の長さ、枝を増やしていく際の長さの縮小割合、半径の縮小割合、枝をランダムに伸ばす方向に回転させる角度、最初の幹の半径です。
・2番目の点を、原点からZ方向に50mmの位置に設定します。1本目の幹の長さになります。
Step.2 1本目の幹のサーフェス
・Step.1で求めた2番目の点と原点の間に直線を引き、pipeコンポーネントでサーフェス化します。半径は5.0に設定。
・2本目の幹以降、2本ずつ枝を伸ばして行くので、乱数を2つ作成します。
Step.3 その他のつなぎ方
・残りは上の図のようにつなぐとうまく作動すると思います。
・幹を二本、それぞれ伸ばす方向(角度)は固定値とrandomコンポーネントで生成します。
・計算回数は、左上のRepeatスライダーで調整します。
・左上のBooleanトグルは、計算のON/OFF切り替え用です。
Loop Start~End間の考え方
言葉で書くと以下のようになります。
1.幹の始点(D0)から終点(D1)までのベクトルを求め、終点にPlane Normalコンポーネントを使って平面を作成します。
Loop Start直後のD0およびD1については、計算回数が増えるにつれ階層別に区分けする必要がありますので、Graft設定にします。
2.求めたベクトルを2回、回転させます。1回目の回転軸は、1.で求めた平面を分解したX軸、2回目の回転軸は1.で求めたベクトル自身です。1回目の回転角度は20°(固定値)、2回目の回転角度は乱数で求めた値を使用します。
乱数は二つあるので、ベクトルが二つ作成されます。
3.Line SDLコンポーネントを使い、幹の中心軸を作成します。始点はD1、方向は2.で求めたベクトル、長さは1.で求めた、始点~終点間距離に縮小率をかけ合わせた数値です。
4.3.で求めた中心軸の周りにPipeコマンドで面を張ります。半径は、D2に縮小率を引き算した数値です。
5.Loop Endコンポーネントへのつなぎ方は、求めた中心軸の始点と終点が次の計算回における始点と終点になるのでEnd Pointsコンポーネントで取り出した値をD0とD1につなぎます。半径も次の計算に使うので、D2につなぎます。
6.Pipeコンポーネントで求めたサーフェスは、Mergeコンポーネントの出力をD3につなぎます。
3.Line SDLコンポーネントを使い、幹の中心軸を作成します。始点はD1、方向は2.で求めたベクトル、長さは1.で求めた、始点~終点間距離に縮小率をかけ合わせた数値です。
4.3.で求めた中心軸の周りにPipeコマンドで面を張ります。半径は、D2に縮小率を引き算した数値です。
5.Loop Endコンポーネントへのつなぎ方は、求めた中心軸の始点と終点が次の計算回における始点と終点になるのでEnd Pointsコンポーネントで取り出した値をD0とD1につなぎます。半径も次の計算に使うので、D2につなぎます。
6.Pipeコンポーネントで求めたサーフェスは、Mergeコンポーネントの出力をD3につなぎます。
Step.4 計算終了後
・計算が終わったあと、Mergeコンポーネントからサーフェスを取り出します。
・Loop Start~Loop End間はデータが回を追うごとに更新され、以前の計算回のデータは破棄されます。最終的には幹のサーフェスデータについてはすべての計算回におけるサーフェスが必要になるので、Flattenで平坦化し、Mergeコンポーネントで順次、追加していくように設定します。
実際に使用した際の感想ですが、Graftの設定やMergeコンポーネントをうまく使わないと望む結果につながらず、バグFIXに時間がかかるかもしれません。Pythonで組んだ方がお手軽ですが、どうしてもビジュアルプログラミングにこだわる人向けかなと思います。
0 件のコメント:
コメントを投稿