Blender Sverchok NURBS Sweep ノードを見てみる

Sverchok

はじめに

NURBSを勉強しておけばBlenderに限らず色々流用できそうなのとモデリングスキルも上がりそうなので学習します

参照元

https://github.com/nortikin/sverchok/blob/master/docs/nodes/surface/nurbs_sweep.rst

公式より

依存関係

このノードはオプション的にGeomdlライブラリまたはFreeCADライブラリが使えます

機能

このノードはプロファイルと呼ばれるNURBSカーブを別のパスと呼ばれるNURBSカーブに沿ってスイーピングする事でNURBS Surfaceを作成します。

1つ以上のプロファイルカーブが使用でき、その場合は結果はそれらを補間したものとなります。もしいくつかのプロファイルカーブが使われたら、利用者はプロファイルカーブの位置する場所を指定する為にカーブTパラメータに特定の値を渡せます。渡さない場合は自動的に均等に配置されます。

提供されたプロファイルカーブは、最初はグローバルオリジン近くに配置されると考えられています。もしプロファイルカーブがグローバル原点を通過した場合、結果として得られる曲面はパス曲線を通過することになります。

このノードはパスカーブに沿ってプロファイルカーブをコピーして配置する事で動作します、そしてそれらをロフティング(スキニング)します。複数のプロファイル曲線が使用されている場合、ノードはそれらの間を補間し、これらの補間された曲線をパス曲線に沿って配置します。

プロファイルカーブの回転計算をするためのいくつかのアルゴリズムが利用可能です。最も単純なケースではすべての回転は非常に似た結果となります。より複雑なケースでは、結果がかなり異なったものとなるでしょう。異なったアルゴリズムは異なったケースでベストな結果を出します

  • “Frenet “または “Zero-Twist “アルゴリズムは、押し出しカーブがすべての点でゼロではない曲率を持つ場合に非常に良い結果をもたらします。もし押し出しカーブの曲率がゼロ、またはより悪いケースだと直線のセグメントを持つものならこれらのアルゴリズムは、”反転 “面を作るかエラーを出すかのどちらかになります。
  • “Householder”, “Tracking”, “Rotation difference”アルゴリズムはカーブにとらわれません。それらはカーブとは独立して動作します。接線の方向のみに依存します。すべてのカーブの押し出しで”十分に良い”(少なくともエラーを出したり、突然ひっくり返ったりはしません)結果を出しますが、ねじれたサーフェスを特定のケースでは作ります
  • “Track normal”アルゴリズムはすべての押し出しカーブにおいてねじれる事なく良い結果を生むように意図されています。解像度が高い場合に良い結果を生みますが処理は遅いです。
  • “Specified Y”アルゴリズムは2つの条件を満たすように回転を選択します: 1) プロファイル平面が曲線の接線ベクトルに垂直であること 2) プロファイル曲線の局所的なY軸がユーザによって与えられた “法線 “ベクトルの一般的な方向を指していることです。このアルゴリズムは、平面またはほぼ平面の経路曲線に対して良い結果を与えると考えられています。結果として得られる曲面は、元の曲線の接線ベクトルがオフセット操作平面の法線に平行である(すなわち、接線がオフセット操作平面に垂直である)場所では、ねじれを持つことがあります。

このノードは”Extrude Curve along curve”ノードに似ています。違いは

  • “NURBS Sweep”はNURBSやNURBSのようなカーブでのみ動作します、一方で”Extrude Curve along curve”は任意のカーブです(式による指定など)
  • NURBS Sweep は常にNURBS Surfaceを作ります; そのようなサーフェスは特定のAPIメソッドが適用でき、特定のファイルフォーマットで保存する事も出来ます(現時点では、”NURBS to JSON “ノードを参照してください。後に、いくつかの業界で使用されている形式でNURBSを保存するノードが現れる可能性があります)。
  • “NURBS Sweep” いくつかのプロファイルカーブをサポートしています

他に似たノードとして”NURBS Birail”がありますが、Birailノードは1つではなく2つのパスカーブを使います。

現時点では、このノードは以下のタイプの曲線を効果的に扱うことができます

  • NURBS curves
  • Bezier curves
  • Cubic splines
  • Polylines
  • Circular arcs
  • Line segments

単純なカーブから構成され複雑なカーブを出力するノード(例: Rounded rectangle) はNURBS 出力パラメータ出力用のチェックボックスを持ちます。それがチェックされていればNURBS Curveを出力しますので”NURBS sweep”はそれらで動作する事も出来ます。

入力

このノードは下記の入力を持つ

  • Path 必須 プロファイルカーブがスイープするカーブ
  • Profile 必須 1つまたはパスごとにリストになったカーブ
  • VSections このノードがロフティングの為にプロファイルカーブをコピーする数(いくつかのプロファイルカーブが与えられている場合は補間カーブ)。これは結果のサーフェスV方向に沿った制御ポイントの数と等しくなります。通常、値が大きいほどスイーピングの制度が高くなりますが、高すぎると変な結果になったり処理が遅くなります。初期値は10です
  • V Vパラメータの値(すなわちカーブのTパラメータ)、ロフティングの為のプロファイルカーブの配置されるところになります。Explicit V Valuesパラメータがチェックされている場合にこの入力は利用可能となり必須になります。このノードは、この入力の値の数がプロファイル曲線の数に等しいことを期待しています。1つのプロファイル曲線に対しては,この入力は意味を持ちません。
  • Resolution Zero-Twist または Track normal 回転アルゴリズムの場合のサンプル数。より大きい数値でより精度が高くなり、初期値は50です。この入力はAlgorithmパラメータがZero-TwistまたはTrack normalになっている時のみ利用可能です。
  • Normal 方向ベクトル。この入力はアルゴリズムパラメータが”Specified Y“に設定されている時のみ利用可能です。デフォルトバリューは(0, 1, 0)です

