我非常了解 mipmapping。我不明白(在硬件/驱动程序级别)mipmapping 如何提高应用程序的性能(至少这是经常声称的)。在执行片段着色器之前,驱动程序不知道要访问哪个 mipmap 级别,所以无论如何所有 mipmap 级别都需要存在于 VRAM 中,还是我错了?
究竟是什么导致了性能提升?
我非常了解 mipmapping。我不明白(在硬件/驱动程序级别)mipmapping 如何提高应用程序的性能(至少这是经常声称的)。在执行片段着色器之前,驱动程序不知道要访问哪个 mipmap 级别,所以无论如何所有 mipmap 级别都需要存在于 VRAM 中,还是我错了?
究竟是什么导致了性能提升?
毫无疑问,您知道 mip 链较低 LOD 中的每个纹理像素覆盖了整个纹理图像区域的较高百分比,对吗?
当您在远处对纹理进行采样时,硬件将使用较低的 LOD。发生这种情况时,解决缩小所需的样本邻域变得更小,因此需要更少的(未缓存的)提取。这与纹理采样期间实际必须获取的内存量有关,而不是占用的内存量(假设您没有遇到纹理抖动)。
我认为这可能值得一个可视化的表示,所以我将从arcsynthesis.org的优秀系列教程中借用下图。
在左侧,您可以看到当您一直在单个 LOD 上进行天真采样时会发生什么(顺便说一下,该图显示了线性缩小过滤),而在右侧,您可以看到 mipmapping 会发生什么。它不仅通过更紧密地匹配片段的有效大小来提高图像质量,而且由于较低 mipmap LOD 中的纹素数量较少,因此可以更有效地缓存。
Mipmap 之所以有用,至少有两个原因: