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、、PHIGSなど数々の世界標準に採用されている。コンピュータグラフィックスソフトやアニメーションソフトウェアパッケージにも採用されていることがある。MayaやCinema 4Dが有名である。
NURBSはコンピュータプログラムにとって都合がよいだけでなく、人間による編集にも向いている。NURBS曲線を布の縦糸と横糸に使ったものがNURBS曲面といえる。その形状は制御点(control point)により定義され、制御点を編集し移動することによって曲面形状を変化させられる。
NURBS曲面は特に、やや単純な幾何形状をコンパクトに表現するのに強みがある。俗に有機的曲面と呼ばれるキャラクタなどのモデリングにはサブディビジョンサーフェスが向いており、実際ゲーム業界やアニメーション業界ではNURBSよりもこちらのほうが普及している。サブディビジョンサーフェスは全体が柔らかい生物的なモデルには無類の強さを誇るが、数学的に尖った角のある形状はどうしても表現できないためCADでの利用はまずない。NURBSの数学的な正確性という強みとサブディビジョンサーフェスの柔らかな形状という強みを併せ持った新しいスプラインがT-スプラインである。これらはNURBSの2分の1の制御点数で柔らかな形状を表現できる。
一般的に言って、NURBS曲線やNURBS曲面の編集は極めて直観的で予想を裏切らないものである。制御点は曲線や曲面の上を通っているか、そうでなければゴムバンドで繋いであるかのように曲線・曲面を引っ張っているように感じられる（非一様有理でない単純なBスプラインでは、一般に制御点が曲線・曲面上を通らない）。モデリングはベジェ曲線のように要素の制御点をいじって編集することもできるし、より高度なスプラインモデリングのような階層状の制御を行うこともできる。スプラインモデリングとは、NURBS曲面の四角い「布」のうち数辺のみをNURBS曲線で定義して曲面そのものの生成はソフトに任せる方法である。こうすることで本来無数の制御点が必要になるような複雑な形状をずっと少ない制御点で表現されるスプライン数本で滑らかに表すことができる。
例えばモーターヨットの船体の表面をモデリングしていると仮定しよう。大抵の場合、モデルはNURBS曲面1枚では表しきれない（モーターヨットを一枚の伸縮自在の布で包むことは相当無理をすれば不可能ではないが、NURBSの性質上避けるべきである）。そのため「パッチ」と呼ばれる何枚かのNURBS曲面をつなぎあわせて継ぎ接ぎをすることになる。モーターヨットの船体を滑らかにしたい場合、継ぎ接ぎの跡は残したくない。複数のNURBS曲面を滑らかに、あたかも一枚の曲面であるかのように溶け込ませあうためには、数学的な幾何的連続性を確保しなければならない。
NURBSの特徴を活かし、高度なモデリングツールでは幾何的連続性を様々なレベルで実現することが可能である。
位置連続Positional continuity (G0): 2つの曲線・曲面が当該部分で「接続」されていることを保証する。接続しているだけなので、尖ったコーナーやエッジが生じる可能性がある。こういった接続ではハイライトは繋がっておらずトリップする。また製造過程で問題を起こすことがある。
接線連続Tangential continuity (G1): 当該部分でのベクトルが平行で、同じ方向を向いていることを保証する。この接続ではハイライトは繋がっているが滑らかでないことがある。ただネジやエンジン内部など審美的な要素の低い一般的な工業製品では十分な滑らかさである。このレベルの滑らかさを持っているサーフェスをクラスBサーフェスClass-B Surfaceと呼ぶことがある。エッジに単純な角丸（フィレット）をかけた場合、そのエッジは接線連続になる。
曲率連続Curvature continuity (G2): 接線連続G1よりさらに厳しく、当該部分でのベクトルが同じ長さ、かつ同じ変化率であることを保証する。曲率連続なエッジに落ちるハイライトは滑らかであるため、それら2つのサーフェスはあたかもひとつであるかのように見える。そのため人目に触れやすい外面の表面はこのレベルで表現されていることが望ましい。このレベルの滑らかさを持っているサーフェスをクラスAサーフェスClass-A Surfaceと呼ぶことがある。iPhoneなどのApple製品や一般的な自動車は曲率連続のサーフェスでモデリングされている。
NURBS曲線はその"次数"とウェイトの指定された複数の"制御点"のセット、そして"ノットベクトル"で構成される。前述のとおりNURBSはB-スプラインとベジエ曲線の一般化された表現だが、最大の違いは制御点がウェイトを持つことである。ウェイトを持つことを表すのが"有理rational"であるということで、NURBSはB-スプラインの有理である特別なケースである。
ベジエやNURBS曲線に含まれるパラメータ（媒介変数）を様々な値に変化させるとその曲線は2, または3次元の直交座標系上で表せる。同様にベジエやNURBS曲面に含まれるパラメータ（媒介変数）を様々な値に変化させるとその曲面は直交座標系上で表せる。
NURBS曲線／曲面は以下の点で有用である：
以下の節では2次元上のNURBS曲線に限定して記述するが、全ての記述は3次元上、またはそれ以上の次元においても適用可能であることに留意してほしい。
制御点は曲線の形状を決定する。曲線上のあらゆる点の位置は、その前後に配置された数個の制御点により計算され決定される。それら制御点にはいわば重要さ・影響力に差がある。制御点がその曲線上の点に近ければ近いほどその点の位置への影響は大きくなる。次数dの曲線においては、その点から数えてd+1個離れた制御点はその点に全く影響を及ぼさない。逆に言えばd個離れたところまでの制御点はその点の位置に影響を大なり小なり及ぼすことになる。次数dのある多項式関数（基底関数である）によってその影響力は計算される。
ある曲線（例えばペンで紙にスケッチしたカーブ）に近似させたい場合、理論上は制御点は多ければ多いほどより近似させることができる。ただ有限個数の制御点ではある一定の階数の曲線までしか近似させられない。
NURBS曲線の制御点には個々にウェイトというスカラー量が設定されており、ユーザはこれを任意に変更できる。デフォルトは1であるが、例えば2にすればその制御点の影響力が2倍になる。ゴムバンドで引っ張る比喩でいえばゴムバンドの強さが2倍になり、より強く曲線を自分のほうに引き寄せるような働きをする。ウェイトが0であれば影響力はなくなる。このように影響力を点ごとに変えられることが"有理rational"であるという意味である。ただこのウェイトは主に円や楕円などの円錐曲線を数学的に厳密に表現するために導入されたものであり、日常のモデリングではほとんど意識されずデフォルトのまま利用することになる。
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の曲線が多く用いられる。高い階数のものはより滑らかになるが、高すぎる階数は内部的に数値的問題を引き起こしやすく、しかも計算が無意味に遅くなるため実用上意味がない。
NURBSの基底関数はB-スプラインの基底関数と同じものを使う（NURBSはB-スプラインの一族に属する）。ふつうformula_1で表される。ここでformula_2 はformula_2番目の制御点に対応し、formula_4は基底関数の次数である。媒介変数の依存性(u)はしばしば問題にならないためformula_5と表されることが多い。
次数n=0の関数formula_6は定数関数となる。対応するノットの範囲で1であり、それ以外のノットでは0になる。
同様に考えていくと、formula_5はformula_8とformula_9の線形近似である。
前節で説明した基底関数formula_5を用いて、NURBS曲線Cは一般に次のような式で表すことができる。
ここで、 formula_12は制御点の個数。制御点formula_13はウェイトformula_14を持つ。分母は正規化係数であり、全てのウェイトが1である場合1になる。この式は通例次のように記述される：
ここで関数formula_16
は"有理基底関数"と呼ばれる。
NURBS曲面はNURBS曲線のテンソル積で得られる。2つの独立媒介変数formula_18とformula_19 で表される。(それぞれformula_2と formula_21に対応する):
またこの場合有理基底関数は
となる。
NURBSオブジェクトには様々な変形をほどこすことができる。例えばある曲線が次数dでありn個の制御点で表されているとしよう。全く同じ曲線が次数dでありn+1個の制御点で表すことができる。ただそのためには複数の制御点の位置が変更され、またノットがひとつノットベクトルに追加されることになる。
こういった変形はデザインの過程で様々な方法で用いられている。以下に変形の例を示す。
ノットの追加は文字通りノットをノットベクトルに追加する変形。曲線の次数がformula_24であるとき、formula_25個の制御点が新しいd個の制御点で置き換えられる。ノットの追加は曲線の形状自体は変更しないが、制御点は移動する。ノットは複数回追加できる。
微分幾何学において最も重要なのは曲率formula_26である。曲率はその曲線のエッジやコーナーなど局部的な様子を示すのに最適である。1次と2次の導関数の関係性を示すものでもあるため、曲線の形状を正確に知るためにも有用である。一度導関数がわかれば簡単な計算で曲線全体の曲率がわかる。
formula_27
または近似式で2次導関数の弧長で計算することもできる：
formula_28.
このような曲率の直接的な計算ができることは、ポリゴンによる表現に対するNURBSのような媒介変数曲線の大きな強みである。