Sample Virtual Texture 节点
描述
对虚拟纹理进行采样,并返回矢量 4 (最多达四个)颜色值以在着色器中使用。可以使用 UV 输入来覆盖 UV 坐标。Sample Virtual Texture 节点将一个 UV 坐标作为输入,并使用该 UV 坐标对 Virtual Texture 中的所有纹理进行采样。
如果要使用 Sample Virtual Texture 节点对法线贴图进行采样,请导航到要作为法线贴图进行采样的每个图层,打开 Layer Type 下拉选单,然后选择 Normal。
默认情况下,此节点只能在片元着色器阶段中使用。有关如何使用此节点或如何配置以在顶点着色器阶段使用的更多信息,请参见Using Streaming Virtual Texturing in Shader Graph。
如果在项目中禁用虚拟纹理 (Virtual Texturing),则此节点的工作方式与 Sample 2D Texture 节点相同,并对每个纹理执行标准的 2D 采样。
您必须将 Sample Virtual Texture 节点连接到要编译的 Shader Graph 资源的 Virtual Texture 属性。如果未将节点连接到属性,则会出现错误,指示该节点需要连接。
有关 Streaming Virtual Texturing 的信息,请参见Streaming Virtual Texturing。
端口
名称 | 方向 | 类型 | 绑定 | 描述 |
---|---|---|---|---|
UV | 输入 | 矢量 2 | UV | UV 坐标。 |
VT | 输入 | 虚拟纹理 | 无 | 要采样的虚拟纹理。必须连接到 Virtual Texture 属性。 |
Out | 输出 | 矢量 4 | 无 | 第 1 层的 RGBA 输出值。 |
Out2 | 输出 | 矢量 4 | 无 | 第 2 层的 RGBA 输出值。 |
Out3 | 输出 | 矢量 4 | 无 | 第 3 层的 RGBA 输出值。 |
Out4 | 输出 | 矢量 4 | 无 | 第 4 层的 RGBA 输出值。 |
设置
Sample Virtual Texture 节点提供了多个设置用于指定其行为。这些设置可与项目中设置的任何脚本结合使用。要查看设置,打开 Graph Inspector 选择该节点。有关更多信息,请参阅Streaming Virtual Texturing。
名称 | 类型 | 选项 | 描述 |
---|---|---|---|
Lod Mode | 下拉选单 | Automatic、Lod Level、Lod Bias、Derivatives | 设置采样纹理时要使用的特定 Lod 模式。 |
Quality | 下拉选单 | Low、High | 设置采样纹理时要使用的特定质量模式。 |
Manual Streaming | 开关 | Enabled/Disabled | 确定节点应使用自动串流还是手动串流。 |
Layer 1 Type | 下拉选单 | Default、Normal | 第 1 层的纹理类型。 |
Layer 2 Type | 下拉选单 | Default、Normal | 第 2 层的纹理类型。 |
Layer 3 Type | 下拉选单 | Default、Normal | 第 3 层的纹理类型。此选项仅在 Virtual Texture 至少具有 3 层时才会出现。 |
Layer 4 Type | 下拉选单 | Default、Normal | 第 4 层的纹理类型。此选项仅在 Virtual Texture 至少具有 4 层时才会出现。 |
生成的代码示例
以下示例代码表示此节点的一种可能结果。
float4 SampleVirtualTexture(float2 uv, VTPropertyWithTextureType vtProperty, out float4 Layer0)
{
VtInputParameters vtParams;
vtParams.uv = uv;
vtParams.lodOrOffset = 0.0f;
vtParams.dx = 0.0f;
vtParams.dy = 0.0f;
vtParams.addressMode = VtAddressMode_Wrap;
vtParams.filterMode = VtFilter_Anisotropic;
vtParams.levelMode = VtLevel_Automatic;
vtParams.uvMode = VtUvSpace_Regular;
vtParams.sampleQuality = VtSampleQuality_High;
#if defined(SHADER_STAGE_RAY_TRACING)
if (vtParams.levelMode == VtLevel_Automatic || vtParams.levelMode == VtLevel_Bias)
{
vtParams.levelMode = VtLevel_Lod;
vtParams.lodOrOffset = 0.0f;
}
#endif
StackInfo info = PrepareVT(vtProperty.vtProperty, vtParams);
Layer0 = SampleVTLayerWithTextureType(vtProperty, vtParams, info, 0);
return GetResolveOutput(info);
}