ShaderGraph节点解析(六十二): 采样 2D 纹理节点(Sample Texture 2D Node)详解

目录

一、节点功能概述

二、端口详解

2.1 输入端口

2.2 输出端口

三、控制参数详解

3.1 核心参数

四、技术原理解析

4.1 采样逻辑

4.1.1 默认纹理模式(Default)

4.1.2 法线贴图模式(Normal)

4.2 采样状态的影响

五、应用场景与实战案例

5.1 漫反射纹理采样

场景:基础材质的漫反射颜色

5.2 法线贴图应用

场景:通过法线贴图增强表面细节

5.3 粗糙度与金属度控制

场景:使用纹理的通道存储材质属性

5.4 透明纹理效果

场景:树叶、玻璃等半透明材质

六、使用技巧与注意事项

6.1 纹理类型与参数匹配

6.2 UV 坐标调整技巧

6.3 性能优化建议

七、总结与拓展应用


一、节点功能概述

采样 2D 纹理节点(Sample Texture 2D Node)是 Unity Shader Graph 中用于对 2D 纹理进行采样的基础且核心的工具。它通过输入 2D 纹理资源、UV 坐标和采样状态,输出对应采样点的颜色值(包括 RGBA 四通道及单独通道),适用于几乎所有需要纹理数据的渲染场景(如基础颜色、法线映射、粗糙度贴图等)。其核心优势在于:

  • 多通道输出:同时提供 RGBA 复合值和单独的 R、G、B、A 通道值,满足不同材质属性需求
  • 纹理类型适配:支持普通纹理和法线贴图两种模式,自动处理法线解码
  • 灵活可控:可自定义 UV 坐标和采样状态,适配各种纹理映射需求

二、端口详解

2.1 输入端口

端口名称类型绑定描述
TextureTexture 2D待采样的 2D 纹理资源(如 diffuse 贴图、法线图)
UVVector 2UV采样点的 UV 坐标,用于定位纹理上的像素
SamplerSampler StateDefault sampler state采样状态,控制过滤模式(如线性 / 点过滤)、寻址模式(如重复 / 钳位)等

2.2 输出端口

端口名称类型描述
RGBAVector 4采样得到的颜色值(包含 RGBA 四通道)
RFloat红色通道(x 分量)值
GFloat绿色通道(y 分量)值
BFloat蓝色通道(z 分量)值
AFloatalpha 通道(w 分量)值

三、控制参数详解

3.1 核心参数

参数名称类型选项描述
TypeDropdownDefault(默认)、Normal(法线)选择纹理类型:
- Default:用于普通纹理(如漫反射、粗糙度)
- Normal:用于法线贴图,自动解码法线数据
SpaceDropdownTangent(切线空间)、Object(对象空间)仅当 Type 为 Normal 时生效,指定法线贴图的空间:
- Tangent:切线空间法线(最常用,与模型表面贴合)
- Object:对象空间法线(适用于整体形状的法线定义)
Enable Global Mip BiasToggleOn(开启)、Off(关闭)开启时应用运行时自动全局 MIP 偏移(用于动态分辨率缩放时提升细节重建质量)

四、技术原理解析

4.1 采样逻辑

节点通过 HLSL 的SAMPLE_TEXTURE2D函数实现纹理采样,根据纹理类型自动处理数据,生成代码示例解析如下:

4.1.1 默认纹理模式(Default)

hlsl

// 采样纹理并获取RGBA值
float4 _SampleTexture2D_RGBA = SAMPLE_TEXTURE2D(Texture, Sampler, UV);
// 提取各通道值
float _SampleTexture2D_R = _SampleTexture2D_RGBA.r;
float _SampleTexture2D_G = _SampleTexture2D_RGBA.g;
float _SampleTexture2D_B = _SampleTexture2D_RGBA.b;
float _SampleTexture2D_A = _SampleTexture2D_RGBA.a;
  • 适用场景:漫反射贴图、粗糙度贴图、金属度贴图等无需解码的纹理,直接使用采样的原始通道值。
4.1.2 法线贴图模式(Normal)

hlsl

// 采样法线贴图
float4 _SampleTexture2D_RGBA = SAMPLE_TEXTURE2D(Texture, Sampler, UV);
// 解码法线数据(将RG或AG通道转换为三维法线向量)
_SampleTexture2D_RGBA.rgb = UnpackNormalmapRGorAG(_SampleTexture2D_RGBA);
// 提取各通道值(此时RGB为法线向量的x、y、z分量)
float _SampleTexture2D_R = _SampleTexture2D_RGBA.r;
float _SampleTexture2D_G = _SampleTexture2D_RGBA.g;
float _SampleTexture2D_B = _SampleTexture2D_RGBA.b;
float _SampleTexture2D_A = _SampleTexture2D_RGBA.a;

  • 法线解码原理:法线贴图存储时通常将法线向量的 x(R)和 y(G)分量压缩到 0-1 范围,z 分量通过计算得出(z = sqrt(1 - x² - y²)),UnpackNormalmapRGorAG函数负责完成这一解码过程。

