こんにちは。今日は少し趣向を変えてHoudini初心者が躓きやすい姿勢制御について紹介したいと思います。
Houdiniを始めて驚くことの1つに、複製のしやすさが挙げられます。メッシュの頂点(正確にはPoint)を用意すればその場所に別のメッシュを配置できます。
コピー毎に大きさをバラバラにすることも簡単です。大きさ以外に設定できるアトリビュートはこちらを参考に。
しかしいじり始めて躓くことの1つに、回転がおかしい!というものがあります。どういうことかというと、Point配置用のメッシュを横にするとなぜか豚があらぬ方向を向いてしまいます!
上のURLに助けを求めるとこんなことが書いてあります。
???これはどういうことかというと、配置用のPoint側に、アトリビュートを設定して向きを教えてあげないとどの向きに配置していいか分からないよ!ということです。
向きを考えるには配置用のPointと配置するメッシュどちらもルールを決める必要があります。
配置するメッシュ
+Z軸が正面、+Y軸が上方向である必要があります。豚はデフォルトで入っているノードなので正面、上方向がちゃんと合ってますね。メッシュを作る際はこの約束を守って作りましょう。
配置用ポイント
Nアトリビュート、upアトリビュートを作ります。通常Nはメッシュの法線を表しますが今回は正面を向けたい場所に設定すれば大丈夫です。
今回はZ+方向に正面を向けたいのでAttributeWrangleでNに{0,0,1}、upに{0,1,0}を設定します。
するとちゃんと正面を向いてくれました!
おまけ
と、ここまでで姿勢は制御できるようになったのですが、せっかくなので行列やクォータニオンにも(軽く)触れたいと思います!
Nアトリビュート、upアトリビュートの2つのベクトルを今回作成しましたが「あれ?3次元なんだからベクトル3つ指定しなくていいの?」と思いませんでしたでしょうか。実は2つのベクトルの外積を求めることで最後の1つは計算できます。そのためユーザーは3つ目まで指定する必要がないんですね。
内部的には2つのベクトルから3*3行列を作成しています。出た謎概念行列!と思うかもしれませんが、ここでは3*3行列は回転を制御できると思っていていれば大丈夫です。(ちなみに4*4行列は回転、移動、拡縮を表現します)
とはいえユーザーが姿勢を変えるたびに3*3行列なんて指定してられないので、簡略化のためにベクトルを指定したり、オイラー角(X,Y,Zで指定する角度)を使用したりするわけですね。
他にもクォータニオンというものを使うとクォータニオン同士をなめらかに補間し、最短経路を出してくれたりします。オイラー角だとこうは行かないですね。アニメーション周りでよく使うかと思いますが、こちらは機会があればまた解説しようかと思います。