第 9 讲:几何表示

几何表示决定了“什么操作容易、什么操作困难”。同一个球可以写成方程、参数曲面、点云或三角网格;它们描述的是同一形状,却给算法提供了完全不同的接口。

1. 隐式与显式

隐式曲面写成

f(x,y,z)=0.f(x,y,z)=0.

球面可写成

x2+y2+z2−r2=0.x^2+y^2+z^2-r^2=0.

给一个点,代入 ff 就容易判断它在表面、内部还是外部;但要把表面所有点列出来并直接画到屏幕上,并不容易。

显式或参数表示直接给出点:

p(u,v)=(fx(u,v),fy(u,v),fz(u,v)).\mathbf p(u,v) = \bigl( f_x(u,v),f_y(u,v),f_z(u,v) \bigr).

它很容易采样生成网格,却不一定容易回答“空间点在物体内还是外”。

课件强调不存在“最好”的表示:渲染、碰撞、布尔运算、形变和存储偏好的表示并不相同。

2. 代数曲面与 CSG

代数曲面是多项式零集。低次方程可以紧凑表示球、椭球和二次曲面,求交也有明确数学结构;复杂形状的高次方程则难以设计、数值上也不总稳定。

Constructive Solid Geometry 用基本实体做集合运算:

  • 并集组成更大的形状。
  • 交集保留共同部分。
  • 差集挖孔或切除材料。

CSG 树保留了建模过程,特别适合规则机械体。最终渲染时常需把结果转换为边界表示,或在光线查询中直接递归求交。

3. Blobby surface 与距离场

若每个基本体提供随距离平滑变化的场函数,把多个场相加再取等值面,就能让物体之间平滑融合,形成 blobby surface,而不是 CSG 那样的硬边。

有符号距离函数 SDF 记录点到最近表面的距离,并用正负区分内外。理想 SDF 满足

∥∇d(x)∥=1\|\nabla d(\mathbf x)\|=1

几乎处处成立。光线步进可按当前距离安全前进;距离还可用于平滑并、倒角和碰撞估计。真实组合后得到的函数未必仍是精确距离,需要意识到它只是一个可用的近似场。

4. Level Set、体数据与分形

复杂隐式面可存成三维网格上的标量场,再取某个等值面。医学 CT、MRI 可把固定组织密度视为等值面;流体模拟可用 Level Set 跟踪空气与液体边界。

二维表面若存在三维体素网格里,直接存储需要 O(n3)O(n^3) 空间。常见优化是只保存表面附近的 narrow band。

分形以跨尺度自相似和持续细节为特征。它能用很短规则生成复杂形状,但精确边界、采样终止和反走样都需要额外约定。

5. 隐式表示的取舍

优点:

  • 表达可很紧凑。
  • 内外判断、布尔运算和光线求交通常自然。
  • 拓扑变化和表面融合容易处理。

缺点:

  • 表面点不直接可得。
  • 纹理参数化与编辑局部细节不直观。
  • 复杂函数的求根和采样可能昂贵。

6. 显式表示的家族

点云只存采样点,来自扫描设备时最自然,但缺少明确连接关系和封闭表面。通常要估计法线并进一步重建网格。

多边形网格存顶点和面。三角网格最常见:三点必共面、硬件直接支持。Wavefront OBJ 是文本格式,常用 v、vt、vn 和 f 分别记录位置、纹理坐标、法线与面索引。

曲线和曲面也可以显式参数化。Bezier 曲线用控制点与 Bernstein 基函数给出任意参数处的位置;Bezier patch 把这种构造扩到两个参数方向。

细分曲面从粗网格出发反复细分并更新顶点,极限形成光滑表面。它兼顾粗控制网格的可编辑性和高分辨率表面的平滑性。

7. 按任务选表示

任务更自然的表示
快速光栅化三角网格
点扫描数据点云
规则实体布尔建模CSG
平滑融合、体积查询距离场或其他隐式场
流体与拓扑变化Level Set
工业自由曲面参数曲面
艺术建模与光滑极限面细分曲面

工程系统常同时维护多种表示:用 SDF 做碰撞,用网格绘制,用粗控制架编辑。选择表示,本质上是在提前选择后续算法的难度。

评论