ワールド座標系における位置・回転・スケールの値をベクトルで取得するには
https://www.youtube.com/watch?v=6Cm-Mnooqvk
今回は親子関係が設定されているアニメーション設定済みのアイテムに対するワールド座標系における位置や回転、スケールの値をベクトル形式で取得する方法をご紹介します。
サンプルとなるシーンには、立方体と円錐との間に親子関係が設定されており、それぞれ位置や回転、スケールにそれぞれアニメーションが設定されています。子アイテムに当たる円錐のアニメーションを、そっくりそのまま緑色のトーラスへと移してみます。ワールド座標におけるトランスフォームの情報が必要となるので、チャンネルリストのワールド位置、ワールド回転、ワールドスケールをそのままトーラスへと接続すればよいのですが、今回のサンプルではそれをベクトルへと分解して、XYZの値として入力してみます。
まずはトーラスのトランスフォームXYZのチャンネルを全てスケマティックへと追加します。同様に、円錐のワールド位置、ワールド回転、ワールドスケールの行列をスケマティックへと追加します。
まずはワールド回転を回転XYZへと分解してみましょう。回転行列をベクトルへと変換するノードは予め用意されています。追加 > 行列 > Matrix to Eulerを追加したら、円錐のワールド回転を入力し、ワールド回転出力をトーラスの回転へと接続します。Matrix To Eulerノードのプロパティである回転順序は、トランスフォームの回転順序と合わせておいてください。再生してみると、回転が同期したのがわかります。
次は位置を合わせます。行列から位置を取得するためには、行列からベクトルを取得するためのノードMatrix Vectorを使用します。このプロパティ列を見てみると、ポップアップにはXYZそれに移動という選択肢が用意されています。これは行列の中からどの要素を取り出すのかを指定します。今回は位置を取り出したいので、移動を指定します。この時、正規化のオプションはオフにしておきます。このオプションをオンにしておくと、取り出した位置のベクトルが正規化されてしまいます。円錐のワールド位置をMatrix Vectorのマトリック入力へと接続し、出力をトーラスの位置へと接続します。
あとはスケールだけです。スケールの場合は、ベクトルの値を一回で取り出すのではなく、スケールXYZの値ひとつひとつを取り出します。ここで使うのもMatrix Vectorノードです。Matrix Vectorを追加したら、ワールドスケールをマトリックス入力へと接続し、列からXを取り出し、正規化オプションをオフにし、出力XをスケールXへと接続します。YとZに対しても同様に操作します。これでワールド位置・回転・スケールを全てベクトルへと変換することができるようになります。