OpenGL / DirectX:Mipmapping如何提高性能?

时间:2013-10-01 18:52:11

标签: performance opengl directx mipmaps

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

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

2 个答案:

答案 0 :(得分:15)

毫无疑问,mip-chain的较低LOD中的每个纹素都覆盖了总纹理图像区域的更高百分比,对吗?

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

我认为这可能需要一个直观的表示,所以我将从arcsynthesis.org的优秀系列教程中借用以下图表。

http://opengl.datenwolf.net/gltut/html/Texturing/MipmapDiagram.svg

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

答案 1 :(得分:2)

Mipmap至少有两个原因:

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

请在此处查看信息:http://www.tomshardware.com/reviews/ati,819-2.html