Geometry
分类
Implicit 隐式几何
不会告诉任何点的信息,只会告诉该曲面上所有点满足的关系
f(x,y,z) = 0
容易判断点在物体内外
具体表示方法:
- Algebraic Surfaces 代数曲面
f(x,y,z) = 0 - Constructive Solid Geometry (CSG)
通过基本几何的基本布尔运算形成新的几何
- Signed Distance Functions (SDF) 符号距离函数
通过空间中的点到几何体的最小距离描述几何体
距离函数是描述表面的函数,两个距离函数相加,就是两个物体表面的特征融合相加
如图定义空间中每一个点的SDF为该点到阴影区域右边界的垂直距离,对这两个距离函数选择性的做一些运算得到最终的距离函数,采用最简单的SDF = SDF(A)+SDF(B),最终得到的SDF为零的点的集合即为blend之后曲面
只需合理定义空间中任意一个点的SDF,再令SDF为0即可得到混合的效果了 - Level Set Methods水平集
像是SDF的一种特殊形式 找出函数值为0的地方作为曲线 对该面内的每一个点利用已经定义好的格子值进行双线性插值就可以得到任意一点的函数值,找出所有=0的点作为曲面
- Fractals 分型几何
类似递归 自相似的形体所组成
Explict 显式几何
所有曲面的点被直接给出,或者可以通过映射关系得到
f(u,v) = ((2+cosu)cosv,(2+cosu)sinv,sinu) 通过uv即可找到所有点值
难以判断点在物体内外
具体表示方法:
- Point Cloud 点云
一堆点 - Polygon Mesh 多边形网格
定义各个多边形面的顶点以及顶点之间的连接关系得到三角形面或是四边形面
.obj模型文件
3-10行定义了立方体的8个顶点信息 12-25行定义了这些顶点的纹理坐标信息(每个面4个点,共6个面所以最多有24种不同的纹理坐标信息,这里有一些纹理对于不同面上的点是公用的) 27-34行定义了6个面的法线信息,8个是因为建模软件输出的精度问题 其中有两个是重复的 36-47行f代表一个面,其中x/x/x的第一位表示是哪个顶点,第二位表示该顶点纹理坐标是第几个,第三位表示法线信息是第几个 3个 x/x/x表示3个顶点的信息构成一个面
Curve
Bézier Curves(贝塞尔曲线)
曲线会与初始与终止端点相切,并且经过起点p0与终点p3
给定一个参数t∈[0,1]就能确定贝塞尔曲线上的一点,倘若取完所有t值,就能得到完整的贝塞尔曲线
de Casteljau Algorithm 画贝塞尔曲线
核心就是多次的线性插值,并在生成的新的顶点所连接构成的线段之上递归的执行这个过程,直到得到最后一个顶点
Algebraic Formula 代数公式
塞尔曲线方程恰好就是一个关于参数 t 的二次方程,控制点的系数很像二项系数
伯恩斯坦多项式
Properties of Bézier Curves 性质
- 必定经过起始与终止控制点
- 必定经与起始与终止线段相切
- 具有仿射变换性质,可以通过移动控制点移动整条曲线
- 凸包性质,曲线一定不会超出所有控制点构成的多边形范围
Piecewise Bézier Curves 分段贝塞尔曲线
拼接光滑 一阶连续(连接点导数的左右极限相等),二阶连续等
其它曲线: B-splines等
Surfaces
Bézier Surfaces
曲面形成
设 u∈[0,1],v∈[0,1]
- 在如红圈4个控制点之下利用u之前曲线的方法得到蓝色点,得到4个蓝色点。(灰色曲线分别为每列4个点所对应的贝塞尔曲线)
- 得到4个蓝色顶点之后,在这四个蓝色顶点的基础之下利用第二个参数v可以成功得出贝塞尔曲面上的正确一点
- 遍历所有的 u,v值就可以成功得到一个贝塞尔曲面
Mesh Operations: Geometry Processing
Mesh subdivision 曲面细分
将一个模型的面合理的分成更多小的面,从而提升模型精度,提高渲染效果
Loop Subdivision
- 生成更多三角形或顶点
连接每条边的中点生成一个新的三角形 调整这些三角形或顶点的位置
- 对新的顶点
周围4个顶点的权重之和,各顶点权重如图所示,其余边上的新顶点处理类似 - 对旧的顶点
也是其自身以及邻接顶点的权重和,但权重的设置与该旧顶点度数有关
- 对新的顶点
Catmull-Clark Subdivision
Loop细分针对所有三角形面,Catmull-Clark细分可以处理多边形面
对于所有不是四边形的面称之为Non-quad face
所有度不为4的顶点称之为Extraordinary vertex奇异点
细分步骤: 在每个面中都添加一个点,在每条边的中点也都添加一个点,面上的新顶点连接所有边上的新顶点
有几个Non-quad face,就会多出几个奇异点
新多出来的奇异点的度数与原来所在面的边数相等
第一次细分之后所有面都会变成四边形,且往后奇异点数目不再增加
各类顶点位置调整:
Mesh simplification 曲面简化
将一个模型的面合理的合成更少的面,从而降低模型精度,为特定情形下提供使用(如LOD技术)
edge collapsing 边坍缩
将一条边的两个顶点合成为一个顶点Quadric Error Metrics 二次误差度量
坍缩之后蓝色新顶点所在的位置与原来各个平面的垂直距离之和最小
- 为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量
- 选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置
- 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值
- 重复上述步骤,直到到达终止条件(贪心)
Mesh regularization 曲面规则化
将三角面都变的尽可能相同,提升模型效果