【Direct3D】纹理过滤

与人不求备,检身若不及。 ——《尚书·伊训》。

与人:对于别人。备:完备,十全十美。检身:检在自己。不及:不够。这两句大意是:对于别人不求全责备.检查自己总觉得像是有某些不足。这两句是说对待别人.不应过于苛求.要看到人家的长处,优点;而对待自己要严格.要经常认识自己的不足,这样才指保持谦虚、谨慎.既能学到别人的长处,又能克服自身的缺点。然而在现实生活中,人们往往过分地苛求别人,过高地估计自己。因此,熟记这个名句,常常对照检查自己,是会受益非浅的。可供论述严以律己、宽以待人时引用。

纹理过滤

什么是纹理过滤?

Direct3D将2D或者3D的图形,通过坐标变化映射到屏幕上,当使用纹理在渲染的时候,就是使用纹理为二维屏幕的每个像素进行着色,这里的每个像素都包含一个来自纹理的颜色值,而从纹理中为每个像素获取颜色的过程,就是纹理过滤(texture filtering)。

为什么需要纹理过滤?

一般情况,屏幕显示的图形大小与纹理贴图大小是不同的,也就是说,纹理会被映射到比它本身大或者小的图元上,这样就会导致纹理会放大或者缩小。

放大会导致一个纹理像素被映射到多个图元像素,这样会导致色块现场。

缩小会导致多个纹理像素被映射到一个图元像素,这样会导致闪烁失真或者锯齿。

为了解决这些问题,有四种纹理过滤方式。

  • 最近点采样过滤 (nearst-point sampling)

    选择中心点最接近纹理坐标的那个像素,也是最简单的纹理过滤方式,只需要一次采样,效率最高

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGIExhul-1606896076014)($%7Bimg%7D/v2-d11618dac1bf7c415775726abfc66565_720w.jpg)]

  • 线性纹理过滤(linear texture filtering)

    选择中心点周围的4个纹素加权计算出来,需要4次采样。

    在这里插入图片描述

  • 三线性纹理过滤

    在双线性过滤中只选取了 texel 和 pixel 之间大小最接近的一层 mipmap 进行采样,而三线性则是分别对texel 与 pixel 最接近的两层 mipmap 进行双线性采样然后再将这两层的结果进行线性插值。

在这里插入图片描述

  • 各向异性过滤(anisotropic texture filtering)

    之前的几种纹理过滤方式都是各向同性,也就是他们在纹理贴图时是默认贴图是平行于屏幕进行贴的,但实际是贴图会与屏幕有一定倾斜的。这个倾斜会导致投射到屏幕空间后U方向和V方向比例是不一样的,因此我们引入各向异性。与各向同性的mipmap中纹理都是正方形不同,各向异性过滤会按比例在各方向上采样不同数量的点来进行计算。

    为了减小计算量,只有当屏幕空间与纹理空间的夹角到达一定程度时,才能进行各向异性过滤。

  • 多级渐进过滤(texture filtering with mipmaps)

    由一组分辨率主键降低的纹理序列组成,每一级纹理的宽度和高度都是上一级纹理的一般。纹理映射时,D3D自动选择衣服与物体大小相近的纹理进行渲染。

Tips

在D3D的API:CreateTexture中有一个参数levels,就是用于指定生成mipmap到哪个级别,当不指定时就一直生成到1X1

比较

各种过滤模式 采一个pixel需要sample的次数

过滤模式采样数
Nearest Point Sampling1
Bilinear4
Trilinear8
Anisotropic Filtering 4X32
Anisotropic Filtering 16X128

最近点采样过滤

  1. 速度最快、效果最差

  2. 如果纹理和图元大小相近,采用最近点采样过滤对图像质量影响不大,如果相差太大,效果较差。

线性纹理过滤

  1. 使用最广泛
  2. 与最近点采样相比,有效的提高图像质量,资源消耗变动不大。

各向异性过滤

  1. 效果最好,计算量最大

多级渐进过滤

  1. 通常配合其他方式使用

多级渐进纹理过滤效果通常最好,与各向异性过滤联合使用效果更佳。但是资源最多,计算量最大。

API

SetSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value);
// 第一个参数:指定那一层纹理
// 第二个参数:用来指定对那种纹理采样属性来进行操作。
// 第三个参数:对第二个参数指定的属性进制设置。

Tips

各向同性 : 当需要贴图的三维表面 平行于屏幕, 则是各向同性的.
各向异性 : 当要贴图的三维表面与屏幕有一定角度的倾斜,则是各向异性的.

也可以这样理解,当一个texture贴到三维表面上从Camera看来没有变形,投射到屏幕空间中后U方向和V方向比例仍然是一样的,便可以理解成各向同性。反之则认为是各向异性。

参考:

  1. https://blog.csdn.net/sharp2wing/article/details/5683379

  2. https://zhuanlan.zhihu.com/p/137242786

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值