1.3 参数化表面表示
来源:Mario Botsch 等人的 Polygon Mesh Processing,第 1 章 Surface Representations,1.3 小节 Parametric Surface Representations。
这一节讨论参数化表面表示。它的基本思想是:用一个二维参数域 上的函数,把二维点映射到三维表面。
本节核心
参数化表面用一个向量值函数定义:
其中:
也就是说,表面上的点由二维参数坐标生成:
这种表示的核心优势是:很多原本发生在三维表面 上的问题,可以转化到二维参数域 中处理。
参数化表示的优势
采样方便
如果想在表面上采样点,可以先在参数域中采样:
然后计算:
这样就把三维表面采样问题变成了二维域采样问题。
邻域关系清楚
在参数化表示中,geodesic neighborhood 比较容易获得。
如果两个参数点在 中相邻:
那么它们映射到表面上的点通常也是表面邻近点:
这比直接在三维空间中根据欧氏距离判断邻域更可靠,因为空间距离近不一定表示沿表面相邻。
变形操作直接
如果有一个三维变形函数:
那么可以通过函数复合修改表面:
也就是:
这让某些几何编辑和自由形变操作比较自然。
参数化表示的弱点
参数化表面并不总是方便。
最大的问题是:参数域 必须匹配表面 的拓扑和度量结构。
参数化本身可能很难
复杂表面通常很难找到一个低失真的参数化。
所谓低失真,是指参数域和三维表面上的距离、角度、面积变化尽量一致。
如果表面被拉伸、扭曲、折叠得很厉害,参数化质量就会下降。
这也是为什么后续第 5 章会专门讨论 parameterization。
拓扑修改困难
如果 连续且单射,那么表面 的拓扑基本由参数域 决定。
这意味着,如果要改变表面拓扑,例如:
- 合并两个区域。
- 切开一个区域。
- 删除一块表面。
- 打洞或补洞。
就不能只改三维表面,还要同时改参数域和参数化函数。
这通常很麻烦。
空间查询不方便
对于参数曲面,inside / outside 查询、signed distance 查询、closest point 查询通常不便宜。
例如,给定三维点 ,想知道它到表面 的最近点,需要求:
这一般是一个非线性优化问题。
同样,自交检测也比较困难,因为需要判断参数域中不同点是否映射到同一个三维位置。
参数化表示擅长采样、局部邻域和表面编辑,但不擅长拓扑变化、inside/outside 查询和自交检测。
1.3.1 Spline Surfaces
Spline surfaces,尤其是 tensor-product spline surfaces,也就是常说的 NURBS,是 CAD 系统中的标准表面表示。
它们常用于:
- 高质量曲面建模。
- Class A 曲面。
- 工业设计。
- 自由曲面编辑。
Tensor-product spline 的形式
一个双变量 tensor-product spline surface 可以写成:
其中:
- 是控制点。
- 和 是 B-spline 基函数。
- 控制点组成 control mesh。
如果基函数满足非负性和 partition of unity:
那么表面点就是控制点的凸组合。
这带来两个重要性质:
- 表面位于控制网格的凸包内。
- 控制点只在局部范围内影响曲面。
因此,设计者可以通过移动控制点比较直观地调整曲面形状。
Spline 的局限
Tensor-product surface 本质上来自矩形参数域:
所以它天然表示的是一个矩形曲面片。
如果要表示拓扑复杂的形状,就必须把模型拆成很多 patches。
这会带来问题:
- CAD 模型可能包含大量曲面片。
- patch 之间必须满足光滑连接约束。
- 全局编辑时要维护很多拓扑和几何条件。
- 后续处理会变复杂。
此外,传统 tensor-product spline 的局部 refinement 也不方便。
如果想增加控制点,通常要切分整行或整列参数区间,这会影响一大片区域,而不是只影响局部。
书中提到 T-splines 可以缓解这个问题,因为它们支持更局部的控制网格细化。
1.3.2 Subdivision Surfaces
Subdivision surfaces 可以看作 spline surfaces 的推广。
它们同样由粗控制网格控制,但相比 tensor-product splines,它们可以表示任意拓扑的曲面。
基本过程是:
粗控制网格
-> 拓扑细分
-> 根据局部 averaging rules 更新顶点位置
-> 重复迭代
-> 极限曲面
经过精心设计的细分规则,在极限情况下可以得到具有可证明光滑性的曲面。
Subdivision 的优点
Subdivision surfaces 的优点包括:
- 不像 tensor-product splines 那样受矩形 patch 拓扑限制。
- 可以处理任意流形拓扑。
- 具有天然层级结构。
- 适合高效的多分辨率处理。
它在动画、建模和高质量曲面表示中很常见。
Subdivision 的限制
Subdivision surfaces 也有限制。
它们生成的网格具有 semiregular subdivision connectivity。
也就是说,网格连接关系必须来自某个粗网格的重复均匀细分。
但现实中的任意三角网格通常不满足这种连接结构。
如果要把任意网格变成 subdivision connectivity,就需要先 remesh。
这个过程相当于重新采样表面,可能造成:
- 采样伪影。
- 信息损失。
- 特征变钝。
- 局部细节变化。
因此,本书的目标更偏向直接处理 arbitrary triangle meshes,而不是要求输入先变成 subdivision mesh。
1.3.3 Triangle Meshes
很多几何处理算法把 triangle mesh 简单看成一堆三角形。
但从数学上看,每个三角形都可以通过 barycentric parameterization 定义一个 piecewise linear surface patch。
重心坐标
对于三角形:
内部任意点 可以唯一写成:
并满足:
这里的 就是 barycentric coordinates。
如果参数域中也选一个三角形:
那么可以定义线性映射:
这说明每个三角形本身就是一个简单的参数曲面片。
三角网格由几何和拓扑组成
一个三角网格 包含两部分。
拓扑部分
拓扑部分描述哪些顶点连成哪些面。
顶点集合:
三角面集合:
有时为了高效处理,也会显式存储边集合:
几何部分
几何部分给每个顶点一个三维位置:
一旦顶点位置确定,每个三角面就嵌入到了三维空间中。
即使网格只显式存了离散顶点和三角面,它表示的仍然是一个连续的 piecewise linear surface,而不只是一些离散点。
三角网格的逼近误差
如果用三角网格去逼近一个足够光滑的表面,piecewise linear approximation 的误差阶为:
其中 是最大边长。
这意味着,如果把边长减半:
误差大约变为:
但每个三角形会被分成 4 个小三角形,因此面数大约变为:
所以三角网格的逼近误差大致和面数成反比。
曲率决定局部采样密度
误差的实际大小和真实表面的二阶项有关,也就是和曲率有关。
因此,合理的网格不应该均匀到处加密,而应该自适应:
- 平坦区域:低采样密度。
- 高曲率区域:高采样密度。
- sharp feature 附近:保留更多几何元素。
这就是很多 remeshing / simplification / adaptive sampling 方法的核心原则。
三角网格的 2-manifold 条件
一个三角网格是 2-manifold,意味着每个点附近都像二维圆盘,边界处像半圆盘。
对三角网格来说,常见的 non-manifold 问题包括:
- non-manifold edge:一条边关联超过两个三角形。
- non-manifold vertex:多个面片团只在一个顶点处粘在一起。
- self-intersection:表面发生自相交。
这些结构会破坏局部 geodesic neighborhood,使得很多算法无法定义稳定邻域。
非流形网格不是单纯“不好看”,而是会让邻域、法向、曲率、参数化、平滑等基本操作失去明确意义。
Euler 公式和网格规模关系
对于闭合且连通的三角网格,有 Euler 公式:
其中 是 genus,可以直观理解为“洞柄数量”:
- sphere:
- torus:
- double torus:
在很多实际模型中, 相比顶点、边、面数量很小,因此右侧可以近似忽略。
又因为:
- 每个三角形有 3 条边。
- 每条内部流形边被 2 个三角形共享。
所以有近似关系:
平均顶点 valence 约为:
这些关系在分析网格算法复杂度、数据结构内存占用、文件格式规模时很有用。
三类参数化表示的对比
| 表示 | 优点 | 局限 |
|---|---|---|
| Spline / NURBS | 高质量光滑曲面,适合 CAD | patch 管理复杂,拓扑受限,局部 refinement 不方便 |
| Subdivision surface | 支持任意流形拓扑,层级结构好 | 需要 semiregular subdivision connectivity |
| Triangle mesh | 简单、高效、适合任意离散输入 | 只有 连续,光滑性需要离散估计 |
本书后续重点选择 triangle meshes,是因为它们灵活、直接、适合扫描和一般几何处理任务。
和 1.2 的关系
1.2 说明几何处理中更偏好:
h-refinement > p-refinement
也就是用更多简单片段逼近复杂表面。
1.3 中的 triangle mesh 正是这种思想的代表:
它牺牲了一部分解析光滑性,换来了简单、局部、灵活和高效。
本节记忆点
- 参数化表面由 定义,把二维参数域映射到三维表面。
- 参数化表示适合采样、表面邻域、纹理和某些变形操作。
- 参数化表示不擅长拓扑修改、inside/outside 查询和自交检测。
- NURBS 是 CAD 中常用的 tensor-product spline surface。
- Tensor-product splines 对复杂拓扑不友好,通常需要很多 patches。
- Subdivision surfaces 可以表示任意流形拓扑,但要求 subdivision connectivity。
- Triangle mesh 是 piecewise linear parametric surface。
- 三角网格包含拓扑 和几何顶点位置 。
- 三角网格逼近光滑表面的误差为 。
- 对闭合连通三角网格,近似有 、、平均 valence 约为 6。
后续问题
进入 1.4 时可以重点关注:
- 隐式表面为什么更适合 inside/outside 查询?
- 为什么 signed distance function 是自然的隐式表示?
- 隐式表示为什么方便拓扑变化,但不方便采样和贴纹理?
- regular grid 和 adaptive data structures 的内存开销差别在哪里?