如果在包含自定义函数节点或子图形的图形中使用此节点时遇到纹理采样错误可以通过升级到 Unity 10.3 或更高版本来解决这些问题。这些版本对纹理数组的支持更加完善修复了早期版本中可能存在的一些兼容性问题。创建节点菜单类别在 Shader Graph 的创建节点菜单中Sample Texture 2D Array 节点位于Input - Texture分类下。您可以通过以下步骤找到并添加该节点在 Shader Graph 窗口中右键点击空白区域选择Create Node菜单导航至Input类别选择Texture子菜单点击Sample Texture 2D Array即可添加节点兼容性Sample Texture 2D Array 节点在 Unity 的不同渲染管线中具有广泛的兼容性具体支持情况如下内置渲染管线通用渲染管线 (URP)高清渲染管线 (HDRP)是是是需要注意的是在默认设置下此节点只能连接到 Shader Graph 的片段着色器上下文中的块节点。如果需要在顶点着色器上下文中采样纹理您必须将 Mip 采样模式设置为​LOD​。这种限制是由于顶点着色器中缺乏自动的 mipmap 级别计算所需的屏幕空间导数信息。输入端口详解Sample Texture 2D Array 节点提供了多个输入端口每个端口都有特定的功能和用途Texture Array 输入Texture Array端口接受 Texture 2D Array 类型的资源输入。这是节点的核心输入决定了要采样的纹理数组资源。在 Unity 中创建纹理数组需要通过脚本或导入设置专门配置无法直接将普通纹理用作纹理数组。使用纹理数组时需要注意所有包含的纹理必须具有相同的尺寸、格式和 mipmap 级别纹理数组在内存中是连续存储的访问效率较高支持压缩格式但所有纹理必须使用相同的压缩方案Index 输入Index端口接受 Float 类型的输入用于指定要采样的纹理在数组中的索引位置。索引值应该是整数但节点也接受浮点数输入此时会自动取整。如果提供的索引超出了数组的有效范围行为取决于平台通常会自动钳制到有效范围内。索引的使用技巧可以使用时间节点驱动索引变化来创建纹理动画结合顶点颜色或材质属性可以实现基于距离或角度的纹理切换通过噪声函数控制索引可以创建随机的纹理变化效果UV 输入UV端口接受 Vector 2 类型的输入定义了纹理采样的坐标位置。UV 坐标通常来自 UV 节点或其他纹理坐标生成节点。对于纹理数组UV 坐标的应用方式与普通 2D 纹理完全相同。UV 处理的注意事项UV 坐标通常在[0,1]范围内但可以通过采样器状态设置环绕模式可以使用 Tiling And Offset 节点对 UV 进行缩放和偏移在顶点着色器中采样时需要确保 UV 坐标在三角形面上是连续的Sampler 输入Sampler端口接受 Sampler State 类型的输入用于定义纹理采样的详细参数。如果不连接此端口节点将使用默认的采样器状态。通过 Sampler State 节点您可以精确控制过滤模式Filter Mode点过滤、双线性过滤、三线性过滤环绕模式Wrap Mode重复、钳制、镜像等各向异性过滤级别比较函数用于深度纹理LOD 输入LOD输入端口仅在Mip 采样模式设置为LOD时显示。它允许您明确指定要使用的 mipmap 级别。值为 0 表示最高分辨率的 mip 级别正值表示较低分辨率的 mip 级别。LOD 输入的典型应用在顶点着色器中强制使用特定 mip 级别创建自定义的 mipmap 过渡效果性能优化时手动控制纹理细节级别Bias 输入Bias输入端口仅在Mip 采样模式设置为Bias时可用。它用于调整自动计算的 mipmap 级别负值偏向更高分辨率正值偏向更低分辨率。Bias 的使用场景微调纹理的锐利度或模糊度创建特殊视觉效果时调整纹理细节配合动态分辨率缩放系统DDX 和 DDY 输入DDX和DDY输入端口仅在Mip 采样模式设置为Gradient时显示。这两个端口允许您提供自定义的屏幕空间导数用于 mipmap 级别计算而不是使用从 UV 坐标自动计算的导数。自定义导数的应用在自定义 UV 映射中提供正确的导数处理投影纹理或其他非线性映射特殊渲染效果中控制 mipmap 选择其他节点设置Sample Texture 2D Array 节点的图表检查器中提供了多个高级设置选项这些设置可以显著改变节点的行为Use Global Mip Bias 设置Use Global Mip Bias是一个切换选项控制节点是否使用渲染管线的全局 mip 偏差。启用此选项时节点会将全局 mip 偏差值纳入 mipmap 级别计算中。​启用状态​Shader Graph 使用渲染管线的全局 mip 偏差来调整采样时的纹理信息细节级别。这对于保持整个场景中纹理一致性很重要特别是在动态分辨率渲染或特定的视觉风格需求下。​禁用状态​Shader Graph 忽略全局 mip 偏差仅使用节点自身的设置计算 mip 级别。这在需要精确控制特定纹理外观时很有用。Mip Sampling Mode 设置Mip Sampling Mode是一个下拉菜单提供了四种不同的 mipmap 采样模式每种模式都适用于特定的使用场景Standard 模式在Standard模式下渲染管线自动计算并选择最适合当前像素的 mipmap 级别。这是最常用的模式适用于大多数常规纹理采样需求。标准模式的特点自动基于屏幕空间 UV 导数计算 mip 级别提供最佳的视觉质量和性能平衡不支持在顶点着色器中使用LOD 模式LOD模式允许您为纹理采样明确指定 mipmap 级别无论像素间的 DDX 或 DDY 计算如何纹理始终使用指定的 mip 级别。LOD 模式的关键特性支持在顶点着色器上下文中采样纹理适用于需要精确控制纹理细节级别的场景可以用于创建特殊的 mipmap 过渡效果Gradient 模式Gradient模式允许您提供自定义的 DDX 和 DDY 值用于 mipmap 级别计算而不是使用从 UV 坐标自动计算的导数。梯度模式的应用场景自定义 UV 映射和投影效果屏幕空间效果和后期处理需要精确控制 mipmap 选择的特殊着色器Bias 模式Bias模式允许您设置一个偏差值来调整自动计算的 mipmap 级别。负值偏向更高分辨率的 mip正值偏向更低分辨率的 mip。偏差模式的使用技巧微调纹理的外观而不影响其他纹理创建特定距离下的纹理优化艺术导向的纹理细节控制输出端口Sample Texture 2D Array 节点提供了多个输出端口让您可以灵活地访问采样结果的不同部分RGBA 输出RGBA输出端口返回完整的 Vector 4 颜色值包含纹理样本的红、绿、蓝和透明度通道。这是最常用的输出适用于大多数颜色采样需求。各通道独立输出节点还提供了各个颜色通道的独立输出端口​R​红色通道的浮点数值​G​绿色通道的浮点数值​B​蓝色通道的浮点数值​A​透明度 Alpha 通道的浮点数值独立通道输出的应用当只需要纹理的特定通道时可以减少计算量分离颜色和透明度信息进行独立处理使用单通道纹理作为数据源如高度图、遮罩图等示例图形用法基础用法示例在以下示例中Sample Texture 2D Array 节点采样一个包含四种不同布料法线贴图的纹理数组。通过更改传递给索引端口的数值可以动态切换不同的法线贴图实现材质变体效果。动画序列帧示例纹理数组非常适合处理动画序列帧。通过将动画的每一帧存储为纹理数组中的一个切片然后使用时间节点驱动索引变化可以创建流畅的纹理动画// 伪代码示例使用时间控制纹理数组索引float frameRate 24.0; // 帧率float totalFrames 64.0; // 总帧数float currentIndex floor((Time.time * frameRate) % totalFrames);这种方法的优势避免频繁切换纹理资源带来的性能开销所有动画帧可以批量加载和卸载支持随机访问任意帧便于实现暂停、倒放等效果地形混合系统示例在复杂的地形系统中纹理数组可以用于管理多种地表材质。通过结合高度图、坡度图或其他遮罩信息可以动态选择最适合当前地形的纹理// 伪代码示例基于高度选择纹理float height World Position.Y;float snowHeight 50.0;float rockHeight 30.0;float textureIndex;if (height snowHeight) {textureIndex 3; // 雪地纹理} else if (height rockHeight) {textureIndex 2; // 岩石纹理} else {textureIndex 1; // 草地纹理}性能优化技巧使用纹理数组时以下技巧可以帮助优化性能将经常同时使用的纹理打包到同一个数组中减少纹理切换合理设置 mipmap 级别平衡质量和性能在移动平台上注意纹理数组的大小和格式使用纹理数组流式加载系统管理内存使用生成代码示例了解 Sample Texture 2D Array 节点生成的底层着色器代码有助于深入理解其工作原理并在需要时进行自定义修改。基础采样代码以下 HLSL 代码展示了节点在标准模式下的典型实现HLSL// 生成的着色器代码示例float4 _SampleTexture2DArray_RGBA SAMPLE_TEXTURE2D_ARRAY(Texture, Sampler, UV, Index);float _SampleTexture2DArray_R _SampleTexture2DArray_RGBA.r;float _SampleTexture2DArray_G _SampleTexture2DArray_RGBA.g;float _SampleTexture2DArray_B _SampleTexture2DArray_RGBA.b;float _SampleTexture2DArray_A _SampleTexture2DArray_RGBA.a;不同采样模式的代码差异根据选择的 mip 采样模式生成的代码会有所不同LOD 模式代码HLSL// LOD模式下的采样代码float4 _SampleTexture2DArray_RGBA SAMPLE_TEXTURE2D_ARRAY_LOD(Texture, Sampler, UV, Index, LOD);Gradient 模式代码HLSL// Gradient模式下的采样代码float4 _SampleTexture2DArray_RGBA SAMPLE_TEXTURE2D_ARRAY_GRAD(Texture, Sampler, UV, Index, DDX, DDY);Bias 模式代码HLSL// Bias模式下的采样代码float4 _SampleTexture2DArray_RGBA SAMPLE_TEXTURE2D_ARRAY_BIAS(Texture, Sampler, UV, Index, Bias);自定义采样器状态当连接了自定义的 Sampler State 节点时生成的代码会包含相应的采样器定义HLSL// 自定义采样器状态的代码示例SAMPLER(sampler_CustomSampler);float4 _SampleTexture2DArray_RGBA SAMPLE_TEXTURE2D_ARRAY(Texture, sampler_CustomSampler, UV, Index);相关节点理解与 Sample Texture 2D Array 节点相关的其他节点有助于构建更复杂的着色器效果Sample Texture 2D 节点Sample Texture 2D 节点是纹理数组节点的单纹理版本用于采样普通的 2D 纹理资源。当不需要纹理数组的多纹理管理功能时使用此节点更加简单高效。主要区别不支持索引选择只能采样单一纹理适用于静态纹理或不需要频繁切换的场景代码生成更简单潜在性能稍好Sample Texture 3D 节点Sample Texture 3D 节点用于采样 3D 体积纹理与 2D 纹理数组在概念上相似但应用场景不同。3D 纹理在三维空间中进行采样适用于体积渲染、噪声函数等场景。关键差异3D 纹理是真正的体积数据而纹理数组是 2D 切片的集合采样时使用 Vector 3 坐标而不是 Vector 2 加索引适用于不同的视觉效果和技术应用Sampler State 节点Sampler State 节点用于定义纹理采样的详细参数可以与任何纹理采样节点配合使用。通过精细控制采样器状态可以实现特定的视觉风格或性能优化。常用配置过滤模式设置纹理缩放时的插值方式环绕模式控制纹理坐标超出[0,1]范围时的行为各向异性过滤改善倾斜角度的纹理质量最佳实践和故障排除