版本:Unity 6 (6000.0)
语言:English
在 Shader Graph 中使用流式虚拟纹理
将纹理标记为“仅虚拟纹理”

虚拟纹理的缓存管理

此功能为实验性功能,尚未准备好投入生产使用。此功能和文档将来可能会更改或删除。

虚拟纹理在 GPU 内存中使用固定大小的纹理缓存。每个图形格式都有一个缓存。您可以配置缓存的默认大小并覆盖其默认大小。

流式虚拟纹理 (SVT) 系统还在主内存中使用一个 CPU 缓存来存储瓦片页面。瓦片页面包含多个瓦片,SVT 系统会将它们全部一起从磁盘读取到 CPU 缓存中。这提高了从较慢驱动器读取磁盘的吞吐速度。当虚拟纹理系统请求一个瓦片时,它会读取包含该瓦片的页面。在接下来的帧中,系统很可能会请求该页面中的其他瓦片,因此 CPU 缓存会保留该页面以避免再次从磁盘读取。CPU 缓存越大,虚拟纹理可以在主内存中保留页面的时间就越长。

当虚拟纹理渲染具有使用该格式的纹理的纹理堆栈的材质时,它会分配给定图形格式的 GPU 缓存。您可以在HDRP 资源上配置缓存大小(以 MB 为单位),这允许您为每个质量级别设置不同的配置。

您还可以使用VirtualTexturing.Streaming.SetGPUCacheSettings方法在脚本中设置缓存大小。

您可以更改缓存大小,但这会导致资源密集型的 CPU 和 GPU 操作,并阻塞主线程和渲染线程。更改缓存大小所需的时间取决于缓存的大小和数量。为了避免明显的冻结或卡顿,您应该在帧率不太重要的时段(例如加载关卡时)更改缓存大小。

影响给定缓存最佳大小的主要因素是输出屏幕分辨率和每个使用该图形格式的纹理堆栈中的图层数量。场景中的材质数量和纹理的分辨率对最佳大小的影响不大。对于最高质量设置下的全高清屏幕分辨率,组合的总 GPU 缓存大小通常为 700 MB。

当缓存的大小太小而无法容纳其内容时,就会发生称为“缓存抖动”的问题,它必须在同一帧中加载和卸载瓦片。为了防止缓存抖动,虚拟纹理系统会根据需要自动降低纹理质量。它会监控缓存使用情况,并自动管理像素着色器中纹理堆栈采样的 mipmap 偏差。如果缓存已满,mipmap 偏差会增加。这确保了虚拟纹理系统请求较低分辨率的瓦片,从而节省了缓存空间,使其能够容纳所有请求的瓦片。

如果纹理看起来模糊,请尝试增大缓存的大小。如果缓存已经足够大以最高质量渲染帧,则进一步增大缓存大小意味着缓存可以在驱逐瓦片之前更长时间地保留瓦片。这可以减少在移动或旋转摄像机时不希望出现的纹理弹出等效果,因为最近可见的瓦片更有可能仍然存在于缓存中。

在 Shader Graph 中使用流式虚拟纹理
将纹理标记为“仅虚拟纹理”