Version: 6000.3
语言: 中文
在项目中启用流送虚拟纹理
虚拟纹理的缓存管理

在着色器图表中使用流送虚拟纹理

此功能处于实验阶段,尚未准备好用于生产环境。该功能和文档将来可能会更改或删除。

你可以将流送虚拟纹理(SVT)与着色器在 GPU 上运行的程序。更多信息
请参阅术语表
着色器图表中创建。在开始之前,你必须在项目中启用虚拟纹理。内置的高清渲染管线着色器(如 Lit 和 Unlit)不支持 SVT。

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

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

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

要在顶点阶段使用示例虚拟纹理节点,你首先需要在 示例虚拟纹理(Sample Virtual Texture) 节点上禁用 自动流送(Automatic Streaming) ,然后选择LOD 细节级别 (LOD) 技术是一种优化,可减少 Unity 在游戏对象与相机的距离增加时必须为游戏对象渲染的三角形数量。更多信息
请参阅术语表
水平
模式。然后,您必须使用脚本手动请求 SVT 加载磁贴。为此,请使用VirtualTexturing.Streaming.RequestRegion方法如下:

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

您可以使用此方法加载任何尚不可见的图块,这允许您执行诸如构建预提取系统之类的作。需要每帧调用此方法,否则系统会假定不再需要磁贴,并在流式传输其他磁贴时可能会逐出它们。

此示例显示了连接到着色器图表中 示例虚拟纹理(Sample Virtual Texture) 节点的虚拟纹理属性。
此示例显示了连接到着色器图表中 示例虚拟纹理(Sample Virtual Texture) 节点的虚拟纹理属性。

着色器图兼容性

  • 你必须在着色器图表中分配虚拟纹理属性的所有纹理插槽。

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

  • 在着色器图表中使用 示例虚拟纹理(Sample Virtual Texture) 节点时,存在一些限制。

    • 你不能在贴花图表或透明着色器上使用 Sample Virtual Texture 节点。如果你以上述任一方式使用 采样虚拟纹理(Sample Virtual Texture) 节点,则该节点将改用标准2D纹理采样。
    • 在着色器的顶点阶段使用自动虚拟流式处理时,它不起作用。默认情况下,示例虚拟纹理节点不会连接到着色器图表中的顶点插槽。要在顶点阶段对虚拟纹理堆栈进行采样,必须为该纹理设置手动流送。为此,请将 Lod 模式(Lod Mode) 设置为 Lod 级别(Lod Level),并在节点设置中禁用 自动流送(Automatic Streaming) 。您还需要编写一个 C# 脚本来驱动此纹理的数据请求。有关更多信息,请参阅VirtualTexturing.Streaming.RequestRegion.
    • 一些渲染管线 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
      请参阅术语表
      或者图形设置可能与虚拟纹理流送不兼容。如果 采样虚拟纹理(Sample Virtual Texture) 节点不适用于当前配置,则着色器图表(Shader Graph) 会在节点设置中显示一条警告消息,并且该节点将改用标准2D纹理采样。
在项目中启用流送虚拟纹理
虚拟纹理的缓存管理