版本:Unity 6 (6000.0)
语言:英语
在您的项目中启用流式虚拟纹理
虚拟纹理的缓存管理

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

此功能处于实验阶段,尚未准备好用于生产。该功能和文档可能会在将来发生变化或被移除。

您可以将流式虚拟纹理 (SVT) 与您在 着色器图 中创建的着色器在 GPU 上运行的程序。 更多信息
查看 词汇表
一同使用。在开始之前,您必须在您的项目中启用虚拟纹理。内置的 高精度渲染管线 着色器(如 Lit 和 Unlit)不支持 SVT。

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

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

当您在片段阶段使用采样虚拟纹理节点时,SVT 会根据它采样的 UV 自动流式传输纹理贴片。为了实现这一点,采样虚拟纹理节点会将它从渲染目标中读取的贴片 ID 输出。要关闭此功能,请打开节点设置并禁用 自动流式传输。有关更多信息,请参阅 流式虚拟纹理的工作原理

要在顶点阶段使用采样虚拟纹理节点,您首先需要在采样虚拟纹理节点上禁用 自动流式传输,然后选择 LOD细节层次 (LOD) 技术是一种优化方法,当游戏对象与摄像机的距离增加时,它可以减少 Unity 需要渲染的游戏对象三角形数量。 更多信息
查看 词汇表
级别
模式。然后,您必须使用脚本手动请求 SVT 加载贴片。为此,请使用 VirtualTexturing.Streaming.RequestRegion 方法,如下所示

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

您可以使用此方法加载尚未可见的任何贴片,这使您能够执行诸如构建预取系统之类操作。您需要在每一帧调用此方法,否则系统会认为这些贴片不再需要,并在流式传输其他贴片时可能会将其逐出。

This example shows a Virtual Texture Property connected to a Sample Virtual Texture node in Shader Graph.
此示例显示了在着色器图中连接到采样虚拟纹理节点的虚拟纹理属性。

着色器图兼容性

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

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

  • 在着色器图中使用采样虚拟纹理节点时,存在一些限制。

    • 您不能在贴花图或透明着色器中使用采样虚拟纹理节点。如果您以这两种方式中的任何一种使用采样虚拟纹理节点,该节点将使用标准的 2D 纹理采样。
    • 当您在着色器的顶点阶段使用它时,自动虚拟流式传输不起作用。默认情况下,采样虚拟纹理节点不会连接到着色器图中的顶点插槽。要在顶点阶段采样虚拟纹理堆栈,您必须为该纹理设置手动流式传输。为此,将 LOD 模式 设置为 LOD 级别,并在节点设置中禁用 自动流式传输。您还需要编写一个 C# 脚本,用于驱动该纹理的数据请求。有关更多信息,请参阅 VirtualTexturing.Streaming.RequestRegion
    • 某些 渲染管线一系列将场景内容显示在屏幕上的操作。Unity 允许您从预构建的渲染管线中选择,或编写您自己的渲染管线。 更多信息
      查看 词汇表
      或图形设置可能与虚拟纹理流式传输不兼容。如果采样虚拟纹理节点无法与当前配置一起使用,着色器图将在节点设置中显示警告消息,并且该节点将使用标准的 2D 纹理采样。
在您的项目中启用流式虚拟纹理
虚拟纹理的缓存管理