Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance OpenGL/DirectX:Mipmapping如何提高性能?_Performance_Opengl_Directx_Mipmaps - Fatal编程技术网

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

Performance OpenGL/DirectX:Mipmapping如何提高性能?,performance,opengl,directx,mipmaps,Performance,Opengl,Directx,Mipmaps,我很理解你。我不理解(在硬件/驱动程序级别上)mipmapping如何提高应用程序的性能(至少经常有人这样说)。在执行片段着色器之前,驱动程序不知道要访问哪个mipmap级别,因此无论如何,所有mipmap级别都需要存在于VRAM中,还是我错了 到底是什么导致了性能的提高?mipmap之所以有用,至少有两个原因: 视觉质量-场景在远处看起来更好,有更多的模糊(通常比闪烁的像素看起来更好)。此外,可以使用各向异性过滤,大大提高视觉质量 性能:对于远处的对象,我们可以使用较小的纹理,因此整个操作应

我很理解你。我不理解(在硬件/驱动程序级别上)mipmapping如何提高应用程序的性能(至少经常有人这样说)。在执行片段着色器之前,驱动程序不知道要访问哪个mipmap级别,因此无论如何,所有mipmap级别都需要存在于VRAM中,还是我错了


到底是什么导致了性能的提高?

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

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

请参见此处的信息:

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

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

我认为这可能需要一个可视化的表示,所以我将借用下面的图表,它来自于


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

是什么让您认为只占用一些RAM的东西会对性能产生影响?它只是被动地坐在那里。只有主动从RAM中获取数据时,带宽才会被消耗。为了详细说明这一点,大多数高性能3D应用程序的带宽是有限的。通过减少纹理采样的带宽要求(通过重用缓存的texel值),可以加快关键路径的速度。对于算术或CPU受限的应用程序,MIP映射并不能提高性能。因此-性能的提高完全来自缓存效率?@user1282931:是的,这是正确的。看看这里,它基本上把我说的话再清楚一点:谢谢!最后一个问题——“内存带宽”到底是什么?是cpu和Vram之间的带宽吗?或者Vram和着色器单元之间的带宽?@user1282931:图形硬件中的内存带宽通常指Vram->shader。在大多数高性能GPU(如非集成)体系结构中,CPU到VRAM被视为总线通信量(将Xbox 360和下一代游戏机视为例外,而非规则;它们共享CPU和GPU的相同内存接口),这有其自身的带宽限制。但它实际上指的是任何时候必须提取内存,无论是来自缓存、VRAM还是PCIe之类的系统总线,它只是引入了一种层次结构,即越来越慢的源。这并不完全正确。“整个操作[更快]的原因是,当您访问纹理大小与光栅化像素的UV导数(自动选择的MIP级别)相匹配的MIP级别时,由于空间局部性,您可以更好地利用缓存。如果您的纹理不匹配(特别是更小),则每个样本更有可能导致缓存未命中,因此需要从视频内存读取。无论MIP级别的实际大小如何,这都适用。添加了arcsynthesis讨论的链接: