NURBS

NURBSはNon-Uniform Rational B-Spline（非一様有理Bスプライン）の略で、曲線や曲面を生成するためにコンピュータグラフィックスで一般的に採用される数学的モデルである。その柔軟性と正確性からモデリング用の形状にも、解析的な用途にも向いている。

歴史

NURBSは1950年代に船体や航空機自動車の外表面形状に使われるような自由曲面を数学的に正確に表現する必要のあったエンジニア達によって開発された。必要に応じていつでも完璧に同一の形状が再生成されるような仕組みはそれ以前にはなく、曲面を表現するにはデザイナーによって形作られた物理的な模型を用いる他なかった。
この開発におけるパイオニアは、共にフランス出身のルノーのエンジニアピエール・ベジェとシトロエンのポール・デ・カスティリョ がいる。ベジエとデ・カスティリョはほとんど同時に開発を進めており、そのことを互いに知らなかった。このモデルが一般的にコンピュータグラフィックスのユーザ間でスプライン曲線のひとつであるベジェ曲線として知られているのは彼が自分の研究を出版したからである。いっぽうデ・カスティリョは彼の開発したパラメトリック曲面を評価するためのアルゴリズムとして知られるのみにとどまる。1960年代にNURBSはベジェ曲線の一般化されたモデルであることがわかった。NURBSがその名の通り非一様有理Bスプラインであるのに対し、ベジェ曲線は一様非有理Bスプライン（uniform non-rational B-splines、ただし、一様非有理BスプラインとかUNRBSと呼ばれることはない）といえる。
当初はNURBSの利用は自動車メーカー内で用いられるプロプライエタリのCADソフトのみに限定されていた。その後標準的なコンピュータグラフィックスソフトにも採用されていった。
1989年にSilicon Graphicsのワークステーション上で初めてリアルタイムでインタラクティブなNURBSのレンダリングが可能になった。1993年にはCAS Berlinというベルリン工科大学と共働関係にあった小さなスタートアップ企業がNöRBSという名のパーソナルコンピュータ上で動作するNURBSモデラが開発された。こんにちほとんどのプロフェッショナルなデスクトップCGソフトはNURBSの技術を採用している。そのうちのほとんどはそれ専用の企業からNURBSエンジンを購入している。

使用

NURBSはCADやCAM、CAEで一般的に用いられており、IGES、STEP、ACIS、PHIGSなど数々の世界標準に採用されている。コンピュータグラフィックスソフトやアニメーションソフトウェアパッケージにも採用されていることがある。MayaやCinema 4Dが有名である。
NURBSはコンピュータプログラムにとって都合がよいだけでなく、人間による編集にも向いている。NURBS曲線を布の縦糸と横糸に使ったものがNURBS曲面といえる。その形状は制御点(control point)により定義され、制御点を編集し移動することによって曲面形状を変化させられる。
NURBS曲面は特に、やや単純な幾何形状をコンパクトに表現するのに強みがある。俗に有機的曲面と呼ばれるキャラクタなどのモデリングにはサブディビジョンサーフェスが向いており、実際ゲーム業界やアニメーション業界ではNURBSよりもこちらのほうが普及している。サブディビジョンサーフェスは全体が柔らかい生物的なモデルには無類の強さを誇るが、数学的に尖った角のある形状はどうしても表現できないためCADでの利用はまずない。NURBSの数学的な正確性という強みとサブディビジョンサーフェスの柔らかな形状という強みを併せ持った新しいスプラインがT-スプラインである。これらはNURBSの2分の1の制御点数で柔らかな形状を表現できる。
一般的に言って、NURBS曲線やNURBS曲面の編集は極めて直観的で予想を裏切らないものである。制御点は曲線や曲面の上を通っているか、そうでなければゴムバンドで繋いであるかのように曲線・曲面を引っ張っているように感じられる（非一様有理でない単純なBスプラインでは、一般に制御点が曲線・曲面上を通らない）。モデリングはベジェ曲線のように要素の制御点をいじって編集することもできるし、より高度なスプラインモデリングのような階層状の制御を行うこともできる。スプラインモデリングとは、NURBS曲面の四角い「布」のうち数辺のみをNURBS曲線で定義して曲面そのものの生成はソフトに任せる方法である。こうすることで本来無数の制御点が必要になるような複雑な形状をずっと少ない制御点で表現されるスプライン数本で滑らかに表すことができる。

制御点

