はじめに
Twitterで毎年恒例?らしいパラメトリックノードで作成した作品を見せ合うようなイベントでこのノードを使いました。
上記のツイートでは3枚(水色、緑、赤)のNURBS Surfaceがあり、それぞれNURBS Curve から作成しています。
しかしドキュメントを読んでいなかったので更なる理解の為に読んでみます
参照元
公式より
依存関係
このノードはオプション的にGeomdlライブラリを使用します
機能
このノードはいくつかのNURBSカーブまたはNURBSのようなカーブからスキニングやロフティングと呼ばれる操作でNURBS Surfaceを作ります。ロフティングではいくつかのカーブを補間してサーフェスを作ります。なのでこのノードはある種Surface from Curves ノードに似ています。違いは
- NURBS Loft はNURBSやNURBSのようなカーブでのみ動作します、一方で”Surface from Curves”は任意です(式による指定など)
- NURBS Loft は常にNURBS Surfaceを作ります; そのようなサーフェスは特定のAPIメソッドが適用でき、特定のファイルフォーマットで保存する事も出来ます(現時点では、”NURBS to JSON “ノードを参照してください。後に、いくつかの業界で使用されている形式でNURBSを保存するノードが現れる可能性があります)。
- NURBS Loft は通常次のようなタイプのカーブで効率的に動作します
- NURBS curves
- Bezier curves
- Cubic splines
- Polylines
- Circular arcs
- Line segments
単純なカーブから構成され複雑なカーブを出力するノード(例: Rounded rectangle) はNURBS 出力パラメータ出力用のチェックボックスを持ちます。それがチェックされていればNURBS Curveを出力しますので”NURBS Loft”はそれらで動作する事も出来ます。
このノードは入力カーブの程度に関する制限も持っています。ノードが動作する為に入力は必ず
- すべてが同じ程度である
- あるいは、曲線の中で次数が他の曲線よりも小さいものがある場合、そのような次数の小さい曲線は、次数に1を加えた数の制御点を持たなければならない
入力
このノードは下記の入力を持ちます
- Curves *必須* ロフトを作るためのカーブ。この入力はLEVEL3までネストれていても(リストのリストのリストのカーブ)処理できます。カーブのリストごとにDegreeV入力からの値を使用するために この入力は必須です
- 🤔3次元配列のカーブでもOKという事ですね
- DegreeV V 方向の補間に使用される NURBS 曲線の度数。Sverchokの数値入力のほとんどがそうであるように、この入力はネスティングレベルが2までのデータを処理することができます(数値のリスト)。度数を1にすると、”線形ロフト”、すなわち、複数の罫線のあるサーフェスから構成されたサーフェスになります; 度数を高くすると、より滑らかなサーフェスになります。デフォルト値は3です。
パラメータ
このノードは下記のパラメータを持ちます
- Implementation. これはどのNURBS数学の実装が使われるかを定義します。利用可能なオプションは
- Geomdl Geomdlライブラリを使用する。このオプションはGeomdlがインストールされている場合にのみ利用可能です
- Sverchok ビルドイン実装を使う
一般的にビルドイン実装が最も速いです。しかしGeomdl実装はよくテストされています。利用可能な場合、デフォルトはGeomdlです。されていなければビルドイン実装です。
- U Knots このパラメータはN-Panelのみで利用可能です。これは、ノードが入力曲線をどのように修正して、全く同じノットベクトルを使用するようにするかを定義します。使用可能なオプションは以下の通りです。
- Unify 他のカーブのノットがある場所には、各カーブごとに追加のノットを挿入します。
- Avarage 入力曲線のノットベクトルを平均化してノットベクトルを計算します。これは、入力曲線が同じ数の制御点を持つ場合にのみ機能します。
Unify オプションはよく多くの追加の制御点を追加します。その方が汎用性が高く、多くの場合、より正確です。平均モードは追加の制御点を作成しないので、より高速に動作し、生成されたサーフェスで作業する後続のノードもより高速に動作します。デフォルト値はUnifyです。
- Metric このパラメータはN-パネルのみで利用可能です。V方向の補間に使われる距離タイプです。利用可能な値は
- Manhattan
- Euclidian
- Points(just number of points from the beginning)
- Chebyshev
- Centripetal(square root of Euclidian distance)
出力
このノードは下記の出力を持ちます
- Surface 作成されたNURBS Surface
- Unified Curves 実際にSurfaceを作るのにつかわれたカーブ。入力されたCurveと同じ、しかし同じ大きさとKnotベクトルに統一されている
- VCurves サーフェスのV方向に沿ったカーブで、スキニング処理中にサーフェスのコントろーろポイントを計算する為にしようされたもの
使用例は公式にもあるので見てみてください
使ってみる
最初のTwitter画像に戻ります。赤→緑→黄色がNURBS Curveでこの間を補完するようにサーフェス(面)が作られていますね。
- それぞれのNURBS Curveを用意する
- 赤いカーブと黄色いカーブの2点でも補間可能だが、丸みを帯びている為中間の緑のカーブを追加
- 3つのカーブをList joinでList化している
- 白い四角で囲んだノードが Nurbs loftでサーフェスを作成している
- 次のEvaluate surfaceで頂点、辺、面などBlenderで扱うデータへ返還
- 重複した点を除くためにMerge by distanceを行って表示
最後に
NURBSはCADで使用されるデータらしくそのデータフォーマットで出力する機能もあるようですね。とても便利。