こんにちは、Ritaro です。
こちらに記事を書くのはこれで5回目となります。
今回も、どうぞよろしくお願い致します。
TAにとって開発上の問題点を解くのに
技術的な引き出しを色々な持っておくことが必要、
について・・また少し紹介したいと思います。
前回の記事内容 https://hexadrive.jp/hexablog/others/19837/
に引き続き、Mayaの Node Editorまわりの話、その2です。
キャラクターセットアップに便利に使える手段の1つとして
Maya の Node Editor をご紹介しています。
今回もちょっとしたノードの組み合わせで、オブジェクトを
ワールド座標値で設定する方法をお見せしたいと思います。
また、このような Node Editor を使ってキャラクター制御用
の仕組みを組む時、良く使う計算のノードとして 外積 が出て来ます。
現在、ShaderFXを使ったリアルタイムシェーダーについてのビデオチュートリアルを
作成していますが、リアルタイムの光源処理で良く使う計算のノードは 内積 になります。
こちらの話は また別の機会に出来たら・・と考えています。
では、さっそく・・
ちょっと具体的な、面白い対処法、でもあったら『おお、使えるかも』
・・って思うようなものをまたご紹介していきましょう。
2)「Maya NodeEditor を使った コンストレイント」
Mayaを使ったキャラクターセットアップで良く使う
Mayaがデフォルトで用意している
“方向 コンストレイント (OrientConstraint)” や
“ペアレント コンストレイント (ParentConstraint)” を
ノードエディタで見たことはありますでしょうか?
実はかなり複雑なノードのつながりになっており、これに手を加えて改善しよう
なんて思いたくないくらいの 接続状態になっております。
こんな状態でなくても似たような方法、もしくはもっと分りやすくて簡単に組める、
もしかしたらより軽い処理で行えないか、と考えつくようなヒントをご紹介します。
■ 回転 コンストレイント
クォータニオン ノードを利用する方法
前回の階層下のノードをワールド座標で扱う方法として最後のノードから
親逆行列の値を 入力行列に再度差し込む と正しく値を計算出来ていました。
これと同じことを 回転をクォータニオンのノードを使って計算させることにも
利用すると、回転コンストレイント と同じ働きになります。
decomposeMatrix を 2つ その出力クォータニオンを
quatProd(クォータニオン プロダクション) を使って乗算し
最後に quatToEuler(クォータニオンからオイラーに) を使って
入力されたクォータニオン を オイラーの回転値に戻して 回転 につないであげます。
■ 移動 コンストレイント
decomposeMatrix と vectorProduct の ポイント行列積 ノードを利用する方法
移動値だけのコンストレイントは vectorProduct を利用することで
親逆行列の値を 入力することも出来るので、どんな階層構造でも対応出来ます。
たったこれだけで済むのでしたら NodeEditor の利用もチャレンジし易いのではないでしょうか。
■ 移動/回転/スケール コンストレイント
multMatrix と decomposeMatrix ノードを利用する方法
こちらも 親逆行列の値 入力行列に再度差し込むことでどんな階層下でも
正しい位置を計算します。
追加の値を この例では displayPoints の値からオフセット値も設定出来ます。
■ Jointの回転 コンストレイントの考察
multiplyDivide や ジョイントの方向
Jointのコンストレイントは主に回転値を扱いたい としたら
“方向 コンストレイント (OrientConstraint)” 以外にどんな方法があるか
色々と考察するのも面白いです。
一番下の例は回転値をジョイントの方向からクォータニオンの反転から計算しています。
・・・という訳で、ワールド座標値を扱えると、階層構造の影響を受けずに
移動/回転/スケール を設定出来、コンストレイント と同等の制御が出来ました。
PS
日本語の説明矢印がView上に表示していますが、これは 作成>注釈…(annotation)
ていうオブジェクトで、日本語表示対応していますので、
シーンにあるものに説明を付けたい時に便利ですよ。矢印付きです。
次回も NodeEditor ネタ として ベクター(Vector) について出来たら
と思っております。
ではでは