Version: 2023.1
在项目中启用 Streaming Virtual Texturing
虚拟纹理的缓存管理

在 Shader Graph 中使用 Streaming Virtual Texturing

This feature is experimental and not ready for production use. The feature and documentation might be changed or removed in the future.

您可以将 Streaming Virtual Texturing (SVT) 与您在 Shader Graph 中创建的着色器一同使用。在开始之前,您必须在您的项目中启用虚拟纹理。内置的高清渲染管线着色器(例如 Lit 和 Unlit)不支持 SVT。

要使用 SVT 流式传输纹理,您必须将纹理添加到虚拟纹理属性。虚拟纹理属性定义了一组相关纹理。要对这些纹理进行采样,请将虚拟纹理属性连接到 Sample Virtual Texture 节点。Sample Virtual Texture 节点将一个 UV 坐标作为输入,并使用该 UV 坐标对所有纹理进行采样。

您应该尽可能将纹理组合到同一个虚拟纹理属性中。这是因为对属于同一虚拟纹理属性的多个纹理进行采样比对多个虚拟纹理属性进行采样更有效。

当您在片元阶段使用 Sample Virtual Texture 节点时,SVT 会根据其采样的 UV 自动流式传输纹理图块。为此,Sample Virtual Texture 节点将其读取的图块 ID 输出到渲染目标中。要关闭此功能,请打开节点设置并禁用 Automatic Streaming。有关更多信息,请参阅 Streaming Virtual Texturing 的工作原理

要在顶点阶段使用 Sample Virtual Texture 节点,首先需要在 Sample Virtual Texture 节点上禁用 Automatic Streaming,然后选择 Lod Level 模式。然后,您必须使用脚本手动请求 SVT 加载图块。为此,请使用 VirtualTexturing.Streaming.RequestRegion 方法,如下所示:

VirtualTexturing.Streaming.RequestRegion(Material, Stack ID, Rect, mipmap, numMips)

您可以使用此方法加载任何尚不可见的图块,这允许您实现诸如构建预取系统之类的功能。您需要在每一帧中调用此方法,否则系统会假定不再需要这些图块,并可能在流式传输其他图块时将它们清除。

此示例演示在 Shader Graph 中连接到一个 Sample Virtual Texture 节点的虚拟纹理属性。
此示例演示在 Shader Graph 中连接到一个 Sample Virtual Texture 节点的虚拟纹理属性。

Shader Graph 兼容性

  • 您必须在 Shader Graph 中分配虚拟纹理属性的所有纹理字段。

  • 对于您分配给虚拟纹理属性的每个唯一纹理组合,SVT 将其复制到流式虚拟纹理的唯一部分。因此,如果您在虚拟纹理属性中使用许多不同的纹理组合,可能会增加您的项目构建大小,因为每个组合都是单独存储的。

  • 在 Shader Graph 中使用 Sample Virtual Texture 节点时存在一些限制。

    • 您不能在 Decal Graph 中或透明着色器上使用 Sample Virtual Texture 节点。如果以上述任一方式使用 Sample Virtual Texture 节点,则该节点将使用标准 2D 纹理采样。
    • 当您在着色器的顶点阶段使用自动虚拟串流时,该功能不起作用。默认情况下,Sample Virtual Texture 节点不连接到 Shader Graph 中的顶点字段。要在顶点阶段对虚拟纹理堆栈进行采样,您必须为该纹理设置手动流式传输。为此,请将 Lod Mode 设置为 Lod Level,并在节点设置中禁用 Automatic Streaming。您还需要编写一个 C# 脚本驱动对此纹理的数据请求。有关更多信息,请参阅 VirtualTexturing.Streaming.RequestRegion
    • 某些渲染管线或图形设置可能与虚拟纹理串流不兼容。如果 Sample Virtual Texture 节点不适用于当前配置,Shader Graph 会在节点设置中显示警告消息,并且该节点使用标准 2D 纹理采样。
在项目中启用 Streaming Virtual Texturing
虚拟纹理的缓存管理