图形学笔记(八)着色2 —— 纹理映射、重心坐标、双线性插值、Mipmap、三线性插值、各向异性过滤、纹理的应用(环境贴图、法线贴图等)
图形学笔记(十)几何2 —— 曲面细分(Loop细分、Catmull-Clark细分)、曲面简化(边坍缩、二次度量误差)、曲面正则化
1 几何的表示方法
分为显式(Explicit)和隐式(Implicit)。
隐式几何的表现形式:
- algebraic surface
- level sets
- distance function
显式几何的表现形式:
- point cloud
- polygon mesh
- subdivision,NURBS
1.1 隐式的几何表示(Implicit)
1.1.1 概览
基于对点进行归类,找到满足特定关系的点。例如:球体,在三维空间中可以写成 x 2 + y 2 + z 2 = 1 x^2+y^2+z^2=1 x2+y2+z2=1。
更通用的表示,f(x,y,z) = 0
优点:
- 很容易判断点是否在面上。(将点代入f(x,y,z),正数表示点在图形外,负数表示点在图形内,0表示点在图形上。)
- 表述起来很容易(对存储很有利)。
- 容易做面与光线求交。
- 容易描述和处理拓扑结构。
缺点:难以描述复杂的形状,很难知道这个面上有哪些点,很难看出式子表示的是什么形状。
1.1.2 CSG —— Constructive Solid Geometry(Implict)
通过一系列基本几何的基本布尔运算来定义新的几何。
例子:
这个方法在很多建模软件得到了很多的应用。
1.1.3 距离函数 Distance Function(Implict)
距离函数:给出任何一个位置到物体的最短距离。对一个点不描述表面,而是描述点到表面的最近距离。
把两个物体的距离函数都算出来然后把两个距离函数做融合(blending)
例子:混合一个移动的边界
通过blend两个SDF可以得到移动后的边界。
分别求出两个物体对应的距离函数, 然后把他们blend起来,然后恢复成原本的面(找出SDF 的值为0的位置)
1.1.4 水平集 Level Set Methods(Implict)
封闭形式的方程很难描述复杂的形状,所以选择一种替代方案:存储一个值近似函数的网格(可以是二维的也可以是三维的)
通过找到插值为0的位置来找到表面,它具有一个对形状更加显示的控制。
例子:
如果有一个三维的纹理表示人体不同位置的骨密度,可以让密度函数=某个具体的值,然后找到所有满足这个等式的位置,就可以得到一个表面。
1.1.5 分形 Fractals(Implict)
分形又有自相似的意思,自己的部分和整体很像(有点像递归),例子有雪花(不断的六边形)、下面的西兰花等。
这些类型的几何在渲染时会造成强烈的走样。
1.2 显式的几何(Explicit)
1.2.1 概览
所有的点直接给出,或通过参数映射定义表面。
优点:对于表示形状很容易。
有点:难以判断点是否在表面上(或内、外)。
1.2.2 点云(Point Cloud)
- 简单的表示为点的列表(x,y,z)
- 可以简单的表示任何一种几何图形
- 对于表示大数据集是很有用的(>>1 point/pixel)
- 经常被转换成多边形网格
- 难以在采样不足的区域画出来
1.2.3 多边形网格(Polygon Mesh)
- 存储点和多边形(通常是三角形或四边形)
- 容易去处理/模拟,进行自适应采样
- 数据结构比较复杂
- 图形学中最常用的表示
eg:The Wavefront Object File(.obj)格式
它是一个文本文件,由指定的顶点、法线、纹理坐标和它们的连接组成。
如下图表示了一个立方体:
- v是顶点坐标
- vn是法线(多了两条是因为建模误差)
- vt是纹理坐标
- f(face)表示面,比如f 5/1/1 1/2/1 4/3/1 表示这个三角形面是由第5、1、4个顶点组成的,三个点的纹理坐标是第1、2、3对应的纹理坐标,这个面的法线是第一条法线。
2 曲线(Curves)
应用:相机拍摄路径、 动画曲线、定义字体(控制点)。
2.1 贝塞尔曲线(Bezier Curves)
2.1.1 概览
用一系列的控制点来定义某一条曲线。这些控制点使用切线来定义贝塞尔曲线。
如下图,注意曲线起始方向沿着 P 0 P 1 P_0P_1 P0