几何的基本表示方法
这一篇我们进入图形学中几何的讲解。
通常,几何的表示方法被严格划分为两大阵营:隐式几何表示(Implicit Representations)和显式几何表示(Explicit Representations)。
下面我们分别介绍一下这两种表示方法。
隐式几何表示
隐式表示并不直接告诉你表面上有哪些点,而是给出一个满足特定关系的数学公式或规则。对于空间中任意一点
代表方式有:代数曲面 (Algebraic Surfaces)、构造实体几何 (Constructive Solid Geometry, CSG)、符号距离场 (Signed Distance Fields, SDF) 等。
代数曲面
代数曲面使用纯数学方程直接定义几何形状。这种方法非常精确,但只能表示相对简单的规则形状。
如图,代数曲面可以精确地表示很多形状,但是对于复杂图形,表示函数会极其复杂。
构造实体几何
这种方法通过对基本的隐式几何体(如球体、立方体、圆柱体)进行布尔运算(交集、并集、差集)来构建复杂的形状。这种方法在工业 CAD 设计软件中非常常见。
如图,我们可以利用布尔运算,得到复杂形状。
符号距离场
这种方法不记录表面本身,而是记录空间中每个点到离它最近的表面的距离。如果距离为正,表示点在物体外部;如果为负,表示点在内部;为零则表示在表面上。SDF 在现代高级渲染(如光线步进、流体模拟以及 Unreal Engine 5 的 Lumen 技术)中应用极为广泛。
隐式表示的特点
- 优势:非常容易判断一个点是在物体内部还是外部;布尔运算极其简单;理论上具有无限的分辨率,镜头拉得再近也不会产生锯齿。
- 劣势:很难直观地知道表面具体长什么样;极难在表面上均匀采样;难以直接对特别复杂、无规则的现实形状(如人脸、衣服褶皱)进行建模。
显式几何表示
显式表示是直接或参数化地给出构成几何体表面的所有点或面片。这也是目前游戏和实时渲染中最主流的方式。你可以把它们想象成由很多微小的零件拼凑起来的壳。
代表方法有:点云 (Point Cloud)、多边形网格 (Polygon Mesh)、参数曲线与曲面 (Parametric Curves and Surfaces)。
点云
这种方法是最简单的显式表示。它就是包含大量 3D 坐标
如图,只要点足够多,就可以显示出精细的模型。
多边形网格
这种方法是图形学绝对的”统治者”,尤其是三角形网格(Triangle Mesh)。它由顶点 (Vertices)、边 (Edges) 和面 (Faces) 组成。因为三角形是最简单的多边形,且三个点必定共面,现代 GPU 都是专门为了极快地处理三角形而设计的。市面上 99% 的 3D 游戏模型都是基于网格的。
如图,我们可以通过许多的三角形面片拼出完整的形状。
这种方法还有许多网格处理方法,我们之后再介绍。
参数曲线与曲面
这种方法是通过一系列控制点 (Control points) 和参数方程
如图,这是贝塞尔曲线和曲面,属于参数方法,也是我们后面要重点介绍的。
显式表示的特点
- 优势:极其方便进行光栅化渲染(绘制到屏幕上);很容易在表面上采样、绑定骨骼和贴图(UV 映射);能极其细致地刻画任意复杂的形状。
- 劣势:很难判断一个给定的点是在物体内部还是外部(需要复杂的射线检测算法);布尔运算非常复杂且容易产生几何错误(如破面)。
总结
简单来说,隐式几何像是在“制定规则”(符合这个方程的才是我的表面),适合做物理碰撞检测、布尔运算和光线追踪;而显式几何像是在“直接画图”(把这些点连成一个个三角形),极度适合现代 GPU 进行高效的实时渲染。
这次的插图来自画师 mmAir
图片地址:https://www.pixiv.net/artworks/124883229