- 着色:对不同物体应用不同的材质。
Blinn-Phong
- 光照类型:高光、漫反射、环境光照。
- Lambert(漫反射项)
- 高光项(V和R很接近==半程向量和法线方向接近)
p限定高光区域的大小(一般为几百)
- 环境光项
- 最终效果就是将上述三个项加起来
着色频率
- 每一个三角形进行一次着色
- 每一个顶点进行一次着色
- 每一个像素进行一次着色
- 计算一个顶点法线的方法:求周围几个三角形的法线的平均(或加权平均)
- 计算一个像素法线的方法:(已经得到了顶点的法线)利用重心坐标插值方法
渲染管线
纹理映射
- n,v都在0~1之内。
- 纹理映射就是将模型上的每个顶点,找出对应在纹理上的u,v坐标。
- 四方无缝连接即一张纹理的各个边可以无缝衔接。
- 重心坐标(如果点在三角形内,则要求三个参数都在0~1之间)
- 重心坐标在投影变换下不能保证重心坐标不变,我们应该先计算三维中的重心坐标然后再插值,而不是再投影后的三角形中插值。
纹理太小怎么办?(高分辨率的模型对应一个低分辨率的纹理)
- Bilinear(双线性插值)
- Bicubic:取临近的16个进行插值
纹理太大怎么办?
- 问题:近处锯齿,远处摩尔纹。
- 解决办法:(1)超采样(消耗太大)(2)mipmap(以空间换时间,只能用于近似正方形查询,多消耗了1/3的空间)
- mipmap层数之间并不连续,假设要查第1.8层,依然可以用双线性插值的方法进行插值,通过这种方式可以得到一个连续的表示。
- mipmap缺点:远处可能会过于的模糊(如下,mipmap主要用于正方形的范围查询,而对应的纹素有可能是斜着的或者长方形的),优化的方法:各向异性过滤(对于长方形的有较好的效果,开销为原来的三倍)。
纹理应用
-
纹理就是一块内存,可以对这样一个区域进行点查询、范围查询或者滤波处理。
-
用作环境光
-
球面地图的问题:顶部和底部会出现错误(解决办法:将该球放在一个立方体中,将地图映射到立方体上展开)、
-
凹凸贴图(凹凸映射),以下为三维情况下计算改变后法线的方式,存在问题:边缘不会改变、无法自己向自己投影
-
位移贴图(实际改变了三角形顶点的位置)
-
作为三维噪声函数。
-
记录一些已经计算好的信息。
-
三维纹理用于体积渲染。