Direct3D 12——纹理——纹理缩小

纹理缩小(miniflcation )是纹理放大的逆运算。在缩小的过程中,大量纹素将被映射到少数纹理之 上 。例如,考虑下列情景:假设有一堵被256x256纹理所映射的墙壁,玩家的观察视角正紧盯着它,并 逐渐向后退却。在此过程中,这堵墙会看上去越来越小,直至它在屏幕上只覆盖大小为64x64像素的区 域。此时,我们就应当将256x256纹素映射到64x64屏幕像素。在这种情况下,像素的纹理坐标处往 往不会有与之对应的纹理图纹素,因此还需要将常数插值过滤器与线性插值过滤器运用于纹理缩小的情形。然而,在执行纹理缩小操作时还有更多的 工作要做。

在透视投影做简单纹理操作后,会变成摩尔纹
Direct3D 12——纹理——纹理缩小_第1张图片

纹理中的屏幕像素
Direct3D 12——纹理——纹理缩小_第2张图片
使用超级采样,就是用多个采样点进行采样,效果是没啥问题,但开销变大了
Direct3D 12——纹理——纹理缩小_第3张图片
从直观上来讲,通过平均下采样 (average downsampling )应当可以使 256x 256 纹素减少到64x64纹素。而mipmap技术则以 占用一些额外的内存为代价来实现与之相似的 功能。在初始化期间(或资源创建时期),通过 对图像下采样来创建mipmap链便可制作出缩 小版的纹理。

因此,这里所指的 求平均值所做的工作实际上就是针对mipmap 的大小执行预计算(提前制作岀不同规格的纹 理)。

mipmap允许(快速、近似、正方形)范围查询
“Mip”来自拉丁语“multum in parvo”,意思是小空间中的群体
Direct3D 12——纹理——纹理缩小_第4张图片

Mip层次结构

Direct3D 12——纹理——纹理缩小_第5张图片
MipMap的存储量比原来多了1/3

使用MipMap做一个近似的在一个正方行形区域内做范围查询,立刻得到这个区域内的平均值是多少
Direct3D 12——纹理——纹理缩小_第6张图片
Direct3D 12——纹理——纹理缩小_第7张图片
Direct3D 12——纹理——纹理缩小_第8张图片

Mipmap级别的可视化

每个像素都算它会投影到纹理上对应多大的区域,然后把多大的区域计算成我们在第几层Mipmap上找平均值。Direct3D 12——纹理——纹理缩小_第9张图片
如果查询到我们在第1.5层,那怎么办?使用三线性插值,就是在第一层做插值,在第二层做插值然后合起来再做一次插值
Direct3D 12——纹理——纹理缩小_第10张图片
经过三线性插值得到的可视化结果
Direct3D 12——纹理——纹理缩小_第11张图片
在运行时,图形硬件将根据程序员的设定, 从以下两种不同的执行方案中择一而行:

1.在纹理贴图时,选择与待投影到屏幕上的几何体分辨率最为匹配的mipmap层级,并根据具体 需求选用常数插值或线性插值。这便是针对mipmap的点过滤(point filtering ),该名称的由 来是因为此种方法与常数插值很相似一我们仅选取与目标分辨率最邻近的那个mipmap层 级并用它进行纹理贴图。

2.在纹理贴图时,选取与待投影到屏幕上的几何体分辨率最为匹配的两个邻近的mipmap层级(一 个稍大于屏幕上几何体的分辨率,一个稍小于屏幕上几何体的分辨率)。接下来,对这两种mipmap 层级分别应用常量过滤或线性过滤,以生成它们各自相应的纹理颜色。最后,在这两种插值纹理 之间再次进行颜色的插值计算。这个过程称为mipmap的线性过滤(linear filtering ),原因是这种 方法与线性插值比较相似一一我们需要对目标分辨率最邻近的两个mipmap层级进行插值计算。

通过从mipmap链中选取恰当的纹理细节级别,可大大减少纹理缩小的运算次数。

但Mipmap还存在一个问题就是在远处的细节模糊的过分了。
Direct3D 12——纹理——纹理缩小_第12张图片
解决办法:各向异性过滤
Mipmap计算是对角线线上的图,但有一些不同的长宽比做运算。下图轴上做了不均匀的压缩
Direct3D 12——纹理——纹理缩小_第13张图片
屏幕上的任何一个像素映射到纹理上可不一定是一个规律的形状,引用各向异性过滤允许我们对长条形的区域做一个快速的范围查询,但是对斜着的矩形区域还是不行。所已引用了EWA过滤

Direct3D 12——纹理——纹理缩小_第14张图片
EWA过滤
就是可以把不规则的形状拆成很多个圆形,进行多次查询覆盖这个不规则形状.
1.使用多个查找
2.加权平均值
3.Mipmap层次结构仍然有帮助
4.可以处理不规则
Direct3D 12——纹理——纹理缩小_第15张图片

你可能感兴趣的:(Direct3D12,3d,图形渲染)