使用显卡在 运行 时间生成 mipmap 或从文件中加载纹理是否更快?
Is it faster to use the graphics card to generate mipmaps at run time, or to load them with the texture from a file?
我了解到将 mipmap 存储在与纹理相同的文件中并同时加载基础图像和 mipmap 是一种常见的做法。另一方面,从存储 space(HDD 或 SSD)读取比使用更接近 CPU 的内存要慢得多; OpenGL 和 Vulkan 等图形 API 允许您使用专用显卡生成 mipmap。
所以我想知道使用显卡在 运行 时间生成 mipmap 是否真的会更快,而不是浪费时间等待虚拟内存读取。此外,如果纹理必须在 运行 时间内动态加载和卸载,答案是否会改变,允许其他操作在从存储 space 加载时继续?
也许这不是您想要的答案,但是,从渲染性能的角度来看,IMO 建议压缩纹理(使用 whatever is supported on the GPU),在这种情况下,您通常生成MIP映射链并压缩'offline'.
鉴于您可以获得 2~8bpp 的压缩结果(即 32bpp 源的原始大小的 1/16 到 1/4 之间),压缩将很容易抵消 1/3 的开销较小的 MIP 贴图级别添加到纹理中。
此外,在实践中,您 可能 在 GPU 上仅限于使用 2x2 盒式过滤器进行下采样,从质量的角度来看,这可能不是最佳选择。
我假设您没有考虑可能生成的内容 'on the fly' 例如用于反射的环境贴图等,在这种情况下纹理压缩并不是真正的选择。
我了解到将 mipmap 存储在与纹理相同的文件中并同时加载基础图像和 mipmap 是一种常见的做法。另一方面,从存储 space(HDD 或 SSD)读取比使用更接近 CPU 的内存要慢得多; OpenGL 和 Vulkan 等图形 API 允许您使用专用显卡生成 mipmap。
所以我想知道使用显卡在 运行 时间生成 mipmap 是否真的会更快,而不是浪费时间等待虚拟内存读取。此外,如果纹理必须在 运行 时间内动态加载和卸载,答案是否会改变,允许其他操作在从存储 space 加载时继续?
也许这不是您想要的答案,但是,从渲染性能的角度来看,IMO 建议压缩纹理(使用 whatever is supported on the GPU),在这种情况下,您通常生成MIP映射链并压缩'offline'.
鉴于您可以获得 2~8bpp 的压缩结果(即 32bpp 源的原始大小的 1/16 到 1/4 之间),压缩将很容易抵消 1/3 的开销较小的 MIP 贴图级别添加到纹理中。
此外,在实践中,您 可能 在 GPU 上仅限于使用 2x2 盒式过滤器进行下采样,从质量的角度来看,这可能不是最佳选择。
我假设您没有考虑可能生成的内容 'on the fly' 例如用于反射的环境贴图等,在这种情况下纹理压缩并不是真正的选择。