【节点】[Subtract节点]原理解析与实际应用

0 阅读4分钟

【Unity Shader Graph 使用与特效实现】专栏-直达

节点功能概述

Subtract节点是Unity URP ShaderGraph中执行向量减法运算的核心数学工具。该节点接收两个动态向量(Dynamic Vector)作为输入,支持标量、float2、float3、float4等多种数据类型,并返回两个输入向量的逐分量差结果。其核心特性包括:

  • 逐分量运算‌:对向量的每个分量独立执行减法操作,结果维度与输入保持一致
  • 数据类型兼容性‌:支持不同维度向量的混合运算(如float3与float2的自动扩展处理)
  • 数学严谨性‌:基于标准向量减法运算规则,确保跨平台结果一致性

端口详解

Subtract节点包含三个关键端口:

  • 输入端口A‌:作为被减数的向量输入,数据类型需与B端口匹配
  • 输入端口B‌:作为减数的向量输入,数据类型需与A端口匹配
  • 输出端口‌:返回A-B的差值结果,数据类型与输入端口保持一致

技术原理解析

数学定义

Subtract节点的数学表达式为:

Out = A - B

其中,A和B为同维向量,Out为结果向量

生成代码解析

Subtract节点在编译时生成的HLSL代码示例如下:

hlsl
float3 Subtract(float3 a, float3 b) {
    return a - b;
}

与其他数学节点的对比

  • 与Add节点对比‌:Add节点执行加法运算,而Subtract节点执行减法运算
  • 与Multiply节点对比‌:Multiply节点执行分量乘法,通常用于缩放操作
  • 与Divide节点对比‌:Divide节点执行分量除法,会产生非线性变化

应用场景与实战案例

基础颜色混合

通过Subtract节点实现颜色混合,创建特殊视觉效果:

  • 场景‌:将两个颜色向量相减,生成负片效果
  • 实现步骤‌:
    1. 创建两个Color节点,分别设置颜色A和颜色B
    2. 将颜色A和颜色B连接到Subtract节点的输入端口
    3. 将Subtract节点的输出连接到Master节点的基础颜色输入

动态UV偏移

结合Time节点和Subtract节点实现动态UV偏移:

  • 场景‌:创建随时间变化的UV动画
  • 实现步骤‌:
    1. 创建Time节点,获取当前时间值
    2. 创建Multiply节点,将时间值与偏移量相乘
    3. 使用Subtract节点从原始UV坐标中减去时间偏移量
    4. 将Subtract节点的输出连接到SampleTexture2D节点的UV输入

高级光照计算

在PBR材质中使用Subtract节点模拟高级光照效果:

  • 场景‌:创建金属边缘高光效果
  • 实现步骤‌:
    1. 创建Normal节点,获取法线向量
    2. 创建Light Direction节点,获取光源方向
    3. 使用DotProduct节点计算法线与光源方向的点积
    4. 使用Subtract节点从固定值中减去点积结果
    5. 将结果连接到高光强度或自发光通道

使用技巧与注意事项

处理负数的特殊逻辑

Subtract节点对负数的处理遵循数学规则,例如:

  • 输入A为(3.0, -1.0, 0.0),B为(1.0, 0.5, 0.0),输出为(2.0, -1.5, 0.0)
  • 注意负数运算可能导致颜色值超出[0,1]范围

与Frac节点结合

Subtract节点与Frac节点结合可实现数值量化效果:

  • 场景‌:将浮点数值转换为整数显示
  • 实现步骤‌:
    1. 创建Frac节点,获取输入值的小数部分
    2. 将原始输入值与Frac节点输出连接到Subtract节点
    3. 将整数结果应用于颜色索引或UV坐标

浮点数精度问题

Subtract节点浮点数运算可能产生精度误差,建议:

  • 避免在关键视觉效果中使用过多递归减法
  • 使用Fixed属性节点限制浮点数精度
  • 对于高精度需求,考虑使用Half或Float精度设置

总结与拓展应用

Subtract节点是ShaderGraph中实现向量减法运算的核心工具,其应用场景涵盖基础颜色混合、动态UV偏移、高级光照计算等多个领域。通过合理使用Subtract节点,开发者可以高效创建复杂视觉效果,同时避免手动编写代码的繁琐。

拓展应用建议‌:

  • 结合Custom Function节点实现自定义减法逻辑
  • 在Sub Graph中封装常用减法运算
  • 探索Subtract节点与噪声图节点的结合
  • 与Branch节点配合,实现基于条件的动态减法运算
  • 结合Vertex Position节点,在顶点着色器中实现几何变形效果

高级应用场景‌:

  • 在视觉特效中创建能量消散效果
  • 结合Depth Texture实现基于深度的边缘检测
  • 在卡通渲染中调整色块边界
  • 与Particle System结合,创建基于速度的粒子颜色变化

【Unity Shader Graph 使用与特效实现】专栏-直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)