パラメータ

  • Implementation. 使用するNURBS数学の実装を定義します。利用可能なオプションは以下の通りです。
    • Geomdl. Geomdlライブラリを使用します。このオプションはGeomdlパッケージがインストールされている場合のみ有効です。
    • Sverchok. Sverchokのビルドイン機能を使います
    • FreCAD FreeCADライブラリを使います。このオプションはGeomdlパッケージがインストールされている場合のみ有効です。

一般的にビルドイン実装が最も速いです。しかしGeomdl実装はよくテストされています。利用可能な場合、デフォルトはGeomdlです。されていなければビルドイン実装です。

  • Algorithm パスカーブに関連してプロファイルカーブの方向を計算するアルゴリズム。利用可能なオプションは
    • Noneプロファイルカーブを回転せず、ただそのまま押し出す。このモードがデフォルト
    • Frenet押し出しカーブのFrenetフレームに従ってプロファイルカーブを回転する
    • Zero-Twist 押し出しカーブのzero-twistフレームに従ってプロファイルカーブを回転する
    • Householder Householder反射マトリックスによる回転計算(参考: ハウスホルダー変換の使用)
    • TrackingBlenderの”Tracking to”キネマティックコンストレイントのアルゴリズムと同じアルゴリズムを使う。このノードは現在常にX軸をUp軸として使う
    • Rotation difference 2 つのベクトル間の回転差として回転を計算します
    • Track normal曲線に沿って追跡することにより、一定の法線方向を維持しようとします
  • Explicit V Values チェックされている場合、利用者はパスカーブのパラメータ値の値を提供する機能を持ち、パスカーブが配置される場所を指定します。そうでなければノードが自動計算します。プロファイルカーブが1つのみの場合はこのパラメータに意味はありません。
  • U Knots このパラメータはNパネルでのみ使用可能です。これは、ノードが入力曲線をどのように修正して、全く同じノットベクトルを使用するようにするかを定義します。使用可能なオプションは以下の通りです。
    • Unify他のカーブのノットがある場所には、各カーブごとに追加のノットを挿入します。
    • Average入力曲線のノットベクトルを平均化してノットベクトルを計算します。これは、入力曲線が同じ数の制御点を持つ場合にのみ機能します。

Unify 結果のサーフェスの為にオプションはよく多くの追加制御点を生成します。より普遍的であり、多くの場合、より正確。

Average モードは制御点を追加しませんので動作速く、後続のノードの処理でも早くなります。しかし普遍性が少なく多くの場合で正確性の欠けた補間となります。デフォルトはUnifyです

  • Metric このパラメータはNパネルのみで利用可能です。V 方向に沿った補間に使用する距離タイプ。使用可能な値は以下の通りです。
    • Manhattan
    • Euclidian
    • Points ( 開始点からのポイントの数)
    • Chebyshev
    • Centripetal (ユークリッド距離の平方根)
    • デフォルトオプションはEuclidian

出力

  • Surface 生成されたNURBSサーフェス
  • AllProfilesサーフェスを構築するのに実際に使われたカーブ。これらはプロファイル入力で提供された曲線であり、パスカーブに沿った位置に配置され、補間されています(複数のプロファイルが使われている場合)。
  • VCurves表面のV方向に沿った曲線で、スキニングの際に表面の制御点を計算するために使用されました。

使用例

公式にあるので見てみてください

使ってみる

直線とアーク

  • パスが直線
  • プロファイルがアーク
  • 赤がパスで、このパスに沿ってプロファイルを作成する
  • 青がプロファイル。XY平面に置かれた曲線
    • 🤔プロファイルはYX平面上に置かれていると考えられているようなので地面から上にアーチを描くようなゲートのイメージになるはずですね
    • 今はX0 からアーチを作っていますが、Xを正または負の方向にずらすとプロファイルも宙に浮いたようなイメージとなる
  • 青い線と赤い線を作るためのノードは見本の為に作成しただけなので最小化
  • NURBS Sweepを接続した図
    • 🤔PathはX = 0からX = 2まで伸びる直線なのでプロファイルの始点終点も X = 0 から X = 2 まで連なっていますね
アルゴリズムを変更してみる
  • 赤枠の部分を変更します
  • 🤔Pathが直線なのでマニュアルにあった通りFrenetとZero-TwistとTrack normalではエラーとなりました。形状がちゃんと表示されているのはそれ以前の形状のままになっているだけです。

円とアーク

  • パスが円
  • プロファイルがアーク
  • 🤔アルゴリズムがNoneなのでプロファイルは一切回転せずそのままパスに沿ってコピーされていますね
アルゴリズムを変更してみる
  • 🤔Zero-Twistはエラーになりました。なぜなんだろう
  • 🤔Tracking はBlenderの”Tracking to”キネマティックコンストレイントのアルゴリズムと同じという事でZ >= 0 の部分とZ < 0の部分で回転が反転していますね

最後に

なんとなくわかったもののアルゴリズムはいくつか具体的に割り当てるパターンに出会わないと理解できなさそうです。難しい

コメント

  1. […] 🤔アルゴリズムの違いはこちらで少し検証していますので参考になるかもしれません […]

タイトルとURLをコピーしました