Non-Uniform Rational B-Spline (NURBS)

NURBSとは?

NURBSとはnon-uniform rational B-spline(非一様有理Bスプライン)の略です。 Non uniform rational B splineは3Dを表現します。

3Dジオメトリを表現するのにNURBSを使う理由

NURBSジオメトリは次に挙げる5つの理由からコンピュータ支援によるモデリングには最適です。

NURBSジオメトリを交換するにはいくつかの業界標準の方法があります。 これはユーザーの貴重な幾何学モデルを、いろいろなモデリング、レンダリング、アニメーション、または工学解析ソフト間でやりとりできるということを意味します。 これらのソフトはユーザーの幾何学情報をまだ十分使えるような方法で20年先でも保存しておくことができます。

NURBSには正確な定義があり、その定義の方法は広く知られています。 NURBSジオメトリの数学またはコンピュータ科学における使い方はほとんどの主な大学で教えられています。 そのため、カスタムアプリケーションを作る必要のあるカスタムソフトウェアの販売者、工学チーム、工学デザイン事務所、アニメーション作成会社などは、NURBSジオメトリに精通したプログラマを容易に見つけだすことができます。

NURBSは、線、円、だ円、球、トーラスなどの標準幾何学オブジェクトから、車体や人体などの自由ジオメトリまで正確に表現することができます。

ファセットでオブジェクトを近似する一般的な方法より、NURBSの方法ははるかに少量なデータで一個分のジオメトリを表現できます。

後程説明するNURBS評価公式は、コンピュータに効率的かつ正確に導入することができます。

NURBSジオメトリとは?

この質問にはたくさんの答えが存在します。 数式に抵抗がない方は、openNURBSのウェブサイト(http://www.opennurbs.com/books.htm
)でNURBSに関する書籍などを見つけることができます。

RhinoはNURBSを使って曲線とサーフェスを表現します。 NURBS曲線とサーフェスは似たような形で操作することができ、用語もほとんど同じものが使われています。 曲線の方が説明しやすいため、ここでは曲線を取り上げて詳しく説明します。 曲線のツールについて触れますが、同じようなツールはサーフェスにも用意されています。

NURBS曲線は次数、制御点、ノット、そして評価公式の4つで定義されます。

次数(degree)は正の整数で表されます。

この数値は普通1、2、3、または5です。Rhinoの線とポリラインは次数1、Rhinoの円は次数2、そしてRhinoの自由曲線のほとんどは次数3または5です。Rhinoは次数1から32までのNURBSを取り扱うこともできます。次数1-5をそれぞれlinear、quadratic、cubic、quinticともいいます。 linearは一次、quadraticは2次、cubicは3次、quinticは5次を意味します。

NURBS曲線について書かれた論文の中には、階数(order)について説明しているものもあります。 NURBS曲線の階数は正の整数で、次数の数値に1を足して得られます。 同じように、次数は階数の数値から1を引いて得ることができます。

NURBS曲線の次数を上げてその形を保つことはできます。 しかし、次数を下げればNURBS曲線の形は必ず変わります。 Rhinoは、次数を1から32の間で変更できるツールを備えています。

制御点(control points、コントロールポイント)は次数に1を足した数またはそれ以上の複数の点のリストです。

NURBS曲線のジオメトリを変える最も簡単な方法の1つは制御点を動かすことです。 Rhinoには制御点を動かす方法がいくつかあります。 NURBS曲線を自由におおざっぱに調整するには、マウスで制御点を1つ1つドラッグして動かします。 Rhinoは正確で細かい調整をするためのツールも揃えています。

制御点には重み(weight、ウェイト)と呼ばれる数値が付いています。 少数の例外を除けば、重みは正の数値です。 曲線の制御点の重みがすべて同じ(通常1)である場合、その曲線は非有理(non-rational)と呼ばれ、そうでない場合は有理(rational)と呼ばれます。 NURBSのRは有理(rational)のRで、これはNURBS曲線が有理化される可能性があることを意味します。 実際は、ほとんどのNURBS曲線は非有理曲線です。 円やだ円など、いくつかのNURBS曲線は常に有理曲線です。 Rhinoは制御点の重みを表示するツール、そして変更するツールを備えています。

ノット(knots)は次数にN-1を足した数値のリストです。この場合のNとは制御点の数です。 この数値のリストをノットベクター(knot vector、節点ベクトル)と呼ぶことがあります。 この場合の「ベクター」は3次元空間内の方向と関係はありません。

