簡介
非均勻有理樣條(Non-Uniform Rational B-Splines),縮寫
NURBS,也稱為
非均勻有理B樣條曲線,由Versprille在其博士學位論文中提出,1991年,國際標準化組織(ISO)頒布的工業產品數據交換標準STEP中,把NURBS作為定義工業產品幾何形狀的唯一數學方法。1992年,國際標準化組織又將NURBS納入到規定獨立於設備的互動圖形編程接口的
國際標準PHIGS(程式設計師層次互動圖形系統)中,作為PHIGS Plus的擴充部分。Bezier、有理Bezier、均勻B樣條和非均勻B樣條都被統一到NURBS中,是眾多行業寬泛標準中的一部分,如IGES, STEP, ACIS和PHIGS。同時在很多不同的3D建模和動畫軟體中也能找到NURBS的工具集。 通過電腦程式,他們可以很有效率的被處理,還允許進行簡單的人機互動。NURBS 曲面是映射到三維的空間中的曲面的兩個參數的函式。由控制點確定曲面的形狀。NURBS 曲面可以用緊湊的形式表示簡單的幾何形狀。T-樣條和細分曲面更適合於複雜的有機形狀,因為和 NURBS 曲面相比,它們減少了控制點數目。 一般情況下,編輯 NURBS 曲線和曲面有高度直觀性和可預測性。控制點要么和曲線或曲面直接相連,要么表現的如同他們通過一根橡皮筋而相連。根據用戶界面的類型,可以通過元素的控制點實現編輯,最明顯常見的例子是貝塞爾曲線。
歷史
NURBS的發展始於1950年代,它是由需要像在車體和船殼中使用的
自由曲面的數學上的精確表示的工程師們所發現的,它可以在任何技術上需要的時候精確的複製出來。以前這類曲面的表示只存在於
設計者創建的
實體模型。
最初NURBS僅用於汽車公司私有的
計算機輔助設計包。後來它們成為標準計算機圖形包的一部分,包括OpenGL圖形庫。
NURBS曲線和曲面的實時、互動繪製最初由
Silicon Graphics工作站於1989年提供。在
1993年,CAS Berlin(一個和柏林工大合作的小創業公司)開發了第一個個人機上的互動式NURBS建模器,稱為NöRBS。如今多數台式機上的專業計算機圖形應用程式提供NURBS技術,一般通過集成一個從專用公司來的NURBS引擎。
定義
NURBS是Non-Uniform Rational B-Splines的縮寫,是非均勻有理B樣條的意思。具體解釋是:
1)Non-Uniform(非均勻性):是指一個控制頂點的影響力的範圍能夠改變。當創建一個不規則曲面的時候這一點非常有用。同樣,統一的曲線和曲面在透視投影下也不是無變化的,對於互動的3D建模來說這是一個嚴重的缺陷。
2)Rational(
有理):是指每個NURBS物體都可以用有理多項式形式表達式來定義。
3)B-Spline(
B樣條):是指用路線來構建一條曲線,在一個或更多的點之間以內插值替換的。
簡單地說,NURBS就是專門做曲面物體的一種造型方法。NURBS造型總是由曲線和曲面來定義的,所以要在NURBS表面里生成一條有稜角的邊是很困難的。就是因為這一特點,我們可以用它做出各種複雜的曲面造型和表現特殊的效果,如人的皮膚,面貌或流線型的跑車等。
連續性
考慮在建造中的曲面。例如馬達遊艇的船體,其表面通常由一些 NURBS 曲面構成。這些曲面能夠被裝配在一起使得它的邊界線不可見,這是幾何連續性的數學表達。通過研究NURBS的特性,能夠得到一些高級的工具來創建一個不同層次的幾何連續性條件:
位置連續性
認為只要兩條曲線或曲面的結束位置相吻合。曲線或曲面可能在某個角度上相吻合,形成一個尖利的拐角或邊緣。
相切連續性
要求曲線或曲面的結束矢量相平行或指向同樣的方向,排除了鋒利的邊緣。因為焦點落在切線連續的邊緣總是連續的,看起來很自然,這種程度的連續性通常被認為是充足的。
曲率連續性
進一步要求結束向量具有相同的長度和長度變化率。亮點落在曲率連續的邊緣不會顯示任何的變化,使得兩個曲面顯示如同一個曲面。這可以直觀地認識為非常"光滑"。這一級別的連續性在創建需要許多雙立方曲面構成的模型中非常有用。
幾何連續性
主要是指形狀的表面 ;因為 NURBS 曲面是函式,也有可能討論其參數導數的曲面,這就是所謂的參數連續性。一定程度的參數連續性意味著在那種程度上的幾何連續性。
第一和第二級的參數連續性是為位置和相切的連續性相同的實用目的設定。然而三級參數連續性不同於曲率連續性,其參數也是連續的。在實踐中,如果使用均勻 B 樣條三級參數連續性更容易實現。
n級連續性
該定義要求某點鄰域內的n階導數在那點相等。注意曲線或曲面的偏導數是有方向和數值的矢量,這兩者都應該彼此相等。高光和反射可以揭示完美的平滑,除了G2連續性的NURBS曲面沒有其他方法可以在實際中做到。
連續性和度數是有關係的。一個度數為3的等式能產生C2連續性曲線。NURBS造型通常不需要這么高度數的曲線。 一條不同片斷的NURBS曲線可以用不同級別的連續性。具體來說,在同樣的位置或非常靠近的地方放置一些可控點,會降低連續性的級別。兩個重疊的可控點會使曲率變尖銳。三個重疊的可控點會在曲線里創建一個有角度的尖角。附加一個或兩個可控點會在曲線的附近聯合它們的影響力。 從可控點中刪除一個離開它們,就增加了曲線的連續性的級別。在
3DMAX里,Fuse(熔化)可控點會在曲線里創建一個假象的曲率或尖角。如果要恢復原狀,Unfuse(反熔化)那個點就可以了。
特點
非均勻有理B樣條曲線有以下4個特點:
(1)B樣條曲線的所有優點都在非均勻有理B樣條曲線中保留。
(2)透視不變性。控制點經過透視變換後所生成的曲線或曲面與原先生成的曲線或曲面的再變換是等價的。
(3)球面等二次曲面的精確表示。其他B樣條方法只能近似地表示球面等形狀,而NURB不僅可表示自由曲線和曲面,還可以精確地表示球面等形狀。
(4)更多的形狀控制自由度。NURB給出更多的控制形狀的自由度可用來生成各種形狀。
使用
但還是有很多它們在互動式建模中的優點和有用性的錯誤觀念,主要是由於關於單一軟體包及其用戶界面的易用性而得出的猜測。 通常,據說編輯NURBS曲線和曲面是高度直觀和可預測的。控制點總是直接連線到曲線或曲面上或象是通過一根橡皮筋連線。根據用戶界面的類型,編輯可以通過它們各自的控制點實現,這對於
貝塞爾曲線是最顯然和最一般的,或者也可以通過高層的工具,例如樣條建模或者層次結構的編輯。高層工具可以設計得很強大,並得益於NURBS創建和創建不同層次的連續性的能力: c0連續性表示連通性,c1連續性可以視為沒有尖角,而c2連續性通常稱為幾何連續性,視覺上也就是“光滑”的東西,用NURBS還可以達到更高階的連續性,它們可以導致"亮度連續性"。這被新車模型的攝影師所倚重,他們熱衷於展示霓虹燈在車身上的鏡像。燈光可以展示出完美的光滑度,這在沒有NURBS的情況下實際上是不可能。
技術細節
一條NURBS曲線用一個帶比重控制點和曲線的次序以及一個節點矢量的集合定義。NURBS是B-樣條和
貝塞爾曲線和曲面兩者的推廣,其主要差別在於控制點的比重,這使它們成為
有理的(非有理B-樣條是有理B-樣條的特殊情形)。 NURBS曲線在一個參數方向上演變,通常內部用's'參數代表,而NURBS曲面在兩個參數方向上演變。 所以,通過計算NURBS曲線的s-參數,它可以在三維空間中表示,通過計算NURBS曲面的s和t它也可以在三維空間中表示。 推廣意味著:一條貝茲曲線總是一條NURBS曲線,就像狗總是動物。反過來則不總是成立,一條NURBS曲線可以是一條貝茲曲線,就像一個動物可以是一條狗。
NURBS有用的原因有很多條:他們
2.提供了標準解析形體(例如圓錐曲面)和自由曲面兩者的共同數學形式;
3.提供了設計一大類形體的靈活性;
4.減少了存儲形體的存儲器消耗(和更簡單的方法相比);
6.是非有理B-樣條和非有理和有理貝茲曲線和曲面的推廣。
節點向量
節點矢量是一個參數值的串列,用於決定控制點在何處和如何影響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,對應與一條線性曲線(序=2,表示一條直線),一條二次曲線(序=3)以及一條三次曲線(序=4)。數學上曲線用同階的多項式表示,一條三次曲線用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 命令,平滑多段線(POLYLINE)擬合生成近似樣條曲線,以下稱為“樣條擬合多段線”。這種曲線不是真正意義上的樣條曲線,而是由若干直線(曲線)段構成的多段線,逼近於
樣條曲線。但使用 SPLINE 命令可把這種二維和三維樣條擬合多段線轉換為樣條曲線。 用SPLINE命令創建的樣條曲線和編輯平滑多段線生成的樣條擬合多段線相比,有以下不同: 樣條曲線顯然要比樣條擬合多段線精確的多。在工程套用中,樣條擬合多段線不能作為數學分析的基礎,不能在曲線上,生成切線、法線或提取曲線上的點位數據。