2022-11-18

Vector Rotate(ベクトル回転)ノードを解説【Blender - Geometry Nodes】

ジオメトリノードで回転を扱うノードの1つ。ただし回転する量を出力するノードとは違い、回転後の各頂点の座標を出力する。混乱しやすいので詳しく解説。

Article Image
使用ソフトウェアバージョン備考
Blender3.3.1

Vector Rotateノード

日本語:ベクトル回転

Vector Rotate外観

概要

回転を扱うノードではこれまでRotate EulerAlign Vector to Vectorを扱った。

これらのノードはあくまでRotationという角度を出力として扱うノードだ。

一方で今回のVector Rotateは出力がVectorとなっている。

これは回転後の各頂点の座標が入っていると思えば良い。

回転を扱うノードは混乱しやすいため、この記事でわかりやすく解説したい。

出し方

Vector(ベクトル) => Vector Rotate (ベクトル回転)

Rotate EulerAlign Vector to VectorUtilityに分類されるが、これはVectorの中にある。

このノードはマテリアルノードでも呼び出せる。

マテリアルにはMappingノードがあるのでこちらは少しマニアックなノード?

関連記事

似たようなノードがいくつもあるので他の記事で扱っている。

Align Euler to Vector(オイラーをベクトルに整列)ノードを解説:前編【Blender - Geometry Nodes】 | 謎の技術研究部

Rotate Euler(オイラー回転)ノードを解説【Blender - Geometry Nodes】 | 謎の技術研究部

基本の使い方

このノードはSet Positionノードで使うケースが最も多いと思う。

Set Positionに回転を扱う入力が無いからというのが1つの理由になっている。

よくある接続例

おそらく最もよくある接続例。

回転例

こんな風に回転できる。

矢印メッシュについて

この記事ではこの矢印のメッシュ(自作モデル)を使って解説する。

ローカル軸の方向と色がBlende標準と同じになっている(例:赤はX軸)

Positionノードはなぜ必要か

ノードの解説に入る前にまず理解しておく項目。

なぜ上のノード例でPositionがつながっているのか。

コレを外すと回転しなくなる。なぜか。

Positionノード

各頂点のポジションを移動するから

「回転」は言い換えれば頂点の「移動」である。

このノードは各頂点を移動することで回転を表現するものだ。

したがって点1個ずつの座標を先に入力しておき、それをどこに移動するのか、という情報を出力している。

このためPositionの情報がなければ、回転元の座標が取れないためこのノードは意味がなくなる。

回転とは移動である

少々難しいかもしれない。

全く理解できなくても暗記してしまえば使えなくもないのでとにかくPositionは絶対必要ということは覚えておく。

あれ、こういう時ってSet Position側からフィールドの概念により元の座標が逆流するのでPositionいらないんじゃ?

と思った人は鋭い。私もそう思う。

しかしこのノードに限りそうではないようだ。

通常何も繋がない場合はデフォルト値が使われ、この場合Positionになっていてもおかしくない。

デフォルト値が設定されていないのはここにPosition以外の様々な座標が入ってくることを想定しているのだと思う。

「そもそもPositionノード自体に入力ソケットが無く、どこのPositionかわからないじゃん!」という方はフィールドという概念を知らないと思うので次の記事を参照。

【Geometry Nodes】フィールドって何?PositionやIndexの使い方【Blender】 | 謎の技術研究部

Position以外も使える

PositionノードをVectorに使う意外にNormalTangent方向を変える用途で使っているケースもあるようだ。

別のノード例

この場合はAlign Euler to Vectorノードに繋ぐ例のような場合だと思われるが、私も具体的な使い道を見つけられていないため参考までの掲載とする。

Axis Angleモード

日本語:軸の角度

Axis Angleモード

このノードは回転のモードを何種類か選べる。

まずはデフォルトのAxis Angleモード。

中央に軸を差して回転するモード

回転の中心であるCenterと回転軸Axisを設定してからAngleで回転する。

例を見たほうが理解が早い。

設定例

Centery=1AxisZ=1にした場合。

picture 7

赤い点がCenter, 赤い縦線はAxisの延長線だ。

動かすと次のような回転になる。

Axisを軸として回転している。

Invertは回転を反転するだけ

Invert外観

Invertオプションは回転を反転するだけなので解説は省略する。

XYZ Axisモード

Axis外観

上の例ではAxisにベクトルを直接入れたが、こちらはもっと簡単。

例えばX AxisモードにするとXを軸として回転する。

XAxis設定例

実行結果

Centerの概念は同じ

これらのモードにもCenterソケットがあるが、基本は上で述べたのと同じ。

Axisの位置をこのCenter分ずらすと考えると分かりやすいかも。

例えばZ=2にすると

Z=2に変更

X軸がZ方向(上)に2ズレているのが分かる。

Eulerモード

日本語:オイラー

Eulerモード外観

このモードになるとAngleの代わりにRotationが増える。

通常のTransformと同じ動き

Rotationの設定はよく使うTransformと同じでXYZ軸ごとに角度を入力できる。

これに関しては解説は不要だと思う。

Transformの同じ項目

Align Euler to Vectorとともに使う

以前にAlign Euler to Vectorを紹介したがSet Positionには直接使えない。

繋げないソケット

そこでこのVector Rotateを間に挟むという手法はとてもよくある例。

例えばローカルのZ軸を特定の方向に向けたいという例。

青玉

わかりやすく別オブジェクトで青玉を用意して、次のように接続する。

ノード例

この状態で青球を自由に動かしてみると

Set Positionを使って整列の回転ができた。

この動きはオブジェクトモード中キーボードのRR(2回押し)の回転と同じような回転。

TransformノードではなくSet Positionノードが使いたいときはこれを覚えておくと良い。

作例

このノードを使ってブランコの簡単な動きを作ってみた。

単純な例なので重力による加速は考慮していない。

ノード例

Sineを入れただけだと-1 ~ 1度しか回転しないんじゃないか。なぜ大きく振っているのか。

答えはAngleソケットに入ってくる値はラジアン値として扱われるから。

最大の出力は1ラジアン=約57度。

次の箇所で簡易解説しているので、気になればぜひ。

Align Euler to Vector(オイラーをベクトルに整列)ノードを解説:前編【Blender - Geometry Nodes】 | 謎の技術研究部

さいごに

実は個人的にこのノードはあまり使わない。

Align Euler to VectorRotate Eulerと組み合わせて使うケースも時々あるとは思う。

ただ「そういうときはコレ!」という作例がなかったので残念ながら見送り。

私も色々意識して研究していきたい。

AI生成のイラスト



謎の技術研究部 (謎技研)