mip映射如何与非2幂幂纹理一起工作?


12

我听说最近的GPU都支持非2幂幂纹理,并且所有功能都可以正常使用。但是,我不知道在这种情况下如何进行mip映射。有人可以解释吗?

Answers:


13

规则是要计算下一个mipmap大小,请除以2,然后四舍五入为最接近的整数(除非四舍五入为0,在这种情况下,取整为1)。例如,一个57x43的图像将具有以下mipmap:

level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1

UV贴图,LOD选择和过滤的功能与“二乘幂”纹理大小的工作方式相同。

为非2的幂的纹理生成高质量的mips有点棘手,因为您不能简单地将2x2像素的像素平均在所有情况下进行下采样。但是,2x2盒式滤波器起初并不是那么好,因此无论纹理大小如何,都建议使用更好的下采样滤波器,例如Mitchell-Netravali。


1
这个答案和John Calsbeek的答案之间是否存在分歧?实现是否与两个描述都匹配?如果不是这样,那么对一个或另一个(如果两个都是同时使用的两种不同技术)进行引用将很有用。
trichoplax

4

可以想到的一种方法是,图形卡通常只需填充非2幂的纹理,直到它们在每个方向上都是2的幂,就可以实现它们。这使大多数事情“正常工作”:例如,平铺和硬件过滤。唯一需要更改的是从纹理坐标到图像坐标的转换。

如果这样实现,很明显如何进行mipmapping:没有任何变化。即使您的GPU支持非2幂幂纹理而无需填充,但mipmap级别最终还是以“填充”结束。例如3x3纹理将具有lod 1的2x2纹理。


这个答案和内森·里德的答案之间是否存在分歧?实现是否与两个描述都匹配?如果不是这样,那么对一个或另一个(如果两个都是同时使用的两种不同技术)进行引用将很有用。
trichoplax

1
@trichoplax我认为Nathan的主张“为非2的幂的纹理生成高质量的mips有点棘手”,这使我们的回答至少有些不同意。仅此一项就可能需要更多的阐述。
John Calsbeek

1
我认为这里的问题是,我们将纹理像素的逻辑位置与它们在内存中的“物理”布局混淆了。1)像素是离散项,即,您始终需要整数尺寸,因此缩小奇数尺寸意味着我们必须向上或向下取整。由于我们必须先舍入到Nx1或1xN纹理,因此始终舍入是有意义的。2)当放置在物理地址中时,将纹理填充到某些“方便”的“步幅”大小并不罕见。这样做有两个原因:a)可能使HW更便宜&b)如果P.of.2,Morton订单比较容易。
西蒙F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.