纹理应用
环境光
默认环境光来自无限远,没有深度位置。由于球面的扭曲性,用正方体来表示各个方向的环境光照。
凹凸贴图
纹理可以有相对高度,在不改变模型几何的情况使像素法线不一样,最后产生不同的着色效果。
通过切线可以计算法线。二维做切线的垂直或者旋转,三维做两个切线的叉乘。
位移贴图
通过凹凸贴图来真的改变模型的几何形状。但是要求三角形精度需要大于纹理贴图的变化频率。
纹理还可以是三维,也可以加上环境光遮蔽,作为纹理每个点的一个属性,来影响着色。
几何
隐式几何
不给出几何中点的坐标,只给出几何中点满足的关系。但是难以表达复杂几何。
可以判断任意一个点是否在表面内外,但较难找出所有表面的点。
显式几何
直接给出所有的点或者给出满足一一对应的对应关系和上面的点。可以轻松找出几何上的所有点,但较难判断任意点的相对位置。
更多的表示法
隐式:通过基本几何的交并补来表示复杂几何、blend给出距离函数的两张图(给出空间中任一点到几何的最近距离)、分形。
显式:点云(用足够多的点表示几何)、多边形面(Polygon Mesh)。
曲线
贝塞尔曲线
定义起止点和起始和结束的方向。de Casteljau算法可以画出贝塞尔曲线,贝塞尔曲线是显示表示,因为每个参数t都能唯一表示一个点,函数关系由贝塞尔多项式给出。

性质:仿射变换后的贝塞尔曲线和顶点做仿射变换画出的贝塞尔曲线相同。控制点形成的贝塞尔曲线在控制点的凸包内。
由于多个点的贝塞尔曲线比较平滑,且难以控制,一般采用分段贝塞尔曲线,4个控制点生成一段贝塞尔曲线,然后连接起来。
几何连续(C0连续):两段贝塞尔曲线相交。
切线连续(C1连续):两段贝塞尔曲线的交点切线方向相同,大小相同。
样条(Spline)
给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制。B样条具有局部性。
曲面
贝塞尔曲面
由两个方向的贝塞尔曲线构成,需要两个参数u、v表示,可以唯一表示曲面上的任何一个点。同样,贝塞尔曲面也是显示表示。
网格操作
- 网格细分
- 网格简化
- 网格正规化
**网格细分:**在增加三角形个数的同时,还需要改变三角形的位置使得几何更加光滑。
loop细分:


无论新老顶点,目的都是平滑,所以做法就是取加权平均,对自己和周边的点的依赖程度不同。
Catmull-Clark Subdivision
loop细分只能作用于三角形面,Catmull-Clark能作用于各种面。
**网格简化:**当对性能有要求或者远距离观察几何时,不需要特别多的三角形,所以需要做网格简化。
边坍缩是一种简化网格的方法。

依次坍缩二次度量误差较小的边,但是需要更新每次坍缩后的受影响的边的二次度量误差。对局部用边坍缩近似得到总体的简化,经典的贪心思想。

光线追踪
为什么要做光线追踪?因为着色是一个局部的动作,只考虑观看方向、局部平面(法线方向)和光照方向。对其他物体和物体的某些部分对局部平面的影响完全不考虑。
Shadow Mapping是图线空间算法,在光栅化的情况下达到上述效果。
- 先从光源看向场景,得到深度图。
- 再从相机看向场景,把看到的像素和深度图的像素作比较,看是否需要阴影。
但是会存在浮点数精度问题和深度图的分辨率小造成的阴影走样问题,而增加阴影图会造成额外的开销,而且这个算法只能做硬阴影。

软阴影和硬阴影
软阴影是介于本影和半影之间的过度,阴影程度取决于能看到多大的光源,而点光源是没有软阴影的。