これからXPressoノードをグループ化する方法について説明します。とは言っても、何もないとグループ化できないので、最初にちょっと複雑なものを作りましょう。何か役に立つもの、後で再利用できるものがいいので、ここでは「ターゲットの方を向くXPresso」を作ります。もちろんCINEMA 4Dには標準でターゲットエクスプレッションがあります。しかし、これをXPressoの中に組み込むことはできません。その点XPressoでターゲット機能を作っておけば、XPressoの中に自由に組み込むことができます。
ターゲット機能を作るには、大学で学ぶ数学の知識が一つ必要になります。それは「ベクトルA、Bの外積ベクトルCは、ベクトルA、Bに(反時計回りに)直交する」ということです。これを使って直交する座標軸X、Y、Zを計算します。
また、マトリックス(行列)というデータタイプを扱います。CINEMA 4Dで扱う4行4列のマトリックスは、簡単に言うとオブジェクトの「位置」、「X軸」、「Y軸」、「Z軸」の4個のベクトルをまとめたものです。また、座標マネージャに表示される「位置」、「スケール」、「角度」の3個のベクトルをマトリックスから取り出すこともできます。
それでは、サンプル806aを開いて「Target」オブジェクトを動かしてみて下さい。XPressoが働いて「Root」オブジェクトがその方向を向くはずです。
図806-1
それでは、XPressoを調べてみましょう。まず、目標となるオブジェクトはXPressoタグに作ったユーザデータで指定しています。
図806-2
XPressoの構成はちょっと複雑で次のようになっています。それではこれから順番に説明していきます。
図806-3
まず左から1列目のXPressoタグノードは、ユーザーデータの値(目標となるオブジェクトへのリンク)を出力します。
2列目のオブジェクトノードは、RootとTargetの二つのオブジェクトの位置ベクトルを出力します。
3列目の計算ノードは、Targetの位置ベクトルからRootの位置ベクトルを引いて、Target方向のベクトルを出力します。
図806-4
これがZ軸になるのですが、そのままではTargetの位置によってZ軸の長さ(つまりオブジェクトのスケール)まで変ってしまうので、6列目の万能ノードを使って正規化し、単位ベクトルにします。
図806-5
4列目は外積ノードです。これに最初のZ軸ベクトルを入力し、天頂方向のベクトル(0,1,0)との外積を求めると、それはZ軸と天頂ベクトルの両方に垂直なベクトルになります(同時に水平ベクトルでもある)。これを正規化するとX軸になります。
図806-6
5列目も外積ノードです。これにZ軸ベクトルとX軸ベクトルを入力し、外積を求め、正規化するとY軸になります。
図806-7
7列目は4個のベクトルを1個のマトリックスにまとめるノードです。マトリックスにまとめることで後の処理がずっと簡単になります。8列目では、計算したマトリックスをRootオブジェクトに入力しています。
|
Comments are closed.