Games101-系列课程笔记-Lecture-09

Games101系列(闫令琪老师)系列课程笔记,该篇为该系列Lecture-09 Shading-P3部分,包含重心坐标、纹理映射、Mipmap、各向异性过滤、EWA等内容~

Games101-系列课程笔记

本篇博客内容为Games-101系列课程的 Lecture 09 Shading3内容,有兴趣的小伙伴可前往GAMES101官网下载相关内容。GAMES101官网

重心坐标

Lecture 8中介绍逐像素法线插值时提到采用重心坐标对三角形内部像素进行插值。那么重心坐标具体指什么呢?

简单定义

三角形所在平面的任意一点,都可以用三个顶点坐标来线性表示,顶点坐标前的系数称为重心坐标,并且这三个系数和为1。
Games101-系列课程笔记-Lecture-09
PS:系数均为非负数,则点在三角形内部(包含边)。

系数计算

Games101-系列课程笔记-Lecture-09
Games101-系列课程笔记-Lecture-09
PS: 重心坐标不具有光栅化不变性,即不具有三维模型中的重心坐标经光栅化投影到二维屏幕后坐标不变的性质。

纹理映射

基本流程

由于重心坐标不具有光栅化不变性,因此纹理映射流程应当如下:

  • 对于屏幕上每一个像素点(x,y)
  • 利用重心坐标计算该点在纹理上对应的纹理坐标(u,v)(texture coordinate)
  • 通过纹理坐标得到纹理颜色(texcolor)
  • 用纹理颜色取代kd(Bling-Phong反射模型中的漫反射系数)

如果纹理太小怎么办

纹理如果太小,得到的纹理坐标往往是非整数值。宏观来说,纹理如果太小,纹理就需要被拉大以适应纹理映射的需求,而低分辨率的纹理强行被拉大会导致纹理模糊,一般有如下三种处理方法。
Games101-系列课程笔记-Lecture-09

Nearest(就近插值)

Nearest方法是对非整数纹理坐标(texture)采用四舍五入的方式,即选用最近的texture的texcolor来近似,但纹理过小会导致小范围内的像素(pixel)(如3×3,5×5)会映射到同一texture上。

Bilinear(双线性插值)

Games101-系列课程笔记-Lecture-09
双线性插值算法流程如下:

  • 选择非整数纹理坐标点P周围的四个texture。
  • P与左下角texture中心横坐标相差s,与右上角texture中心纵坐标相差t。并且设一维线性插值公式为:
    Games101-系列课程笔记-Lecture-09
  • 先做两次水平方向的一维线性插值:
    Games101-系列课程笔记-Lecture-09
  • 再做一次竖直方向的一维线性插值
    Games101-系列课程笔记-Lecture-09

Bicubic(双三次插值)

和Bilinear相比,选用了纹理坐标周围16个texture,仍然是在水平和竖直方向做两次插值,但是在每个方向上基于三次插值法做插值。

如果纹理太大怎么办

近处出现锯齿(Jaggies),远处出现摩尔纹(Moire)。
Games101-系列课程笔记-Lecture-09

纹理和上下采样的关系

Games101-系列课程笔记-Lecture-09
可以看出,屏幕上的物体越小(即下采样),其对应的纹理面积越大。

宏观理解

纹理过大,则一个像素点覆盖的纹理面积大,因此纹理内部的变化更加丰富(高频),所以在采样频率低的情况下势必产生走样。

Mipmap

既然采样频率低会导致走样,如果不采样怎么样?这就是Mipmap。Mipmap是一种范围查询方法,不同于采样的点查询方法,它能判断某一纹理范围内的纹理颜色平均值,而不需要采样。
Games101-系列课程笔记-Lecture-09
Mipmap对原始图像进行下采样(downsampling),从而得到不同分辨率下的图像,构成了类似图像金字塔状的图像分布。
Games101-系列课程笔记-Lecture-09
可以看到,左图一个像素映射到纹理上(如右图虚线框部分)。我们用边长为L的正方形来近似虚线框部分,L的长度计算公式和D(边长L的正方形在Mipmap上映射为边长为1的正方形所在的层数)计算公式如上图所示。通过Mipmap可以确保每一个像素(pixel)都能在Mipmap映射到一个纹素(texel)上。Mipmap需要额外1/3的存储空间。

那么,如果D算出来不是整数怎么办?
Games101-系列课程笔记-Lecture-09
在第D层和第D+1层分别做双线性插值,然后在层与层之间再做一次插值。

Mipmap的缺点:
Games101-系列课程笔记-Lecture-09

各向异性过滤

Mipmap依然会导致模糊(Overblur),因为Mipmap只能查询正方形区域内的平均值,而对于非正方形区域会造成一定误差,解决这一问题的办法是各向异性过滤(Anisotropic Filtering)。
Games101-系列课程笔记-Lecture-09
右上图如果只看主对角线方向,就是Mipmap;如果看整幅图就是各向异性过滤,可以看到各向异性过滤就是对原图长宽进行不同比例的拉伸和压缩。各向异性过滤的额外开销是原来的3倍,远大于Mipmap(1/3)。

Games101-系列课程笔记-Lecture-09

EWA

各向异性过滤对上图橙色类型区域具有较好效果,但依然无法解决斜区域(紫色区域)。这里可以采用EWA(椭圆加权平均)过滤,用多个椭圆去覆盖待查询的区域,然后通过多次查询来覆盖不规则形状,但牺牲了时间复杂度。

参考

[1]. GAMES101_Lecture_09.pdf
[2]. Shirley P , Marschner S R . Fundamentals of Computer Graphics[M]. AK Peters, 2005.

版权声明:本文为博主夜阑澜原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_30287331/article/details/122521855

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年1月17日 上午11:25
下一篇 2022年1月17日 下午3:30

相关推荐