Created on | Updated on
フォローする

SOP Solver

今回はSOP Solverを使ってみます。

SOP Solverのドキュメントはこちら(英語)

簡単なテストを試してみます。

Geometry内に、Attribute Wrangleを作成します。
ここでポイントを作成してみます。

Run Overは、detail(Only Once)を指定します。何度もイテレーションを行い、シーンに複数のポイントが必要な場合はPointのままでよいのですが、今回は開始時に1回だけ実行され、1つのポイントだけが欲しいのでこちらに変更します。

Attribute Wrangleでaddpoint Vex関数を使用するとポイントを追加することができます。
マニュアルをみると下記のように記載があります。

int  addpoint(int geohandlevector pos)

Creates a new point with the given position.

任意の位置にポイントを作成するにはgeohandleと位置情報を与える必要があるようです。

geohandleは、Attribute Wrangleの入力ポイントを指します。

0とすると最初の入力を示すことになります。

vector posはポイントを作成する位置をベクトルで入力します。もし、ワールドの原点に作成したいのであれば0,0,0とすることで原点に作成することができます。

addpoint(0,{0,0,0});

実行すると、原点に1つのポイントができています。

Point Numberを表示し、タイムスライダを動かして、常に原点に1つだけポイントが生成されていることがわかります。

1つのAttribute Wrangleで、ポイントを1つ作成することができたので、更にAttribute Wrangleを追加します。

 2つ目のAttribute Wrangleでは方向を定義します。

v@direction = {1,0,0};

と定義することでVector型の変数として宣言し、その値に(1,0,0)を設定しました。

これをポイントのポジションに追加します。

2つ目のAttribute Wrangleを表示すると、ポイントが指定された方向に移動していることがわかります。

フレームによりランダムに方向が変化するようにrand関数と@Frameを追加します。

directionアトリビュートをGeometry Spreadsheetで確認することもできますが・・

visualizeノードを使用してdirectionをビューポートで確認できるようにします。

進む方向はフレームに基づいた乱数です。

フレームを変化させた場合、ポイントは再度計算されますが、前フレームのデータを引き継ぐことができません。
例えばパーティクルであれば、前フレームの値を引きついで、次のフレームで計算されますが、単純なSOPでは毎フレームで1つのポイントが移動するのみとなります。

そこでSop Solverを使用し、ジオメトリノードも前フレームの値を引き継ぎ、次のフレームで展開できるようにします。

ここまで作成したものを選択し、Ctrl+cでコピーし、その後削除します。

Solverノードを作成してください。

ダブルクリックして、solver内に入り、Ctrl+vで先ほどコピーしたノードをペーストします。

Solver内にあるPrev_Frameをペーストした1つ目のAttribute Wrangleに接続します。

Solverに戻り、フレームを再生してみます。

フレームで原点にポイントが作成され、移動、次のフレームで新しいポイントが作成されます。それがトレイルのように続き、移動方向は0-1でランダムに変化していることがわかります。

0 コメント

記事コメントは受け付けていません。