NURBS 是什麼?

NURBS (Non-Uniform Rational B-splines,非一致有理 B 雲形線) 以數學的方式描述形狀,從簡單的 2D 直線、圓、圓弧、曲線到複雜的 3D 自由造型曲面或實體都可以精確塑形。NURBS 因為使用彈性與精確的特性讓它可以應用在插圖、動畫、工業製造等許多不同的領域。

NURBS 幾何圖形有五個重要的特質,這些特質讓它成為電腦輔助建模的理想選擇。

  • 目前有許多交換 NURBS 幾何圖形的工業標準,用戶可以在許多建模、彩現、動畫、工程分析軟體之間轉移 3D 模型。
  • NURBS 有精確及廣為人知的特質,各主要的大學也都有教授 NURBS 幾何圖形數學及電腦科學的課程,這代表專業軟體廠商、工程團隊、工業設計公司及動畫公司可以找到受過 NURBS 程式訓練的程式設計師。
  • NURBS 可以精確地呈現標準的幾何圖形 (直線、圓、橢圓、球體、環狀體) 及自由造型的幾何圖形 (車身、人體)。
  • 以 NURBS 呈現的幾何圖形所需的資料量遠比一般的網格型式要少。
  • NURBS 的估算法則可以有效並精確地在電腦上執行,下面將會繼續討論。

NURBS 幾何圖形是什麼?

NURBS 曲線與曲面有非常類似的特性,並且共用許多專有名詞,因為曲線比較容易描述,我們將詳細解說曲線的結構 。一條 NURBS 曲線由四個項目定義:階數、控制點、節點、估算法則。

階數

階數 (Degree) 是正整數。

這個數字通常是 1、2、3 或 5,但也可以是任何的正整數。NURBS 直線與多重直線的階數是 1,圓的階數是 2,大部分自由造型曲線的階數是 3 或 5。有時會提到線性、二次方、三次方或五次方等術語,線性代表階數為 1、二次方代表階數為 2、三次方代表階數為 3、五次方代表階數為 5。

您也可能會看到某些地方提及 NURBS 曲線的次數 (Order),一條 NURBS 曲線的次數等於 (階數 + 1) 的正整數,所以階數也等於 (次數 - 1)。

提高 NURBS 曲線的階數可以不改變曲線的形狀,但降低曲線的階數通常必定會改變曲線的形狀。

控制點

控制點是一個點的清單,控制點的最小數目是 (階數 + 1)。

改變 NURBS 曲線的形狀最簡單的方法之一是移動控制點。

控制點帶有一個數值,稱為權值,除少數特例以外,控制點的權值都是正數。曲線的所有控制點的權值都相同時 (通常是 1) 稱為非有理曲線,有控制點的權值不一致時稱為有理曲線。NURBS 這個字裡的 R 為 Rational (有理) 的縮寫,代表 NURBS 可以是有理曲線的可能性。除了圓弧、圓、橢圓曲線以外,NURBS 曲線通常是非有理曲線。

節點

節點是階數 + N - 1 個數字的清單,N 代表控制點的數目,這個數字的清單有時候也稱為節點向量,這裡的"向量"並非指 3D 空間中的方向。

節點清單上的數字必須符合幾個條件,確定條件是否符合的標準方式是清單由上往下數字必需維持不變或變大,而且數字重複的次數不可以比階數大。例如,階數 3 有 11 個控制點的 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,而四比階數大 (階數為 3)。

節點值重複的次數稱為節點的重數 (Multiplicity),上述的例子符合條件的節點清單中,節點值 0 的重數值為三;節點值 1 的重數值為一;節點值 2 的重數為三;節點值 3 的重數為一;節點值 7 的重數值為二;節點值 9 的重數值為三。如果節點值重複的次數和階數一樣,該節點稱為完全重數節點 (Full-Multiplicity Knot)。在上面的例子中,節點值 0、2、9 有完整的重數,只出現一次的節點值稱為單純節點 (Simple Knot),節點值 1 和 3 為單純節點。

如果在節點清單中是以完全重數節點開始,接下來是單純節點,再以完全重數節點結束,而且節點值為等差級數,稱為一致 (Uniform)。例如,如果階數為 3 有 7 個控制點的 NURBS 曲線,其節點值為 0,0,0,1,2,3,4,4,4,那麼該曲線有一致的節點。如果節點值是 0,0,0,1,2,5,6,6,6 不是一致的,稱為非一致 (Non-Uniform)。在 NURBS 的 N 與 U 代表“非一致”,意味著在一條 NURBS 曲線的節點可以是非一致的。

在節點值清單中段有重複節點值的 NURBS 曲線比較不平滑,最不平滑的情形是節點清單中段出現完全重數節點,代表曲線上有銳角。因此,有些設計師喜歡在曲線上插入或移除節點,然後調整控制點,使曲線的造型變得平滑或尖銳。因為節點數等於 (N + 階數 - 1),N 代表控制點的數量,所以插入一個節點會增加一個控制點,移除一個節點也會減少一個控制點。插入節點時可以不改變 NURBS 曲線的形狀,但通常移除節點必定會改變 NURBS 曲線的形狀。

節點與控制點

控制點和節點是一對一成對的是常見的錯誤概念,這種情形只發生在 1 階的 NURBS (多重直線)。較高階數的 NURBS 的每 (2 x 階數) 個節點是一個群組,每 (階數 + 1) 個控制點是一個群組。例如,一條 3 階 7 個控制點的 NURBS 曲線,節點是 0,0,0,1,2,5,8,8,8,前四個控制點是對應至前六個節點;第二至第五個控制點是對應至第二至第七個節點 0,0,1,2,5,8;第三至第六個控制點是對應至第三至第八個節點 0,1,2,5,8,8;最後四個控制點是對應至最後六個節點。

某些建模器使用較舊的 NURBS 估計演算法,該演算法需要額外的兩個節點值,總數為 (階數 + N + 1) 個節點。當 Rhino 匯出或匯入這種類型的 NURBS 幾何圖形時會自動加入或移除兩個節點。

估算法則

一條曲線的估算法則是一個數學方程式,將一個數字輸入到此方程式可以得到一個點。

NURBS 估算法則是一個涉及階數、控制點、節點,並含有某些 B-雲形線基礎函式 (B-spline basis functions) 的方程式。NURBS 的 B 與 S 代表 基本雲形線 (Basis Spline)。NURBS 估算法則是由參數開始,您可以將估算法則視為一個黑盒子,每當這個黑盒子吃進一個參數就會產生一個點座標,而黑盒子如何運作是階數、節點、控制點所控制。

如果您對數學方程式有興趣,請參考 ikipedia: Non uniform rational b spline