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