13

我非常了解 mipmapping。我不明白(在硬件/驱动程序级别)mipmapping 如何提高应用程序的性能(至少这是经常声称的)。在执行片段着色器之前,驱动程序不知道要访问哪个 mipmap 级别,所以无论如何所有 mipmap 级别都需要存在于 VRAM 中,还是我错了?

究竟是什么导致了性能提升?

4

2 回答 2

21

毫无疑问,您知道 mip 链较低 LOD 中的每个纹理像素覆盖了整个纹理图像区域的较高百分比,对吗?

当您在远处对纹理进行采样时,硬件将使用较低的 LOD。发生这种情况时,解决缩小所需的样本邻域变得更小,因此需要更少的(未缓存的)提取。这与纹理采样期间实际必须获取的内存量有关,而不是占用的内存量(假设您没有遇到纹理抖动)。

我认为这可能值得一个可视化的表示,所以我将从arcsynthesis.org的优秀系列教程中借用下图。

     

在左侧,您可以看到当您一直在单个 LOD 上进行天真采样时会发生什么(顺便说一下,该图显示了线性缩小过滤),而在右侧,您可以看到 mipmapping 会发生什么。它不仅通过更紧密地匹配片段的有效大小来提高图像质量,而且由于较低 mipmap LOD 中的纹素数量较少,因此可以更有效地缓存。

于 2013-10-01T21:45:08.117 回答
2

Mipmap 之所以有用,至少有两个原因:

  • 视觉质量 - 场景在远处看起来更好,有更多模糊(通常比闪烁的像素更好看)。此外,可以使用各向异性过滤,大大提高视觉质量。
  • 性能:因为对于远处的物体,我们可以使用更小的纹理,所以整个操作应该更快:有时整个 mip 可以放在纹理缓存中。它被称为缓存一致性。
  • 一般来说,mipmap 只需要多出33%的内存,因此获得更好的质量和潜在的性能增益是相当低的成本。请注意,应针对特定场景结构测量实际性能改进。

在这里查看信息:http ://www.tomshardware.com/reviews/ati,819-2.html

于 2013-10-01T19:11:56.693 回答