CG数学 ベクトル3 外積


こんにちは、篠島です。前回のベクトルの説明から時間が立ってしまいましたが、今回は外積についてです。

 

今回のサンプルファイルです。
cross.zip

ベクトルの外積は2つのベクトルに対して垂直なベクトルを求めます。これをHoudiniのVOPとVEXで作ると下のようになります。VOPならCross Productノード、VEX関数だとcross()を使います。VEXコードで書いたほうが簡単ですね。

1

 

さて、Cross Productノードにベクトルのインプットが2つありますが、2つのベクトルに対して垂直なベクトルがどっちを向いているかというと、右手座標系のZ軸の向きになります。Input1が親指、Input2が人差し指、すると中指のベクトルが出力されるベクトルとなります。

2

 

これが何の役にたつのか? というと、外積を2回使うことによってそれぞれ垂直なX、Y、Z軸が作れます。ポイントの持つ法線(X軸とする)とUpベクトル(0,1,0)を外積してZ軸を求め、Z軸とX軸をさらに外積することでY軸が求まります。この外積を2回使うテクニックは非常によく使われます。VOPでノードを組んでいる時にどのインプットをどこに繋げるかが非常に分かりにくいと思いますが、その時は右手座標系を思い出しましょう。
ここで気をつけなければならないのが、インプットのベクトルは標準化して単位ベクトルにしておく必要があります。でないと出力されるベクトルの大きさは単位ベクトルではなくインプットの大きさにより異なります。

下のGIFアニメーションのように、最初の軸がどこを向いていようと必ず垂直なX、Y、Zを作ることができます。

a

 

サンプルファイルに入れてはいませんが、一つのVOPで外積を2回使うと下のようになります。単純な様でインプットの場所を間違えると軸が反対の向きになったりするので気をつけましょう。

4

他人のファイルを覗いてCross Productノードが2つ使われていたら、垂直な座標軸を作っているんだなと思ってほぼ間違いないと思います。