« C4D XPressoで人型をパラメトリックに歩かせるテストを高さのあるパスに沿わせてみた | トップページ | C4D XPressoで、XY平面での2個の円の接線ポイントを出力するノード »

XPressoでオブジェクトを移動させても、地面ポリゴンオブジェクトに密着させる。

オブジェクトを地面の凹凸に合わせて移動させたい時があるよね。

移動させるオブジェクトが、パスに沿って移動するなら、パス自体を地面の凹凸に合わせると(スプラインを十分に分割して、構造メニュー/スプラインを編集/投影を実行)簡単に地面に沿って移動するアニメーションが作れるわけですよね。

Ontheground

でも、パスに沿わないで、自由に動かしたい場合は、どうします?

それでは、地面ポリゴンメッシュに円錐プリミティブを密着させてみよう。

XPressoは、「光線の衝突」ノードを使います。
光線の開始と終了のポイントは、「境界ボックス」ノードを利用します。
オブジェクトの角度は、衝突ポリゴンの法線を利用します。

Ontheground_01_2

「境界ボックス」/「光線の衝突」ノードはグローバルモードで使用します。

境界ボックスは…オブジェクトが空間を占めている領域です。

グローバルモードの場合、オブジェクトがグローバル空間を占めている領域です。
地面ポリゴンメッシュのグローバル空間を占めている領域の最大Yと最小Yを利用します。あとのXZは沿わせるオブジェクトの値を使います。

「境界ボックス」ノードがグローバルモードなので、地面オブジェクトが回転していても、どこに配置されていても問題ありません。

ここまでのXPressoです。

まずは、ベクトルのY値を変更するXGroupをつくります。

Ontheground_02

こんな感じです。

次のXPressoは…
地面オブジェクトの「境界ボックス」から最大・最小Y値を取得。
最大・最小Y値を沿わせるオブジェクトの絶対座標のY値に入力。
「光線の衝突」の光線の開始・終了に入力する。

Ontheground_03

この後のXPressoは…
「光線の衝突」ノードの衝突位置に沿わせるオブジェクトの絶対座標に入力します。
「光線の衝突」ノードのポリゴンの法線に沿わせるオブジェクトのY軸を合わせます。

まず、衝突位置から…

Ontheground_04

衝突位置を沿わせるオブジェクトの絶対位置に入力するのですが、XZ値も入力してしまうと衝突位置から動けなくなるので、Y値のみの変更にします。

オブジェクト位置の処理は、終了です。
オブジェクトの角度を変更します。

ベクトルがY軸になるようにマトリクスに変換し、更にマトリクスからHPB回転に変更します。HPB回転をベクトルに変更します。

計算/「ベクトル->マトリクス」ノード(Y軸)
計算/「マトリクス->HPB」ノード
変換/「実数->ベクトル」ノード

Ontheground_05

結果を見てみよう。

Ontheground_06

法線をY軸に合わせたにもかかわらず、円錐(+Y)が下を向いてしまっている。

地面の法線は、逆向きではありません。

試しにこの様なオブジェクトを配置してみます。

Ontheground_07

計算/「ベクトル->マトリクス」ノードの軸を(Y軸/X軸/Z軸)切り替えてみます。

Ontheground_08

ZX軸は法線に合っているのですが、Y軸のみが法線の反対を向いています。
対処方法は法線を反転すればよいのですが…
良いのだろうか?こんな事で…

計算/「ベクトル->マトリクス」ノードが悪いのか?他の2つのノードが悪いのか?

計算/「マトリクス->HPB」ノード
変換/「実数->ベクトル」ノード

は、この段階ではわかりません。

では別のノードで試してみよう。
法線からマトリクスに変換するのだから、オブジェクトのグローバルマトリクスに入力するといいだろう。

Ontheground_09

マトリクスのV0に衝突位置を入力して、オブジェクトのグローバルマトリクスに入力します。

これで、計算/「ベクトル->マトリクス」ノードの軸を(Y軸/X軸/Z軸)切り替えてみます。

Ontheground_10

全ての軸が法線に合いました。

では、オブジェクトを移動させてみよう。

Ontheground_11

これで、Y軸の方向も位置も問題ありません。
ただし、XZ軸の方向を定めていません。

今回は、オブジェクトを移動しても地面に密着させるのが目的なので、ここで終了します。

このXPressoは、汎用性があるのでXGroupにまとめます。

Ontheground_12

赤い枠内をXGroupにしておきます。

Ontheground_13

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

|

« C4D XPressoで人型をパラメトリックに歩かせるテストを高さのあるパスに沿わせてみた | トップページ | C4D XPressoで、XY平面での2個の円の接線ポイントを出力するノード »