ノットの数値のリストはいくつかの特殊な条件を満たさなければいけません。 この特殊な条件を満たす標準的な方法は、ノットのリストの各数値が前の数値と同じか小さくなること、そして重複するノットの数が次数の数を超えないことです。 例えば、次数3で15の制御点があるNURBS曲線の場合、0,0,0,1,2,2,2,3,7,7,9,9,9はノットのリストとして認められます。 しかし、0,0,0,1,2,2,2,2,7,7,9,9,9というリストには2が4つあり、この4という数字は次数より大きいため、ノットのリストとは認められません。

ノットが何回重複されているかをノットの多重度(multiplicity)といいます。 前の例では、ノット値0は多重度が3、ノット値1は多重度が1、ノット値2は多重度が3、ノット値7は多重度が2、そしてノット値9は多重度が3です。 ノットが次数の数だけ重複されている場合、そのノット値は完全多重度ノット(full-multiplicity knot)であるといいます。 前の例ではノット値0、2、9は完全多重です。 重複されていないノット値は単純ノット(simple knot)といいます。 前の例ではノット値1と3は単純ノットです。

ノットリストが完全多重ノットで始まり、その後単純ノットが続いた後に再び完全多重ノットで終り、しかもこれらのノット数値の増加値が一定している場合、これらのノットは一様であるといいます。 例えば、次数3で7つの制御点があるNURBS曲線に0,0,0,1,2,3,4,4,4のノットがあるとすると、この場合のノットは一様です。 リストが0,0,0,1,2,5,6,6,6の場合は、そのノットは一様ではありません。 均一でないノットは非一様(non-uniform、非均一)といいます。 NURBSのNUはnon-uniform(非均一)のことで、NURBS曲線のノットは非均一になることが許されていることを意味します。

ノットリストの中のノット値が重複しているとNURBS曲線は滑らかではなくなります。 極端な場合、ノットリストの中に完全多重度ノットがあるということはNURBS曲線の一個所が曲げられて鋭いキンク
が発生する可能性があるということを意味します。 この性質を利用して、デザイナーの中には、ノットを追加または削除してから制御点を調整して曲線をより滑らかなものに、あるいはもっと鋭く尖った形にすることを好む人もいます。 Rhinoは、ノットの追加と削除を行うツールを備えています。 Nを制御点の数とすると、ノットの数はN + 次数 – 1なので、ノットを追加すると制御点も追加され、ノットを削除すると制御点も削除されます。 ノットはNURBS曲線の形を変更することなく追加することもできます。 しかし一般的には、ノットを削除すると曲線の形も変わります。 Rhinoは制御点を削除すると自動的に適切なノットの削除も行われる、高度なノット削除インターフェイスを用意しています。

ノットと制御点には常に一対一の関係があると思われがちですが、これは間違いです。 次数1のNURBS(ポリライン)のノットと制御点には確かに一対一の関係があります。 しかし次数が1以上のNURBSの場合、2 x 次数値の数のノットと、次数値 + 1の数の制御点が対応して順番にグループ化されます。 例えば制御点が7つあり、ノットが0,0,0,1,2,5,8,8,8で次数 3のNURBSの場合を例に挙げましょう。この場合まず、最初の4つの制御点が最初の6つのノットに対応してグループになります。 次に2番から5番目の制御点がノット0,0,1,2,5,8に対応してグループになります。3番から6番目の制御点はノット0,1,2,5,8,8に対応してグループになります。最後の4つの制御点は最後の6つのノットに対応してグループになります。

NURBS評価に古いアルゴリズムを採用しているモデラーもあり、これらのモデラーでは、2つの余分のノット値が必要で、ノット数は次数値 + N + 1になります。 NURBSジオメトリをインポートしたりエクスポートしたりする際は、Rhinoは必要に応じてこの2つの余分のノットを追加したり、削除したりします。

評価公式には数値を入力して点を出力する数学式を使っています。

この式は次数、制御点、そしてノットを使用します。 また、この式にはBスプライン基底関数(B-spline basis functions)も含まれています。 NURBSのBSは B-spline(Bスプライン)のことです。 評価公式に入力する数値はパラメータと呼ばれます。 この評価公式を数値を入れると点が出てくる1つのブラックボックスと考えてみてください。 次数、ノット、制御点はこのブラックボックスの働きを決定します。

RhinoにはNURBS評価ツールがあります。 NURBS曲線を選択して、パラメータを入力すると点が得られます。

概念的にノットはBスプライン基底関数を決定します。 パラメータのBスプライン基底関数の値は、どのように点を得るために制御点と重みが平均されるかを決定します。 この評価公式とBスプライン基底関数については、多くの教科書やWEBサイトで詳しく説明がされています。

より詳しくは

http://en.wikipedia.org/wiki/NURBS

NURBSについて