細分曲面建模技術01-總覽和介紹
總覽
細分曲面是一種常見的建模原語,在過去的幾十年中已在動畫和視覺效果中獲得廣泛應用。

顧名思義,細分曲面基本上是曲面。
更具體地說,細分曲面是在任意拓撲的網格上定義的分段參數化曲面-這兩個概念將在以下各節中進行介紹。
細分既是可以應用于多邊形網格以對其進行細化的操作,又是一種數學工具,它定義了網格的重復細分收斂到的基礎光滑表面。顯式細分易于應用多次以提供更平滑的網格,并且從歷史上看,這種簡化導致許多工具可以用這種方式來表示形狀。相反,獲得最終定義形狀的光滑表面(即“極限表面”)要復雜得多,但可以提供更高的準確性和靈活性。這些差異導致某些工具如何暴露細分表面的混亂。
最終目標是使所有工具都將細分曲面用作真實的曲面圖元。因此,這里的重點是減少細分,而更多地關注細分所產生的表面性質。除了提供一致的細分實現(其中包括許多廣泛使用的功能擴展)之外,OpenSubdiv的重要價值還在于它使限制曲面更易于訪問。
自推出以來,OpenSubdiv受到了具有各種技能,興趣和背景的用戶和開發人員的興趣。本文檔旨在從有助于使用OpenSubdiv的角度介紹細分曲面。它的目的之一是為那些對細分算法或數學經驗不足的人提供高層次的概述。另一個是概述OpenSubdiv可用的功能集,并使用OpenSubdiv所使用的術語(因為其中很多已超載)來介紹這些功能。
分段參數曲面
分段參數曲面可以說是工業設計,娛樂和許多其他領域中使用最廣泛的幾何表示形式。我們每天處理的許多對象(汽車,手機,筆記本電腦)都首先被設計和可視化為分段參數化表面,然后才批準并繼續進行這些設計。
分段參數化表面最終只是稱為貼片的更簡單建模圖元的集合。斑塊構成較大表面的“塊”,與面或多邊形構成多邊形網格的塊幾乎相同。
參數補丁
修補程序是分段光滑表面的構建塊,并且已經開發出許多不同種類的修補程序來滿足幾何建模的需求。以下是兩個更有效和常見的補丁程序:
![]() 單三次B樣條補丁 |
![]() 單個雙三次Bezier補丁 |
補丁由影響矩形平滑表面的點或頂點組成(也存在三角形補丁)。該矩形在兩個方向上被“參數化”,將一個簡單的2D矩形轉換為3D曲面:
![]() (u,v)補丁的2D域 |
![]() 從(u,v)映射到(x,y,z) |
控制曲面形狀的點通常稱為控制點或控制頂點,整個集合的集合將一個面片定義為控制網格,控制外殼,控制籠,或簡稱為外殼,籠,為了簡潔起見,我們會經常使用“籠”一詞,稍后會更廣泛地為我們服務。
因此,一個面塊基本上由兩個實體組成:其控制點和受其影響的表面。
控制點影響表面的方式使不同類型的貼片具有獨特性。即使由相同數量的點定義的面塊也可能具有不同的行為。請注意,與類似的Bezier色塊相比,上面的B樣條色塊的所有16個點都遠離它們定義的表面。該示例中的兩個面片實際上代表了完全相同的表面-每個面都有一組對它有不同影響的控制點。用數學術語來說,每個控制點都有一個與之關聯的“基本函數”,當僅移動該控制點時,它會以特定的方式影響表面:
![]() 雙三次B樣條基函數 |
![]() 雙三次貝塞爾曲線基函數 |
這些基礎功能通常會引起不同補丁程序的名稱。
貼片控制點的這些不同屬性各有利弊,當我們將貼片組裝成分段表面時,這些點變得更加明顯。
分段曲面
分段參數化曲面是面片的集合。
對于矩形面片,構造集合的最簡單方法之一是使用矩形的控制點網格定義一組面片:
![]() 分段B樣條曲面 |
![]() 分段貝塞爾曲面 |
注意,我們可以重疊相鄰的B樣條斑塊的點。這種重疊意味著移動一個控制點會影響多個補丁程序-但同時也確保了這些補丁程序始終能夠順利滿足(這是設計意圖,而對于其他補丁程序類型而言并非如此)。相鄰的Bezier色塊僅在其邊界處共享點,并且可以協調跨越這些邊界的點以保持表面平滑,但是很尷尬。這使得B樣條曲線更適合交互式建模,但Bezier面片具有許多其他有用的用途。
更復雜的B樣條曲面:
![]() 更復雜的B樣條曲面的一部分 |
正如補丁由籠子和表面組成一樣,現在該集合也是如此。設計師設計了控制籠,并顯示了每個補丁的表面,以便他們評估其效果。
任意拓撲
到目前為止討論的分段表面已經限于在控制點的規則網格上的補丁集合。矩形參數曲面具有一定的吸引力,但具有一定的簡單性,但是支持任意拓撲的曲面表示還有許多其他優點。
矩形參數曲面盡管具有拓撲限制,但仍得到廣泛采用,并且在某些地區,其流行度一直持續到今天。復雜的對象通常需要許多這樣的表面來表示它們,并且已經發展出多種技術來有效地組裝它們,包括將多個表面“縫合”在一起或在其中切孔(“修剪”)。這些是復雜的技術,盡管在某些情況下(例如工業設計)有效,但在其他情況下(例如動畫和視覺效果)卻變得繁瑣。
單個多邊形網格可以代表比單個矩形分段表面復雜得多的形狀,但是其多面性質最終成為問題。
細分曲面將多邊形網格的拓撲靈活性與分段參數化曲面的基本平滑度結合在一起。正如矩形分段參數化曲面具有控制點(其籠形存儲為網格)和基礎表面的集合一樣,細分曲面也具有控制點(其籠形存儲為網格)的集合和基礎表面(通常稱為其“極限面”)。
規則與不規則特征
網格包含形成底層表面籠的頂點和面,并且該網格的拓撲可以任意復雜。
在連接網格的面和頂點以形成矩形網格的區域中,限制表面成為前面提到的矩形分段參數化表面之一。網格的這些區域被稱為“規則”區域:它們提供的行為類似于使用類似的矩形曲面,并且其邊界曲面相對較容易處理。所有其他區域都被認為是“不規則的”:它們提供所需的拓撲靈活性,因此不那么熟悉(在某些情況下更難以預測),并且其極限曲面可能更加復雜。
不規則特征有多種形式。最為廣泛使用的是一個非凡頂點,即,在像Catmull-Clark這樣的四分細分方案中,它沒有四個入射面的頂點。
![]() 頂點和入射面不規則 |
![]() 表面的規則和不規則區域 |
這些不規則特征的存在使圍繞它們的極限表面同樣不規則,即,不能象規則區域那樣簡單地表示它。
值得注意的是,隨著細分的應用,不規則區域的大小會縮小并變得更加“孤立”。圍繞著很多非凡頂點的面會形成非常復雜的表面,而隔離這些特征是一種有助于處理這種復雜性的方法:
![]() 附近有兩個價5頂點 |
![]() 隔離細分一次 |
![]() 隔離度細分為兩次 |
通常有必要在這些區域中執行某種局部細分,以將這些表層分解為更小,更易于管理的部分,并且近年來,“功能自適應細分”一詞在描述此過程時變得越來越流行。無論是在全局還是局部地進行顯式或隱式處理,最重要的是每個面都有一個下限的極限面(盡管在不規則特征處可能存在復雜的極限面),其評估方式幾乎相同作為矩形的分段曲面。
![]() 常規區域的補丁 |
![]() 不規則區域的補丁 |
雖然在這些不規則區域中支撐光滑表面是細分表面的主要優點,但所得表面的復雜性及其質量都是謹慎使用它們的原因。當拓撲在很大程度上不規則時,與其表面相關聯的成本較高,因此最小化不規則性是有利的。在某些情況下,不規則表面的表面質量(即感覺到的光滑度)可能會導致不良的偽影。
無論多邊形網格的外觀如何,任意多邊形網格通常都不能構成一個好的細分籠。
與矩形分段參數化曲面一樣,保持架的形狀應能影響其打算表示的基礎表面。有關相關建議,請參見 建模技巧。
非流形拓撲
由于細分曲面的籠子存儲在網格中,并且通常在與多邊形網格相同的上下文中進行操作,因此流形與非流形拓撲的主題值得引起關注。
關于將歧管網格與不區分歧管網格有很多定義或描述。這些范圍從簡潔但抽象的數學定義到顯示流形和非流形網格的示例集-都具有其價值和適當的受眾。以下不是嚴格的定義,但可以很好地說明導致網格非流形的大多數局部拓撲配置。
考慮“站立”在網格面上,然后依次“繞行”每個頂點。假設面的纏繞順序為右手,則以正法線方向站在面的一側。并且在行走時,以逆時針方向越過每個入射邊緣到達下一個入射面。
對于內部頂點:
從任何入射面的拐角處開始
在每個入射邊緣處繞頂點走到下一個未訪問的面孔;重復
如果返回起點,并且未訪問任何入射面或邊緣,則網格是非流形的
同樣,對于邊界頂點:
從包含前沿邊界邊的角開始
在每個入射邊緣處繞頂點走到下一個未訪問的面孔;重復
如果到達另一個邊界邊并且未訪問任何入射面或邊,則網格是非流形的
如果您可以以這種方式繞過所有頂點并且不遇到任何非流形特征,則網格可能是多方面的。
顯然,如果一個頂點沒有面,就沒有東西可走,并且該測試無法成功,因此它再次是非流形的。頂點周圍的所有面也應處于相同方向,否則兩個相鄰面的法線方向相反,則網格將被視為非流形,因此,當逐步移動到下一個面時,我們應該真正包括該約束以使其更接近嚴格。
考慮繞過以下非流形網格的指示頂點:
![]() 具有2個以上入射面的邊 |
![]() 面共享一個頂點但沒有邊 |
如前所述,許多工具不支持非流形網格,在某些情況下,例如3D打印,應嚴格避免使用它們。有時可能需要一個流形網格并將其作為最終結果,但由于建模操作的特定順序,網格可能會暫時變得無歧管。
OpenSubdiv不會支持或提倡使用非流形網格,而是在存在非流形功能的情況下努力保持健壯性,以簡化其客戶端的使用-避免他們需要進行拓撲分析以確定OpenSubdiv何時可以或不可以用過的。盡管在網格不多的區域中細分規則還沒有很好地標準化,但是OpenSubdiv在大多數情況下提供簡單的規則和合理的極限曲面。
![]() 邊緣> 2個入射面的曲面 |
![]() 面共享頂點但無邊的面 |
與規則特征與不規則特征一樣,由于每個面都有一個與之相關的對應表面(無論是否局部流形),因此術語“任意拓撲”可以說是包括非流形拓撲。
細分與細分
前面的部分將細分表面說明為任意拓撲的分段參數化表面。作為分段參數化曲面,它們由一個框架和該框架定義的下表面組成。
用于顯示細分曲面的兩種技術是細分和細分。兩者都有其合法用途,但它們之間有重要區別:
細分在籠子上運行并生產精制籠子
細分在表面上進行操作并產生該表面的離散化
細分算法的存在和相對簡單性使得可以輕松地重復應用它來近似曲面的形狀,但是結果是一個精煉的籠子,這種近似并不總是很精確。與精制到不同水平的籠子或使用直接在極限表面上評估的點的鑲嵌進行比較時,差異可能會造成混淆。
細分
細分是為“細分曲面”命名的過程,但并不是唯一的。作為分段參數化曲面,讓我們首先在包含它們的更簡單參數化面片的上下文中查看細分。
細分是改進的一種特殊情況,這是某些使用最廣泛的參數補丁及其聚合曲面成功的關鍵。當存在算法時,可以“精煉”表面,以便可以引入更多控制點, 同時保持表面的形狀完全相同。出于交互和設計目的,這允許設計人員引入更高的分辨率以進行更精細的控制,而不會在形狀中引入不良副作用。為了更多的分析目的,它允許將表面通常自適應地破碎成碎片,同時忠實于原始形狀。
B樣條和Bezier面片之所以如此廣泛使用的原因之一是,它們都可以被完善。統一細分-沿其一個或兩個方向拆分每個補丁的過程-是改進的一種特殊情況,這兩種補丁類型都支持:
![]() B樣條曲面及其籠 |
![]() 籠子細分1x |
![]() 籠子細分為2x |
在上述B樣條曲線的情況下,均勻精制的保持架產生與原始保持架相同的極限表面(分批提供)。因此可以說,均勻的B樣條曲線和Bezier曲面都是細分曲面。
極限曲面與更多的控制點保持不變(細分的每次迭代大約為4倍),并且這些點更接近(但不在曲面上)。可能會嘗試使用這些新的控制點來表示表面,但是使用在表面上相應均勻間隔的參數位置處評估的相同數量的點通常更簡單,更有效。
還要注意的是,籠子的點通常沒有任何與它們關聯的法線向量,盡管我們可以像對位置一樣對表面上的任意位置顯式地評估法線。因此,如果將籠子顯示為帶陰影的表面,則必須在每個控制點處構造法線向量。因此,精制籠子上的點的位置和法線都是近似值。
對于更一般的細分曲面,也是如此。細分將細化任意拓撲的網格,但是結果點將不會位于極限曲面上,并且從這些點構造并與之關聯的任何法向矢量都只會近似于極限曲面。
鑲嵌
當可以直接計算參數曲面(即可以將其細分)時,幾乎不需要使用細分來近似它。我們可以在曲面上的任意位置進行評估,然后將結果點連接起來以形成細分(即極限曲面的離散化),這比通過均勻細分獲得的結果要靈活得多:
![]() B樣條曲面的均勻(3x3)細分 |
![]() B樣條曲面的曲率自適應鑲嵌 |
對于簡單的參數曲面,對極限曲面的直接求值也很簡單,但是對于任意拓撲的更復雜的細分曲面,情況則更少。一直以來,對限制表面和保持架之間的關系缺乏清晰的了解,導致許多應用避免鑲嵌。
值得一提的是,即使無法使用極限面進行直接評估,細分也可以用于生成細分。細分的遞歸性質確實產生了一些公式,這些公式允許計算極限面上的一個點,該點對應于籠子的每個點。該過程通常被稱為“捕捉”或“推擠”保持架的點到極限表面上。
![]() 細分1x并捕捉到極限表面 |
![]() 細分2x并捕捉到極限表面 |
由于最終結果是極限面上的一組相連點,因此這形成了極限曲面的細分,我們認為這是細分的單獨過程(盡管確實使用了細分)。可以通過細分來實現這種細分的事實與最終結果是無法區分的-通過沿每個邊緣均勻地評估2x,4x,8x等的保持架的極限面片,可以很容易地生成相同的細分。
使用哪個?
在創建更精細的籠子來操縱表面時,細分無疑是有用的,但是當補丁可用于直接評估時,鑲嵌細分是首選用于顯示表面。曾經有一段時間在全球范圍內進行細化,以此作為沿著等參線快速評估參數曲面的一種方法,但通常采用斑塊評估(即細分)。
由于在最終用戶應用程序中顯示形狀時采用和展示了這兩種技術的方式引起了相當大的困惑。可以辯稱,如果應用程序顯示的表面表示滿足其用途,則不必給用戶增加其他術語和選擇的負擔。但是,當兩個應用程序對同一表面的兩種表示形式有很大不同時,缺少任何解釋或控制都會導致混淆。
只要應用程序在顯示表面的方式上做出不同的選擇,我們就會在簡單性和控制性之間尋求平衡。由于細分點不在極限面上,因此在使用細分而不是細分時必須向用戶清楚一點很重要。在保持架和表面以相同樣式顯示的應用中尤其如此,因為用戶沒有視覺提示來區分。
網格數據和拓撲
細分曲面支持任意拓撲的能力導致使用網格存儲籠的拓撲和與其控制點(即其頂點)關聯的數據值。網格的形狀或由此產生的細分表面是網格拓撲和與頂點相關聯的位置數據的組合。
處理網格時,將拓撲結構與數據分離是有優勢的,在處理細分曲面時,這一點尤為重要。上面提到的“形狀”不僅是網孔的形狀(在這種情況下是籠子),還可以是精制的籠子或極限表面的形狀。通過觀察數據和拓撲在諸如細分和評估之類的操作中所扮演的角色,可以通過相應地管理數據,拓撲和關聯的計算來獲得顯著的優勢。
盡管細分曲面的主要目的是使用與頂點關聯的位置數據來定義平滑連續的極限曲面,但在許多情況下,非位置數據與網格關聯。該數據通常可以像位置一樣平滑地插值,但是通常最好線性地插值,甚至使其沿著網格的邊緣不連續。紋理坐標和顏色是此處的常見示例。
除了分配給頂點并與之關聯的位置之外,對于如何或應該如何關聯或插值任意數據沒有任何限制。例如,可以指定紋理坐標來創建一個完全平滑的極限表面(如位置),在各個面之間進行線性插值,甚至使它們之間不連續。但是,在數據管理和性能方面都存在要考慮的后果,下面將對這些后果進行描述,因為定義了用于實現每種目的的術語和技術。
將數據與拓撲分離
盡管用于存儲細分曲面的網格的拓撲結構是任意復雜且可變的,但構成其極限曲面的參數補丁的拓撲結構卻是簡單且固定的。雙三次B樣條曲線和Bezier面片均由一個簡單的4x4控制點網格和每個點的一組基本函數共同定義,這些點共同構成了結果曲面。
對于這樣的補丁,給定參數位置處的位置是與其控制點關聯的位置數據與相應基本函數的權重(權重是在參數位置處評估的基本函數的值)的組合的結果。拓撲和基本函數保持不變,因此我們可以獨立于數據使用權重。如果控制點的位置發生變化,我們可以簡單地將新的位置數據與我們剛剛使用的權重重新組合,并應用相同的組合。
![]() |
![]() |
![]() |
| 參數補丁的固定拓撲和由兩組位置產生的兩種形狀。 |
類似地,對于分段曲面,給定參數位置處的位置是包含該參數位置的單個面片在給定位置處評估的結果。涉及的控制點是與該特定補丁程序關聯的控制點的子集。如果表面的拓撲是固定的,則組成該表面的貼片集合的拓撲也將固定。如果這些控制點的位置發生變化,我們可以為與補丁相關聯的點的子集以相同的權重重新組合新的位置數據。
![]() |
![]() |
![]() |
| 由兩組位置產生的表面和兩種形狀的更復雜但固定的拓撲。 |
這適用于任意拓撲的分段表面。無論拓撲多么復雜,只要拓撲保持固定(即頂點,邊和面之間的關系不變(或影響細分規則的任何其他設置)),都可以應用相同的技術。
這只是將涉及拓撲的計算與涉及數據的計算分開的價值的一個示例。細分和評估都可以分為涉及拓撲(計算權重)和分別組合數據的步驟。
![]() |
![]() |
![]() |
| 由固定拓撲網格的三組位置產生的三個形狀。 |
拓撲固定后,通過預先計算與拓撲關聯的信息并以可以與之有效組合的方式組織與控制點關聯的數據,可以節省大量資金。這是理解用于處理細分曲面的某些技術的關鍵。
對于任意拓撲的網格,下表面的控制點是頂點,并且與它們關聯的位置數據是最熟悉的。但是沒有什么要求補丁的控制點必須表示位置-不管涉及的數據類型如何,都可以應用相同的技術。
頂點和變化數據
最典型和最基本的操作是評估曲面上的位置,即使用網格頂點處的(x,y,z)位置評估極限曲面的基礎面片。給定一個這樣的面片上的參數(u,v)位置,與數據無關的評估方法首先計算權重,然后組合(x,y,z)頂點位置,從而在該位置處獲得(x,y,z)位置地點。但是權重及其組合可以應用于頂點上的任何數據,例如顏色,紋理坐標或其他任何東西。
與這種方式插值的頂點關聯的數據(包括位置)被稱為“頂點”數據或具有“頂點”插值。將其他數據指定為“頂點”數據將導致它以與位置完全相同的方式(使用完全相同的權重)平滑插值。因此,要捕獲表面的簡單2D投影以獲取紋理坐標,將使用與位置的(x,y)匹配的2D值。
相反,如果希望對與頂點相關聯的數據進行線性插值,則可以說該數據是“變化的”數據或具有“變化的”插值。在此,忽略定義平滑極限曲面的面片的非線性評估,并使用簡單線性插值的權重。這是紋理坐標的常見選擇,因為不需要雙三次面片的紋理評估在計算上更便宜。線性插值無法捕獲頂點之間真實投影所需的平滑度,但是頂點插值和變化插值都有其用途。
![]() 從頂點數據平滑插值投影紋理 |
![]() 從變化的數據線性插值投影的紋理 |
由于頂點和變化的數據都與頂點(分配給每個頂點的唯一值)相關聯,因此生成的曲面將是連續的-在頂點數據的情況下為分段平滑,在變化的情況下為分段線性。
隨面數據和拓撲
為了支持表面數據的不連續性,與頂點和變化數據不同的是,必須存在與頂點,邊和/或面關聯的多個值,以便存在不連續性。
通過為面的角分配值來實現間斷,這與在定義網格拓撲時將頂點分配給面的角的方式類似。回顧頂點到面的分配:
作為網格構造的一部分,頂點索引被分配給每個面的所有角,通常被稱為單個面或網格的面頂點。共享相同頂點索引的所有面頂點將由該頂點連接,并共享與之關聯的相同頂點數據。
通過為面頂點分配不同的索引集-索引不指向頂點,而是與每個面的角相關聯的一組數據-共享相同頂點的角不再需要共享相同數據值,可以使面之間的數據不連續:
據說這種將數據值與網格的面頂點相關聯的方法是為“面變”插值分配“面變”數據。插值將在一個面(即與該面關聯的極限曲面的面片)內連續變化,但不一定跨越與相鄰面共享的邊緣或頂點。
![]() 應用于極限表面的不連續的面部變化UV區域 |
不將數據值與頂點(控制點)相關聯,而將面角與數據相關聯,以及由此產生的與數據相關的不連續性,使之成為比頂點或變化復雜得多的方法。單獨增加的數據復雜性是僅在必要時(即,當需要并存在不連續性時)使用它的原因。
處理變臉數據和插值的部分復雜性是可以定義插值行為的方式。如果數據是連續的,則可以將插值指定為與頂點數據的基本極限面一樣平滑,或者簡單地定義為線性(如變化的數據所實現)。數據不連續的地方-橫跨內部邊緣和頂點周圍-不連續之處為數據創建邊界,并將下層表面劃分為不相交的區域。沿這些邊界的插值還可以通過多種方式(其中許多具有歷史基礎)指定為平滑或線性。
稍后將提供有關具有變臉數據和插值的不同線性插值選項的更完整描述。這些選項使將數據視為頂點或變化數據成為可能,但是增加了不連續性。
變臉插值要記住的重要一點是,每個數據集都可以自由擁有自己的不連續性-這導致每個數據集都具有唯一的拓撲和大小。
為收集各種變化的數據而指定的拓撲稱為 通道并且是變臉插值所特有的。與頂點和可變插值(它們都將數據值與頂點關聯)不同,在變臉通道中值的數量并不由頂點或面的數量固定。對于所有通道,分配給面部角的索引數將相同,但這些索引所引用的唯一值的數目可能不同。我們可以在數據連續的區域中利用公共網格拓撲,但是會丟失不連續性周圍的一些優勢。與頂點或變化的數據相比,這會導致面部更改通道的復雜性和成本更高。但是,如果通道的拓撲是固定的,則可以將類似技術應用于與該拓撲有關的因子計算,以便可以有效處理數據更改。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP
































































