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

Games101-系列课程笔记


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


重心坐标

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

简单定义

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

系数计算

系数1
系数2
PS: 重心坐标不具有光栅化不变性,即不具有三维模型中的重心坐标经光栅化投影到二维屏幕后坐标不变的性质。

纹理映射

基本流程

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

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

如果纹理太小怎么办

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

Nearest(就近插值)

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

Bilinear(双线性插值)

Bilinear图示
双线性插值算法流程如下:

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

Bicubic(双三次插值)

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

如果纹理太大怎么办

近处出现锯齿(Jaggies),远处出现摩尔纹(Moire)。
纹理过大结果图

纹理和上下采样的关系

纹理和上下采样的关系
可以看出,屏幕上的物体越小(即下采样),其对应的纹理面积越大。

宏观理解

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

Mipmap

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

那么,如果D算出来不是整数怎么办?
三线性插值
在第D层和第D+1层分别做双线性插值,然后在层与层之间再做一次插值。

Mipmap的缺点:
Mipmap缺点

各向异性过滤

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

各向异性过滤2

EWA

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


参考

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值