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