使用ソフトウェア | バージョン | 備考 |
---|---|---|
Blender | 3.3.1 |
日本語:オイラー回転
ジオメトリを回転させるための角度を出力するノード。
接続先の例としてTransform
やInstance on Points
のRotation
ソケットに繋いで使用する。
他にもRotate Vector to Euler
ノードには直接キーボードで入力できないので、このノードが使える。
またRotate Euler
ノードの入力側にも更にRotation
があり数珠つなぎで使用したり、ローカル/グローバル角で切り替えるスイッチがあり少し複雑なこともできる。
こちらは学習しておかないと正しく使えないため、この記事で解説する。
Utilities
(ユーティリティ) => Rotate Euler
(オイラー回転)
日本語:XYZ合成
まず先に理解しておく必要がある項目から。
今回メインに使う次のジオメトリノードがある。
単にローカル軸と同じ矢印を表示させるジオメトリノードを作った。
これをCombineノードを使いX軸に90度回転したく次の入力にした。
しかし、これは次の結果となる
そもそも入力ソケットがRotation
となっているところに注目。
このRotation
とは3DCGで扱いやすいラジアンという単位で出力される。
したがって、ここでの角度は「90ラジアン」となり角度に治すと約5,157度というとんでもない数字になる。
こういった変換を間違えないためにもRotate Euler
ノードは有用である(角度で入力できるため)
つまりRotationソケットは同じRotationソケットで繋ぐのが基本と覚える。
では、X軸に90度回転させるにはどうしたらいいのか。
Rotate Euler
には直接「角度」をキーボード入力できるため次で良い。
気づいたと思うが、これならTransform
に直接入力しても同じである。
Rotation
の項目に直接入力した場合は表記が90°
になっている。
つまりここは直接入力した値がそのまま度数になるのでラジアンを気にする必要はない。
逆に言えばRotate Euler
のRotate By:
と書いてある設定は単純に回転したい角度を直接入れればよいということがわかる。
上でも軽く触れたがRotate Euler to Vector
のような「直接入力する欄がないノード」に使うのも有用だ。
Rotation
の入力ソケットを用いて何段階かに分けた回転を計算できるのがこのノードの強みとなる。
順に解説する。
日本語:軸の角度
こちらのモードセレクトはデフォルトでEuler
(ここまでで解説したモード)になっており、必要に応じてこちらにスイッチする。
Euler
モードだと入力ソケットがXYZ
のRotation
だったが、このモードだとAxis
に変化する
Rotate By:
は角度を入れるので直感的に分かり易いが、Axis
はベクトルになっており何を入力したらいいのか分かりにくい。
Axis Angle
はどんな回転をするのだろうか。
分かりにくいので次の例を使って視覚的にわかりやすくする。
緑色の玉を別オブジェクトで用意して、その座標をAxis
に繋ぐ。
Angle
はフレームが進むと自動で増加するドライバを組んだ。
この場合Axis
は次の画像のようになり
この軸に対して回転する。
つまり原点と緑玉を繋いだ線を軸に回転する。
イメージしにくいと思うので、動画で確認
Axis
に設定したベクトルを軸としてAngle
分回転していることがわかると思う。
例えばX
軸回転をしたい場合は次のようにX=1
にして他を0
にすれば良い。
参考として記事にしたがXYZ
のうちどれかを回転軸で利用する時はEuler
モードにして各軸に度数を入れたほうが簡単なので覚えなくても良い。
ただ、Blenderではないソフトでもベクトルを軸とした回転で表現するものがあるので、知っていて損はない。
この場合X=1
である必要はなく、X=0.1
だろうが2
だろうがX
に値が入っていれば良い(ベクトルなので)
ただしXYZ
を複合的に指定する場合はベクトルの方向に影響するので数値は慎重に入れる。
入力に別のRotation
を入れることで何段階かに回転を分けることができる。
つまり先にRotation
入力に入ってきた角度を回転した後でRotate Euler
に指定されている角度を回転する。
といっても分かりにくいと思うので順に説明する。
まず先に注意点から解説する。
例えば次のように繋ぐ。
X軸で45度 x 2 = 90度だと思いがち。
この場合は実際に90度回っているが、次の例でおかしくなる。
これならX軸に90度Y軸に90度回るように思えるが、実際は
変な角度になってしまった。
なぜこうなるのか...というのはあまり考えると混乱するのでサクッと理解すると
1, 2の回転が終わった後、内部のXYZ軸をリセットして3, 4の回転となるのでねじれが生じているわけである。
つまり2段階(またそれ以上)で回転させたいときに使うソケットである。
例えば魚の例を挙げる
なんらかのプロセスで生成された魚は変な角度を向いてしまっているとする。
魚はジオメトリノードでランダムに生成されて、どの角度を向いているかわからないなど。
モデリングで直せないケースを想定。
まずはこれを地面に平行に回転
さらに2段階目の回転として、泳ぐ動きを付け加える
簡略的なので不自然な泳ぎ方だが...こんな使い方をすると便利かと思う
ノードを2つに分けることで回転を分けられるので理解しやすく、また後から進行方向なども考慮して改良しやすい。
まずこのオプションはRotation
の入力ソケットになにか入っているときにだけ作用する
つまりRotation
入力がない場合はどちらでも良い。
これに関しては複雑で自信がないので私が間違っている可能性もあるので注意。
次の例で確認する。
Rotate Euler
を数珠つなぎにして、先行する方に回転がはいっていて、後ろ側は0度になっている。
実行結果は
X軸はZ軸に、Z軸はY軸に、Y軸はX軸に整列されているという例。
分かりにくいので1つ解説すると、赤の矢印(ローカルのX軸)がグローバルのZ軸に整列されているという状態。
この状態でObject
モードX=45度
にしてみる
すると次のように
矢印の色に関係なく、元のX軸(グローバル)で回転する。
このままLocal
モードに変更すると
今度は回転方向が変わり
ローカルのX軸(赤い軸)で回転しているのがわかる。
このようにRotation
に繋いだ回転がグローバル軸なのかローカル軸なのかを変えるスイッチだ。
このノードは「XYZオイラー角」という概念で回転している。
これに関して詳しくは他サイトに譲るが、X軸で回転 => Y軸で回転 => Z軸で回転という順番で回転している。
したがって
という現象が起きやすい。
少し分かりにくいノードであるのは間違いないので注意して試しながら作品を作ってもらえればと思う。
正直なところここまで深く理解する必要があるノードでもないかと思う。
ただ、とても良く使うノードなのにもかかわらず思ったような回転にならないというケースも多い。
というわけで、なぜそうなってしまったのかを考えるための参考記事にもなれば幸いだ。