GAMES101 lecture 7-9 笔记 着色

Z-Buffering/depth buffering 深度缓冲

传统按每个三角形的距离排序来决定遮挡关系的方法不好用(复杂度高),而且可能存在无法解决的情况:
在这里插入图片描述
Z-buffering 的步骤如下:

  1. 在frame buffer(存储颜色)之外新建一个深度缓冲(depth buffer)
  2. 初始化深度缓冲使得每个像素的深度都为无穷大
  3. 遍历并存储最小深度和此时的颜色,具体如下:
    在这里插入图片描述
    这种方法不仅复杂度低(O(n)),同时画不同三角形的顺序也不会影响结果。
    大多用GPU跑。

Shading 着色

图形学中指“The process of applying a material to an object.”

Blinn-Phong Reflectance Model

该模型是描述光照反射情况的(BRDF)经验模型
其函数由漫反射Ld、镜面反射Ls和环境光反射La共同决定。

Lambert’s cosine law

指物体表面和光照方向不同导致接收到的辐射通量会损失,实际收到的需要乘以cosθ
在这里插入图片描述

漫反射

在这里插入图片描述
kd在有纹理之后往往直接用纹理(颜色)来表示。

镜面反射

镜面反射的程度高低主要取决于视线角度和反射角度是否接近,完全一致时理论上接收到所有光照通量,之前的Phong模型是直接比较视线向量和反射向量(有入射和法向量得),而Blinn-Phong模型选择用半程向量h = bisector(v, l) 来替代法向量,从而简化了计算量,整体Ls如下:
在这里插入图片描述
其中p次方的原因是单纯的cosα函数下降的不够快,导致角度偏移较大时仍有较多光照(不符合实际情况),所以需要放大下降程度:
在这里插入图片描述
当p越大时,反光的部分面积越小。
一般opengl等实际情况中p在100-200之间,可能偏移3、4度就无明显反光效果了。

Ambient Term

因为环境光照的原因,还会带来偏移量,因而简单的用Laa = ka Ia 来表示。

总体而言,该模型为如下:
在这里插入图片描述

Shading Frequencies

着色频率决定了整体效果,从简到难有

  • 基于三角形的着色(flat shading)
    利用每个三角形的法向量
  • 基于顶点的着色(gouraud shading)
    在不同三角形间插值顶点的颜色,使得每个顶点都有自己的法向量(按面积加权平均)
  • 基于像素的着色(Phong shading)这个Phong纯属巧合
    在各个顶点的法向量间利用重心插值(之后会讲)获得,记得对结果归一化

也不是任何情况都用最后一种,比如模型本身已经很复杂(三角形很细化)时就可以用第一种

Graphics Pipeline

在这里插入图片描述
所谓的shading发生在vertex processing或frament process两部,取决于上述着色频率
frament其实就是对应像素

在Fragment Processing这步往往会贴纹理(Texture mapping)

Texture mapping

  • 决定了漫反射系数kd
  • 使得不同位置显示不同颜色的主要原因
  • 把物体表面摊开(方形或其它形状)

Barycentric Coordinates(重心坐标)

在这里插入图片描述
在这里插入图片描述
有简化算法:
在这里插入图片描述
重心插值不仅可以用在取位置上,也可以用在纹理、坐标、颜色、法向、深度、材料属性等等方面。
重心坐标在投影之后也不会变,能完美使用。

Applying Textures

伪算法如下:
在这里插入图片描述

Texture Magnification

如果纹理贴图太小,则需要用双线性插值来给贴不到的像素填充颜色纹理:
在这里插入图片描述
如果纹理贴图太大:

  • 可以采用超采样来让像素点更多,但是成本太大
  • 取对应纹理区域的平均值,即Mipmap
Mipmap

步骤如下:

  1. 若纹理贴图太大,通过平滑滤波可以使其降到各种2的次方倍的低像素贴图,分为各层(D来表示),得到这些贴图也只是多了1/3的成本。
  2. 对屏幕(最终成像)上每个像素通过计算得到其在纹理贴图上的位置,然后比较相邻间的距离,取较大距离者划定正方形纹理区域对应该像素在这里插入图片描述
  3. 根据划定的区域去对应的层数(D)(该层上该像素对应一个像素而非过大或过小)取得对应位置的纹理
    这样处理了所得的结果会有不连续的情况,且不可能次次完美取到某层,因此继续用插值:
  4. 假设算出来是1.8层,则去1层和2层双线性插值,再用一次插值,获得最终结果。

mipmap具有一个限制:Overblur(因为只能选定正方形去缩小,而有时候像素对应到纹素上是细长矩形)

Anisotroipc Filtering(Ripmap)& EWA filtering

在这里插入图片描述
对比mipmap,ripmap多了矩形区域而不局限于正方形,从而对这种长条形的区域表示的更准确,而非像mipmap那样选了相对很大的正方形,从而造成overblur
在这里插入图片描述
EWA用椭圆等更复杂的来表示,效果更好但成本更高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值