Answers:
规则是要计算下一个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。
可以想到的一种方法是,图形卡通常只需填充非2幂的纹理,直到它们在每个方向上都是2的幂,就可以实现它们。这使大多数事情“正常工作”:例如,平铺和硬件过滤。唯一需要更改的是从纹理坐标到图像坐标的转换。
如果这样实现,很明显如何进行mipmapping:没有任何变化。即使您的GPU支持非2幂幂纹理而无需填充,但mipmap级别最终还是以“填充”结束。例如3x3纹理将具有lod 1的2x2纹理。