見出し画像

BlenderのCurveにおけるTwistMethodによる挙動の違い

あけましておめでとうございます

去年はぜんぜん書けてなかったので、2023年はもうちょっと記事を書いていこうかなって思ったけど、3日以内に忘れる予定です。

今回はCurveの向きについて調べてみるよ!

BlenderのCurveの向きってほんと直感的じゃないですよね(´・ω:;.:...

BlenderのCurveには向きの計算方法が3つあります。Curveの設定にあるTwistMethodっていうのがそれですね。

正確にはTwistの計算方法、なんですが大雑把に向きの決め方って見てそんなに外れてないでしょう。これには以下の選択肢があります。

  • Minimum

  • Z-Up(今回調べる主体)

  • Trangent

今回はこれらの違いを見ていきます。

それではPathを一本作ってHalfPipeで表示してみましょう。

初期MethodはMinimum

初期状態ではTwistMethodはMinimumですがPipeがY方向に向いてます。もうすでに直感的ではないですね😇

なおCurveの法線表示はCurveを編集モードにしたときに設定できます。

Z-Upについて

ではTwistMethodをZ-Upにしてみましょう。

Z-Upにしたけど、変化がない/(^o^)\

Z-Up、とは?😇

実はこのZ-UpっていうのはCurveの向きのことを言ってるわけではないという..… 初心者殺し炸裂です✨

Z-UpはXY平面(ローカル座標系)ベースでCurveの形状が作られます。XY平面+Z-Up(右手座標系)で計算するよってことですね。Curveのセグメントを動かしてもMinimumみたいにカーブの向きがクルクル変わることがありませので、方向を確定させたいときは便利そうです☺️

方向を設定する時の考え方ですがX軸を基準にすると、X軸でCurveがプラス方向に向かっている(Startがマイナス側でEndがプラス側、簡単に言うと左から右)とき、Y軸のプラス方向が上になります。

この時Z方向にもセグメントを動かして大丈夫なのですが、気を付けなくてはならないのがXZ平面やYZ平面でStart(マイナス)側のセグメントがEnd(プラス)側にあるセグメントよりプラス側に行ってしまうと、形状にねじれが発生します。

XZ平面でStart側(白いセグメント)が次(右)のセグメントよりプラス
YZ平面でStart側(白いセグメント)が次(下)のセグメントよりプラス

Start側のセグメントは、XZ,YZ平面で常にEnd側のセグメントよりマイナス側にないといけません(あるいはStart側がEnd側より常にプラス)

このルールを守ってる限り方向がとても扱いやすいTwistMethodだと思います。直感的に操作しないスクリプトやGeometryNodesで作るのには向いているでしょうか。

なおオブジェクト座標系はCurveの向きに影響しないので、XY平面で形を作ったらオブジェクトを回転させて最終的な配置を行うことができます。

オブジェクトの回転は影響しないよ

ただですね? Curveを髪の毛に使いたい場合で考えると、髪の毛って縦横無尽に動くわけですよ。そんな髪の毛にXZ,YZ平面でプラスマイナスのルールを守れるかっていうと、、、毛先がクルンってした時点で終わっちゃう😇

だめかー(´・ω:;.:...

でもMeshで確定させちゃうならこちらで作ってもいいのかもしれない。

Tangentについて

タンジェント 和訳をすれば 接ベクトル(字余り)

つまり、こういうことなんですが..…

微分の授業を思い出しますね?

結局その点の進行方向が上向きになるって考えるとよいと思います。なので進行方向と上向きが同じである場合Pipeがつぶれます。

上向き=進行方向
つまり直線的になるほど潰れる

曲がり方がきついほど進行方向に対して垂直になっていくわけですが..…

使い道が全く思い浮かばないぞ?😇

Minimumについて

最後はみんな大好きMinimumです。自由にぐねぐねした形状つくるのだったら結局これ以外に選択肢がなさそうです。

ひとつ前のセグメントの進行方向+ロールと計算(ひとつ前がない始点はZ-Upっぽい)しているようですが、調べた限りでは実装方法は語られていませんでした。コード嫁ですかね?😇

前のセグメントの情報がない始点付近は座標移動による向きの変化が大きくなります。前のセグメントの進行方向のロールが後ろのセグメントに影響しますので、後ろのほうまでクルクル回ります。

終端をいじってるのに方向がクルクル回るときは、だいたいStartとEndの順番が逆になってて終端のつもりで始点をいじっているので、SegmentsメニューのSwitchDirectionをすれば直ることが多いです。

こちらはセグメントの位置関係によってリアルタイムで方向が変わるため、動く髪の毛には全く向いていませんね。

結局こちらもMesh化前提となります。

結論

BlenderのCurveはアニメーションする髪の毛には使えない(Mesh化しろ)


この記事が気に入ったらサポートをしてみませんか?