Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

1 重心坐标

1 重心坐标引入原因

作三角形内的插值。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
为啥要插值呢?
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

内容:定义在三角形顶点的法线
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

2 重心坐标

三角形内的任意点都可以用三角形的三个点的坐标线性表示。
重心坐标是三个数,实际上是三个数。
点在三角形内,必须满足这三个系数都大于零。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
A点自己的重心坐标是什么?
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
其实这三个数都是可以用三角形的面积比求出来。如下图:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
中心坐标的一个特性如下:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
任意一个点的重心坐标计算公式如下:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
先算出它的重心坐标,然后再插值然和属性。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
重心坐标在投影之后坐标会变化,所以插值三维空间的属性,就应该插值三维空间中的重心坐标,然后再对应到二维空间中。

重心坐标和插值的关系是什么呢?

2 Texture queries

Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

1 纹理的放大texture magnification

纹理太小了怎么办?纹理就会被拉大,取到的指会是非整数。
texel纹理元素,纹素
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

1 Nearest 四舍五入

2 Bilinera interpolation 双线性插值

找邻近的四个点。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
线性插值:
双线性插值:水平和竖直方向插值。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
水平方向插值:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
竖直方向插值:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

3 bicubic

取邻近的周围的16个点。
开销降下去,然后得到一样的结果。

2 纹理太大

1 导致的问题

纹理大了,问题更严重。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
问题如下:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
问题原因:
屏幕上覆盖的纹理大小都是不一样的。
一个像素覆盖的纹理大的时候,用像素中心取采样,是不可以的。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

2 解决办法:超采用,but太慢

Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
像素内部包含很大的纹理,
采用一个像素内采样多个点来采样这快很大的纹理,来做反走样。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

3 Mipmap

用另一个方法:不采样。
任何一个区域你要得到它的平均值。这个就是mipmap
点查询和范围查询问题;
以前做的是点查询
这个问题是范围查询,查平均值。有不同种类的
如何快速知道它的平均值。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

mipmap可以做近似查询,但是有以下的特点;
快,不准,正方形
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
mipmap:一张图生成多张图。
第一层:分辨率128X28
第二层:64X64
… : …
拿到纹理后,先生成mipmap
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
在视觉领域内,叫做图像金字塔。
mipmap引入了多大的存储量呢?
和第一幅图小,这个是级数求和的,1+1/4+1/16+。。。。
只是增加了原来存储量的1/3。
另外一种理解方式:

////这一块比较难懂。
查询的区域有多大?
任何一个像素都可以映射到纹理上的一个区域。

Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

在第几层取查它呢?在D=log2L;

离的近的在底层查,离的远的在高层查
会有不连续的地方,没有1.5层,如何做呢?
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
层与层之间的插值,用来解决不连续的问题:如下
三线性插值:做两次查询,做一次插值
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
mipmap的限制
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
mipmap在远处就完全模糊了,为啥了?
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
解决办法:各向异性过滤,如下:
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
多了不均匀的水平和竖直方向的压缩。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影
各向异性解决了对于矩形的查询,但是对于斜行的,没法解决。开销增加了3倍
各个方向上表现都不同。mipmap是各向同性。

EWA过滤。
采用了多次查询。
Game101课程笔记_lecture09_着色(插值,高级纹理映射)与阴影

整个光栅化的过程都涉及到了。这是硬件要做的事情。

3 纹理的应用