可将串流虚拟纹理(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 中分配虚拟纹理属性的所有纹理字段。
对于分配给 Virtual Texture 属性的每个唯一纹理组合,SVT 将其复制到串流虚拟纹理的唯一部分。因此,如果您在 Virtual Texture 属性中使用许多不同的纹理组合,可能会增加您的项目构建大小,因为每个组合都是单独存储的。
在 Shader Graph 中使用 Sample Virtual Texture 节点时存在一些限制。
VirtualTexturing.Streaming.RequestRegion。