4.2 采样状态的影响

采样状态(Sampler State)的核心参数对采样结果的影响:

  • 过滤模式(Filter Mode)
    • 点过滤(Point):采样像素不插值,纹理边缘锐利(性能高,适合像素风格)
    • 线性过滤(Linear):采样相邻像素并插值,过渡平滑(画质好,常用)
  • 寻址模式(Address Mode)
    • 重复(Repeat):UV 超出 [0,1] 范围时重复纹理(适合平铺纹理)
    • 钳位(Clamp):UV 超出范围时取边缘像素(适合非平铺纹理,避免边缘拉伸)

五、应用场景与实战案例

5.1 漫反射纹理采样

场景:基础材质的漫反射颜色
  1. 需求:将纹理的 RGB 通道作为材质的基础颜色
  2. 实现

    hlsl

    // 采样漫反射纹理(Type设为Default)
    float4 albedoMap = SampleTexture2DNode.RGBA;
    
    // 应用基础颜色
    o.Albedo = albedoMap.rgb;
    o.Alpha = albedoMap.a; // 若纹理带透明通道
    

5.2 法线贴图应用

场景:通过法线贴图增强表面细节
  1. 步骤

    hlsl

    // 采样法线贴图(Type设为Normal,Space设为Tangent)
    float3 tangentNormal = SampleTexture2DNode.RGB; // 解码后的切线空间法线
    
    // 将切线空间法线转换到世界空间
    float3 worldNormal = TransformTangentToWorld(tangentNormal, tangentToWorld);
    
    // 应用到光照计算
    o.Normal = worldNormal;
    

5.3 粗糙度与金属度控制

场景:使用纹理的通道存储材质属性
  1. 实现

    hlsl

    // 采样纹理(R通道存储粗糙度,G通道存储金属度)
    float roughness = SampleTexture2DNode.R;
    float metallic = SampleTexture2DNode.G;
    
    // 应用到PBR材质
    o.Roughness = roughness * _RoughnessScale;
    o.Metallic = metallic * _MetallicScale;
    

5.4 透明纹理效果

场景:树叶、玻璃等半透明材质
  1. 实现

    hlsl

    // 采样带透明通道的纹理
    float4 textureColor = SampleTexture2DNode.RGBA;
    
    // 应用颜色和透明度
    o.Albedo = textureColor.rgb * _Tint;
    o.Alpha = textureColor.a * _Transparency;
    

六、使用技巧与注意事项

6.1 纹理类型与参数匹配

纹理类型Type 设置Space 设置常见用途
漫反射、高光Default基础颜色、高光强度
法线贴图NormalTangent表面细节(如木纹、布料纹理)
粗糙度、金属度DefaultPBR 材质属性控制
遮罩贴图Default控制材质局部效果(如区域高光)

6.2 UV 坐标调整技巧

  • 平铺与偏移:通过 UV 节点调整 UV 坐标,实现纹理的缩放和位移:

    hlsl

    float2 scaledUV = uv * _Tile + _Offset; // 缩放平铺并偏移
    float4 tiledColor = SampleTexture2DNode.RGBA; // 使用调整后的UV采样
    
  • 动画 UV:通过时间动态偏移 UV,实现纹理流动效果(如流水、火焰):

    hlsl

    float2 animatedUV = uv + _FlowSpeed * _Time.y;
    float4 flowColor = SampleTexture2DNode.RGBA; // 使用动画UV采样
    

6.3 性能优化建议

  • 压缩纹理:对非关键纹理使用合适的压缩格式(如 ETC2、ASTC),减少内存占用和采样开销
  • MIP 映射:开启纹理的 MIP 映射(导入设置中勾选 Generate Mip Maps),配合线性过滤提升远处画质
  • 通道复用:将多个属性存储在一张纹理的不同通道(如粗糙度 + 金属度),减少采样次数

七、总结与拓展应用

采样 2D 纹理节点作为 Shader Graph 中最基础的纹理操作工具,其核心价值在于:

  1. 材质基础:为几乎所有材质提供纹理数据输入,是视觉效果的基石
  2. 灵活性:通过参数调整适配不同纹理类型和采样需求
  3. 性能可控:结合采样状态和纹理设置,平衡画质与性能

拓展方向

  • 结合 UV 动画实现动态纹理效果(如旗帜飘动、水面流动)
  • 利用纹理通道混合实现复杂材质(如多层纹理叠加)
  • 配合 LOD 节点动态调整纹理采样精度,优化大规模场景性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李也疯狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值