« artist sideで「列車をスプラインに沿わせる」と言うのがあったので、自分もXPressoで「スプラインに沿う」を遊んでみる。 | トップページ | 連なったものをスプラインに沿わせるには… »

グループ内のオブジェクトをXPressoでスプラインに沿わせてみる。

オブジェクトをスプラインに配置させるだけであるならば、ファンクションメニューの「アレンジ」「複製」でできますが、スプラインを変更しても自動でスプラインに沿って配置はしてくれません。
XPressoを使うと常にスプラインに沿わせることができます。

適当なスプラインと複数のオブジェクトのグループを用意します。

XPressoを使わなくても手作業で「スプラインに沿う」エクスプレッションのスプライン上の位置を少しづつ数値を変えてあげればできます。
ただ大量にある場合、ウンザリしますが…
作業が完了すれば、スプラインの形を修正しても自動的に配置できますが…

更にピースの数を変更する?また最初から手入力を…

Play_the_spline_33
実際に手入力したファイル9.5「SplineArrange_01.ZIP」です

今回は「スプラインに沿う」エクスプレッションは使いません。
その代わり、新規ノード/XPresso/一般/「スプライン」ノードと繰り返し/「階層」ノードを使います。

「スプライン」ノードの属性は、グローバルモードです。均一補間にチェックを入れます。これでスプラインの補完法に影響されずにすみます。

Play_the_spline_49

Play_the_spline_34

「スプライン」ノードから座標を取得するには、入力端子の位置に0.0~1.0を入力します。
例えば、並べるピースが30個あって、5個目の位置は (1.0 ÷ 30) × 5 = 0.1666となるわけです。

Play_the_spline_35

「階層」ノードを使ってグループ内のオブジェクトをくり返すわけですが、5個目なのか13個目なのかわからないと計算ができません。このインデックスを取得するために新規ノード/XPresso/一般/「オブジェクトインデックス」ノードを使います。

Play_the_spline_36

この取得したインデックス番号を先ほどの式に入力します。

Play_the_spline_37

出力 = 1.0 ÷ V1 × V2 と、しましたが V2 ÷ V1 と、いうことです。

最後に「オブジェクトインデックス」ノードの出力端子のオブジェクトから出力されたオブジェクトの絶対座標に「スプライン」ノードの出力端子の位置を入力します。

Play_the_spline_38_2

これでグループ内のオブジェクトがスプラインに常に沿って配置されます。
グループ内のオブジェクトの数が変更されても、スプラインの形状が変わっても問題ありません。
ただし、接線方向には向いていません。

では、接線方向にピースのZ軸を合わせましょう。
「スプライン」ノードの出力端子に接線を追加します。ここからは、スプライン上の接線ベクトルが出力されます。
このベクトルから回転HPBを計算します。

ここで、前もって、お詫びします。自分も未だXPressoノードは発展途上人なので、全てを把握していません。一発でXPressoノードだけ(C.O.F.F.E.E.ノード除く)で変換する事ができる方は、教えてください。

新規ノード/XPresso/計算/「ベクトル -> マトリックス」ノードを使います。
注意してください。変換/「ベクトル -> マトリックス」ノードではありません。

Play_the_spline_40

「ベクトル -> マトリックス」ノードの属性で「入力ベクトルの向く方向を向く軸」をZ軸にしてください。

Play_the_spline_39

「ベクトル -> マトリックス」ノードの出力されるマトリックスからHPBを計算します。
新規ノード/XPresso/計算/「マトリックス -> HPB」を使います。

Play_the_spline_41

HPBは独立した実数3個の端子になっていますが、ベクトル型の方が扱いやすいので実数からベクトルに変換します。
新規ノード/XPresso/変換/「実数 -> ベクトル」を使います。

Play_the_spline_42

この3つのノードの組み合わせで方向ベクトルからHPBベクトルへ変換できます。
汎用性があるので、XGroupにしておきます。
他のドキュメントでも使えます。完成したらXプールに登録してください。

Play_the_spline_43

XGroupの入出力端子にベクトルを追加して、
サブメニューのポート/名前を表示し、それぞれ名前を変更してください。

Play_the_spline_44

上の様に入出力端子をつなぎ、サブメニューの表示/「標準」にします。

Play_the_spline_45

これを先ほどの「スプライン」ノードの接線につなぎます。
角度は最後のオブジェクトの絶対角度につなぎます。

Play_the_spline_46

さて、これで完成か?
実はそうではないのだ。スプラインの軸がワールドの軸と同じ方向だと問題ないのだが、方向が違うと思わぬ方向を向いてしまいます。
実は接線ベクトルはスプラインのローカルベクトルなのだ。
「スプライン」ノードのマトリクスモードがグローバルでも接線はローカルのようです。
さてこれをグローバルにするには、スプラインのグローバルマトリクスと接線の掛け算と…
新規ノード/XPresso/計算/「マトリックス * ベクトル」ノードを使います。
追加して、つなげます。

Play_the_spline_47

「マトリックス * ベクトル」ノードの属性の法線にチェックを入れてください。
これは、座標を変換する場合はノーチェック。方向を変換するときはチェック。

Play_the_spline_48

これで、完成です。

今回のファイル9.5は、「SplineArrange_02.ZIP」です。

|

« artist sideで「列車をスプラインに沿わせる」と言うのがあったので、自分もXPressoで「スプラインに沿う」を遊んでみる。 | トップページ | 連なったものをスプラインに沿わせるには… »