细分曲面建模技术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 | “平滑三角形”砝码 |
气缸示例:
该规则是根据经验确定的,以使三角形的细分更加平滑。但是,此规则打破了两个单独的网格可以通过重叠边界无缝连接的良好特性。即,当两个边界处都有三角形时,不可能无缝地连接网格
查看更多评论 >