制御点は一般に曲線上の点ではなく、曲線の形状を決定するために用いられる。曲線上のとある点の位置は、その前後に配置されたいくつかの制御点の位置の重み付き線形和で表現される。制御点が曲線上の各点に与える影響は、その点と制御点の間の距離によって定義され、一般には距離が短いほど影響が大きくなる。次数の曲線、すなわち各制御点への重みがパラメータの次多項式で定まる基底関数により表現される場合を考えると、パラメータ空間は各制御点により個に分割され、その区間内でのみ曲線上の点に影響を与える。これらの区間の両端では、基底関数の値は滑らかに0に近づく。この時の曲線の滑らかさは曲線の次数により決定される。
基底関数の一例として次数が1のものを考えると、これは三角形関数（テント関数）であり、その値は0から1へ向かって線形に上昇し、その後、1から0へ向かって線形に降下する。この場合、次数が1であることから、曲線のとある区間上の点は2つの制御点から影響を受ける。基底関数が0から1へと上昇する間に、2つの制御点のうち手前の制御点からの影響が低下していく。この結果として得られる曲線（曲面）は基底関数の連続性から、ポリライン（あるいはポリゴン）であり、連続性を持つものの、制御点が影響を与える区間の端点においては微分不可能である。なお、区間の内部の点においては、基底関数が多項式であり、基底関数により定まる重みと制御点の位置の線形和で曲線が定義される以上、曲線は十分に滑らかで無限階微分可能である。
多くのアプリケーションにおいて、上記のような制御点が特定の区間内の曲線にのみ影響を与える、すなわち基底関数の台が局所的であることが有利に働く。三次元形状のモデリングにおいては、一つの制御点を移動して形を整える際、一部の形状のみが変化して、それ以外の領域には影響を与えないためである。
とある曲線（例えばペンで紙にスケッチしたカーブ）を制御点により定義される多項式曲線により近似したい場合、理論上は制御点は多ければ多いほど近い形状を得ることができる一方で、有限個数の制御点で表せる曲線には限界がある。そのため、NURBS曲線において、個々の制御点にはウェイトというスカラー量が設定されており、これにより制御点の数を増やすことなく、より自由度の高い曲線の表現が可能となっている。NURBS曲線の一種と考えられるB-スプライン曲線等では各制御点への重みは一様に1となっているが、これを一部のみ2とすればその制御点の影響力が2倍になり、0とあれば影響力はなくなる。このような重みの非一様性（non-unifomity）の結果として各制御点にかかる重み付き線形和の係数が有理関数（rational function）で表されることがNURBS（Non-Uniform Rational B-Spline）の名前の由来である。この結果としてNURBS曲線は、主に円や楕円などの円錐曲線を数学的に厳密に表現できることに加え、通常の三次元モデリングにおいては、この他のスプライン曲線と同様に、重みを意識せずに利用することができる。
また、曲線や曲面といった形状処理以外の応用に目を向けると、制御点には一般的な次元の概念を見いだせる。通常、曲線を定義する場合には二次元座標上の点を、曲面を定義する場合には三次元座標上の点を制御点として用いるが、制御点の次元が二次元ないし三次元である必要はない。例えば一次元の制御点は画像処理におけるトーンマッピング曲線を定義などの目的で用いられている。また、ロボットアームの制御においては、アームの制御空間の次元は、アームの動きの自由度と等しくなり、一般に3より大きな値をとる。そのため、ロボットアームの制御において、より滑らかな動きを実現する目的では、より高次元の制御点により定義された高次元空間上の曲線が用いられる。このように、制御点と曲線は同一の次元を持つ空間上に定義され、ある一次元の曲線パラメータによって曲線が定義されるが、複数のパラメータの間で制御点を補間することにより、曲面やより高次元の超曲面を定義することも可能となる。

次数と階数

NURBS曲線の階数orderは、その曲線上の任意の点へ影響をおよぼす制御点の数である。次数degreeはその曲線の項の数である。階数＝次数+1であり、曲線は次数（つまり階数−1）個の項をもつ多項式であらわされる。階数2のNURBS曲線の次数は1であり、つまりy=ax+bのような直線である。次数2のNURBS曲線の階数は3となり、2つの項で構成される線形多項式で表現される。そのため二次曲線と呼ばれる。同様に階数4であれば次数3, 3次関数を表す。制御点の数は階数以上である必要がある。大抵のCADではそれ以下の制御点で曲線描画が終われないか、そうでなければとりうる最高の階数に置き換えられる（例えばRhinoceros 3Dで次数5に指定して曲線を描く場合、ほんとうに次数5の曲線にしたいのならば初点と終点を含めて6点以上制御点をうてばよく、4点しか打たなかった場合は次数が3、3点しか指定しなかった場合は次数が2の曲線になる）。
定義上は階数5や階数7のものも問題ないが、実際のCADでは2,3,4,6,8（それぞれ次数が1,2,3,5,7）、特にほとんどの用途がこなせる階数4=次数3の曲線が多く用いられる。高い階数のものはより滑らかになるが、高すぎる階数は内部的に数値的問題を引き起こしやすく、しかも計算が無意味に遅くなるため実用上意味がない。

ノットの追加

ノットの追加は文字通りノットをノットベクトルに追加する変形。曲線の次数がであるとき、個の制御点が新しい個の制御点で置き換えられる。ノットの追加は曲線の形状自体は変更しないが、制御点は移動する。ノットは複数回追加できる。

曲率

微分幾何学において最も重要なのは曲率である。曲率はその曲線のエッジやコーナーなど局部的な様子を示すのに最適である。1次と2次の導関数の関係性を示すものでもあるため、曲線の形状を正確に知るためにも有用である。一度導関数がわかれば簡単な計算で曲線全体の曲率がわかる。

または近似式で2次導関数の弧長で計算することもできる：
.
このような曲率の直接的な計算ができることは、ポリゴンによる表現に対するNURBSのような媒介変数曲線の大きな強みである。