Version: Unity 6.0 (6000.0)
语言 : 中文
在项目中启用 Streaming Virtual Texturing
虚拟纹理的缓存管理

在 Shader Graph 中使用 Streaming Virtual Texturing

此功能为实验性功能,尚未准备好用于生产环境。未来可能会对功能和文档进行更改或移除。

可将串流虚拟纹理(Streaming Virtual Texturing,SVT)与在 Shader Graph 中创建的着色器结合使用。在开始之前,必须在项目中启用虚拟纹理 (Virtual Texturing)。内置的高清渲染管线着色器(例如“光照”和“无光照”)不支持 SVT。

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

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

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

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

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

可以使用此方法加载任何尚不可见的图块,从而实现诸如构建预取系统之类的功能。您需要每一帧都调用这个方法,否则系统会认为这些图块不再需要,并且在流式传输其他图块时有可能会将它们逐出。

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

Shader Graph 兼容性

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

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

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

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