非均勻有理B樣條

NURBS是非均勻有理B樣條曲線中，作為PHIGS Plus的擴充部分。Bezier、有理Bezier、均勻B樣條和非均勻B樣條都被統一到NURBS中。非均勻有理樣條，是在計算機圖形學中常用的數學模型，用於產生和表示曲線及曲面。它為處理解析函式和模型形狀提供了極大的靈活性和精確性。NURBS通常在計算機輔助設計 中有廣泛應用。是眾多行業寬泛標準中的一部分，如IGES, STEP, ACIS和PHIGS。同時在很多不同的3D建模和動畫軟體中也能找到NURBS的工具集。透過計算機程式，他們可以很有效率的被處理，還允許進行簡單的人機互動。NURBS 曲面是對映到三維的空間中的曲面的兩個引數的函式。由控制點確定曲面的形狀。NURBS 曲面可以用緊湊的形式表示簡單的幾何形狀。T-樣條和細分曲面更適合於複雜的有機形狀，因為和 NURBS 曲面相比，它們減少了控制點數目。一般情況下，編輯 NURBS 曲線和曲面有高度直觀性和可預測性。控制點要麼和曲線或曲面直接相連，要麼表現的如同他們透過一根橡皮筋而相連。根據使用者介面的型別，可以透過元素的控制點實現編輯，最明顯常見的例子是貝塞爾曲線。歷史.在計算機處理之前，設計一般是透過在紙上的手繪完成，該過程需要藉助許多繪畫工具。例如直尺用於繪製直線，圓規用於繪製圓形，量角器用於繪製角度。但是許多不規則形狀的曲線，例如船艏，是無法透過這些工具繪製的。雖然可以透過在手繪板上徒手完成，但由於尺寸原因這種手稿無法在實際生產中得到應用。1946年，數學家開始研究樣條形狀，該形狀透過分段的多項式公式推匯出來，因為其和機械生產中的樣條相類似，將其命名為樣條曲線或樣條函式。NURBS的發展始於1950年代，它是由需要像在車體和船殼中使用的自由曲面的數學上的精確表示的工程師們所發現的，它可以在任何技術上需要的時候精確的複製出來。以前這類曲面的表示只存在於設計者建立的實體模型。該發展的先驅包括：皮埃爾·貝塞爾和兩個法國人， 前者曾是雷諾的工程師，後者在雪鐵龍工作。貝塞爾基本是和德·卡斯特里奧獨立發展的，兩人互相不知道對方的工作。但是因為貝塞爾發表了他的工作的結果，今天的一般的計算機圖形學使用者認為樣條 -- 透過在曲線上的控制點表示的那類 - 為貝塞爾樣條，而德·卡斯特里奧的名字僅作為他為計算引數化曲面所設計的演算法而為人所知。在1960年代，人們認識到非均勻有理B樣條是貝塞爾曲線的一個推廣，而貝塞爾曲線可以視為均勻有理B樣條。最初NURBS僅用於汽車公司私有的計算機輔助設計包。後來它們成為標準計算機圖形包的一部分，包括OpenGL圖形庫。NURBS曲線和曲面的實時、互動繪製最初由Silicon Graphics工作站於1989年提供。在1993年，CAS Berlin開發了第一個個人機上的互動式NURBS建模器，稱為"NöRBS"。今天多數桌上型電腦上的專業計算機圖形應用程式提供NURBS技術，一般透過整合一個從專用公司來的NURBS引擎。使用.NURBS對於計算機輔助設計是幾乎無法迴避的，並且是很多業界廣泛採用的標準的一部分，例如IGES， STEP和PHIGS。但還是有很多它們在互動式建模中的優點和有用性的錯誤觀念，主要是由於關於單一軟體包及其使用者介面的易用性而得出的猜測。通常，據說編輯NURBS曲線和曲面是高度直觀和可預測的。控制點總是直接連線到曲線或曲面上或象是透過一根橡皮筋連線。根據使用者介面的型別，編輯可以透過它們各自的控制點實現，這對於貝塞爾曲線是最顯然和最一般的，或者也可以透過高層的工具，例如樣條建模或者層次結構的編輯。高層工具可以設計得很強大，並得益於NURBS建立和建立不同層次的連續性的能力：c0連續性表示連通性，c1連續性可以視為沒有尖角，而c2連續性通常稱為幾何連續性，視覺上也就是“光滑”的東西，用NURBS還可以達到更高階的連續性，它們可以導致"亮度連續性"。這被新車模型的攝影師所倚重，他們熱衷於展示霓虹燈在車身上的映象。燈光可以展示出完美的光滑度，這在沒有NURBS的情況下實際上是不可能。定義.NURBS是non-uniform rational B-spline的縮寫，是非均勻有理B樣條的意思。具體解釋是：non-uniform：是指一個控制頂點的影響力的範圍能夠改變。當建立一個不規則曲面的時候這一點非常有用。同樣，統一的曲線和曲面在透視投影下也不是無變化的，對於互動的3D建模來說這是一個嚴重的缺陷。rational：是指每個NURBS物體都可以用有理多項式形式表示式來定義。B-spline：是指用路線來構建一條曲線，在一個或更多的點之間以內插值替換的。簡單地說，NURBS就是專門做曲面物體的一種造型方法。NURBS造型總是由曲線和曲面來定義的，所以要在NURBS表面裡生成一條有稜角的邊是很困難的。就是因為這一特點，我們可以用它做出各種複雜的曲面造型和表現特殊的效果，如人的皮膚，面貌或流線型的跑車等。連續性.考慮在建造中的曲面。例如馬達遊艇的船體，其表面通常由一些 NURBS 曲面構成。這些曲面能夠被裝配在一起使得它的邊界線不可見，這是幾何連續性的數學表達。透過研究NURBS的特性，能夠得到一些高階的工具來建立一個不同層次的幾何連續性條件：位置連續性認為只要兩條曲線或曲面的結束位置相吻合。曲線或曲面可能在某個角度上相吻合，形成一個尖利的拐角或邊緣。相切連續性要求曲線或曲面的結束向量相平行或指向同樣的方向，排除了鋒利的邊緣。因為焦點落在切線連續的邊緣總是連續的，看起來很自然，這種程度的連續性通常被認為是充足的。曲率連續性 進一步要求結束向量具有相同的長度和長度變化率。亮點落在曲率連續的邊緣不會顯示任何的變化，使得兩個曲面顯示如同一個曲面。這可以直觀地認識為非常"光滑"。這一級別的連續性在建立需要許多雙立方曲面構成的模型中非常有用。幾何連續性條件主要是指形狀的表面 ；因為 NURBS 曲面是函式，也有可能討論其引數導數的曲面，這就是所謂的引數連續性。一定程度的引數連續性意味著在那種程度上的幾何連續性。第一和第二級的引數連續性是為位置和相切的連續性相同的實用目的設定。然而三級引數連續性不同於曲率連續性，其引數也是連續的。在實踐中，如果使用均勻 B 樣條三級引數連續性更容易實現。n級連續性的定義要求某點鄰域內的n階導數在那點相等。注意曲線或曲面的偏導數是有方向和數值的向量，這兩者都應該彼此相等。高光和反射可以揭示完美的平滑，除了G²連續性的NURBS曲面沒有其他方法可以在實際中做到。連續性和度數是有關係的。一個度數為3的等式能產生C2連續性曲線。NURBS造型通常不需要這麼高度數的曲線。一條不同片斷的NURBS曲線可以用不同級別的連續性。具體來說，在同樣的位置或非常靠近的地方放置一些可控點，會降低連續性的級別。兩個重疊的可控點會使曲率變尖銳。三個重疊的可控點會在曲線裡建立一個有角度的尖角。附加一個或兩個可控點會在曲線的附近聯合它們的影響力。從可控點中刪除一個離開它們，就增加了曲線的連續性的級別。在3DMAX裡，fuse那個點就可以了。技術細節.一條NURBS曲線用一個帶比重控制點和曲線的次序以及一個"節點向量"的集合定義。NURBS是B樣條和貝塞爾曲線和曲面兩者的推廣，其主要差別在於控制點的比重，這使它們成為"有理的"。NURBS曲線在一個引數方向上演變，通常內部用's'引數代表，而NURBS曲面在兩個引數方向上演變。所以，透過計算NURBS曲線的s-引數，它可以在三維空間中表示，透過計算NURBS曲面的s和t它也可以在三維空間中表示。推廣意味著：一條貝茲曲線總是一條NURBS曲線，就像狗總是動物。反過來則不總是成立，一條NURBS曲線可以是一條貝茲曲線，就像一個動物可以是一條狗。NURBS有用的原因有很多條：他們控制點.節點向量是一個引數值的序列，用於決定控制點在何處和如何影響NURBS曲線。節點的個數總是等於控制點的個數加上曲線的階數。節點必須只是用於內部計算，因而一般對於軟體的終端使用者來說是沒有幫助的、不可編輯、甚至不可以見的。節點向量.節點向量的值必須升序：下面的向量是正確的：[0 0 1 2 3]，而接下來這個不是：[0 0 2 1 3]。也要注意唯一重要的因素是值之間的比例：節點向量[0 0 1 2 3]，[0 0 2 4 6]和[1 1 2 3 4]產生相同的曲線。不可以有比曲線的度數更多的重合值：節點的重複度≤度數。對於一階NURBS，每個節點和一個控制點結對。曲線的序大於或等於2，對應與一條線性曲線。數學上曲線用同階的多項式表示，一條三次曲線用3階多項式表示，其序為4。另外，控制點的個數必須等於或大於曲線的序。實踐上，3階的三次型別是表示曲線和曲面時最常用的。而4次或5次的有時候有用，特別是用於導數，更高階實際上從來不用因為他們經常導致內部數值問題並趨向於消耗更多的不必要的計算。非有理曲線有時不夠用，例如用於表示圓。這是表示一個XY平面上的均勻的圓的控制點，第四個引數是比重：cp_circle[0] = ControlPoint( 1, 0, 0, 1);cp_circle[1] = ControlPoint( 1, 1, 0, sqrt(2) / 2.0);cp_circle[2] = ControlPoint( 0, 1, 0, 1);cp_circle[3] = ControlPoint(-1, 1, 0, sqrt(2) / 2.0);cp_circle[4] = ControlPoint(-1, 0, 0, 1);cp_circle[5] = ControlPoint(-1, -1, 0, sqrt(2) / 2.0);cp_circle[6] = ControlPoint( 0, -1, 0, 1);cp_circle[7] = ControlPoint( 1, -1, 0, sqrt(2) / 2.0);cp_circle[8] = ControlPoint( 1, 0, 0, 1);產生方法.AutoCAD用 SPLINE 命令建立樣條曲線即 NURBS 曲線。還提供用 PEDIT 命令，平滑多段線段構成的多段線，逼近於樣條曲線。但使用 SPLINE 命令可把這種二維和三維樣條擬合多段線轉換為樣條曲線。用SPLINE命令建立的樣條曲線和編輯平滑多段線生成的樣條擬合多段線相比，有以下不同：樣條曲線顯然要比樣條擬合多段線精確的多。在工程應用中，樣條擬合多段線不能作為數學分析的基礎，不能在曲線上，生成切線、法線或提取曲線上的點位資料。