細分曲面建模技術02-方案和選擇
方案和選擇
盡管前面的部分以更籠統的術語描述了細分曲面,但本節介紹了許多常見的變體(通常稱為細分算法的擴展)及其在OpenSubdiv中的表示方式。
這里擴展的數量和性質使原本相當簡單的細分算法變得十分復雜。歷史上,應用程序支持一個子集或具有相同功能的不同實現。OpenSubdiv致力于為該功能集提供一致且有效的實現。
考慮到其他一些功能的呈現方式各不相同,這里重點介紹OpenSubdiv選擇的命名方式。
細分方案
OpenSubdiv提供兩種眾所周知的細分曲面類型-Catmull-Clark(通常更簡稱為“ Catmark”)和Loop細分。Catmull-Clark被更廣泛地使用,并且適合于四支網格,而Loop對于(并且需要)純三角網格是首選的。
前幾節中的許多示例都說明了更流行的Catmull-Clark方案。對于循環的示例:
![]() |
![]() |
![]() |
![]() |
邊界插值規則
邊界插值規則控制與邊界邊和頂點相鄰的面的細分和極限面的行為。
通過枚舉Sdc :: Options :: VtxBoundaryInterpolation可使用以下選項:
| 模式 | 行為 |
|---|---|
| VTX_BOUNDARY_NONE | 默認情況下不應用邊界邊緣插值;將邊界面標記為孔,以便邊界頂點繼續支撐相鄰的內部面,但不會生成與邊界面相對應的表面;可以通過銳化入射到面頂點的所有邊界邊來有選擇地插入邊界面 |
| VTX_BOUNDARY_EDGE_ONLY | 一系列邊界頂點定義了一條平滑曲線,沿邊界面的極限曲面延伸到該平滑曲線 |
| VTX_BOUNDARY_EDGE_AND_CORNER | 與僅邊緣相似,但邊界上產生的平滑曲線用于對角頂點(具有一個入射面的頂點)進行插值 |
在網格示例中:
實際上,幾乎不使用邊界插值是很少的-此功能的用途是允許通過沿邊界復制頂點來將單獨的網格無縫地連接在一起,但是這些用法受到限制。考慮到設置的整體性質,通常最好在連接單獨網格物體的表面的區域中明確地使邊界面成為孔,而不是銳化邊緣以在其他位置插入所需的邊界。
剩下的“僅邊緣”和“邊緣和拐角”選項則僅通過拐角頂點處的表面是光滑還是銳利來區分。
變臉插值規則
變臉插值規則控制如何在變臉區域的內部(平滑或線性)和不連續的邊界(以多種方式限制為線性或“固定”)內插變臉數據。如果拓撲結構是連續的,并且插值選擇為平滑,則面變插值的行為將與頂點插值的行為匹配。
變臉插值的選擇最常在UV的背景下用于紋理坐標,并且多年來,此類選擇的名稱在不同的應用程序中得到了發展。OpenSubdiv提供的選擇涵蓋了廣泛的流行應用。該功能被稱為變臉線性插值-而不是 常用的邊界插值-強調可以將其應用于整個表面(而不僅僅是邊界),并且其效果是使表面以各種方式表現出更線性的行為。
以下選項可用于Sdc :: Options :: FVarLinearInterpolation枚舉-此處的順序逐漸應用更多的線性約束:
| 模式 | 行為 |
|---|---|
| FVAR_LINEAR_NONE | 到處都是光滑的 |
| FVAR_LINEAR_CORNERS_ONLY | 僅線性內插(尖銳或固定)角 |
| FVAR_LINEAR_CORNERS_PLUS1 | CORNERS_ONLY +銳化3個或更多區域的連接 |
| FVAR_LINEAR_CORNERS_PLUS2 | CORNERS_PLUS1 +飛鏢和凹角的銳化 |
| FVAR_LINEAR_BOUNDARIES | 沿所有邊界邊和角進行線性插值 |
| FVAR_LINEAR_ALL | 線性插值無處不在(邊界和內部) |
這些規則不能使面部變化數據的插值比頂點平滑。由銳度值,邊界插值規則或細分方案本身(例如,雙線性)創建的網格的銳利特征優先。
在UV空間中,使用簡單的4x4四邊形網格(劃分為三個UV區域,在FVAR_LINEAR_ALL情況下通過插值隱含其控制點位置)來說明所有變臉插值模式:
(對于那些熟悉的人,可以在OpenSubdiv的示例和回歸形狀的“ catmark_fvar_bound1”形狀中檢查此形狀及其分配的UV集。)
半鋒利的折痕
正如某些類型的參數化曲面支持其他形狀控制以影響沿曲面元素之間的邊界的折痕一樣,OpenSubdiv也提供了與邊緣和頂點關聯的其他清晰度值或“權重”,以在任意拓撲上實現相似的結果。
將銳度值設置為最大值(在這種情況下為10,這是出于歷史原因選擇的數字)可以有效地修改細分規則,以使分段平滑表面之間的邊界無限清晰或不連續。
但是,由于現實世界的表面永遠不會真正具有無限銳利的邊緣,尤其是在觀察時足夠近的情況下,通常最好將銳度設置為低于此值,從而使折痕“半銳利”。因此,將恒定的權重值分配給與邊連接的邊序列,就可以創建類似于圓角和混合的特征,而無需添加額外的頂點行(盡管該技術仍然有其優點):
清晰度值的范圍是0-10,其中值0(或更少)對表面沒有影響,值10(或更大)使特征完全清晰。
應當指出,無限銳利的折痕實際上是表面中的切線不連續點,這意味著幾何法線在此也是不連續的。因此,沿著法線移動可能會沿著折痕撕開表面。如果您真的想以折痕移動曲面,最好使折痕為半銳利的。
其他選擇
盡管上述選項代表了各種各樣的工具和建模格式中可用的功能,但還有其他一些功能的識別和采用受到限制。在某些情況下,它們可以改善細分算法的不良行為,但效果不理想。
考慮到它們的有效性有限和缺乏認可,應謹慎使用這些選項。
蔡金法則
“ Chaikin規則”是半銳利折痕方法的一種變體,當銳度值不同時,該方法嘗試改善沿連接的邊緣序列產生的折痕外觀。此選擇使用Chaikin的曲線細分算法修改清晰度值的細分,以在確定子邊緣的清晰度時考慮公共頂點周圍的所有邊緣清晰度。
可以使用枚舉Sdc :: Options :: CreasingMethod中定義的值來設置折痕方法 :
| 模式 | 行為 |
|---|---|
| CREASE_UNIFORM | 應用常規的半清晰折痕規則 |
| CREASE_CHAIKIN | 應用“ Chaikin”半清晰折痕規則 |
連續的半清晰折痕插值示例:
“三角形細分”規則
三角形細分規則是添加到Catmull-Clark方案中的規則,該規則修改了三角形面上的行為以改善通常會導致此類區域的不良曲面偽像。
| 模式 | 行為 |
|---|---|
| TRI_SUB_CATMARK | 默認Catmark方案權重 |
| TRI_SUB_SMOOTH | “平滑三角形”砝碼 |
氣缸示例:
該規則是根據經驗確定的,以使三角形的細分更加平滑。但是,此規則打破了兩個單獨的網格可以通過重疊邊界無縫連接的良好特性。即,當兩個邊界處都有三角形時,不可能無縫地連接網格
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP





























