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

【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代码示例如下:

c 复制代码
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 使用与特效实现】专栏-直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

相关推荐
SmalBox1 天前
【节点】[DDX节点]原理解析与实际应用
unity3d·游戏开发·图形学
南無忘码至尊3 天前
Unity学习90天-第3天-认识触屏输入(手游基础)并完成手机点击屏幕,物体向点击位置移动
学习·unity·c#·游戏引擎·游戏开发
SmalBox4 天前
【节点】[SquareRoot节点]原理解析与实际应用
unity3d·游戏开发·图形学
LcGero4 天前
TypeScript 快速上手:泛型与工具类型
typescript·cocos creator·游戏开发
SmalBox4 天前
【节点】[Power节点]原理解析与实际应用
unity3d·游戏开发·图形学
南無忘码至尊4 天前
Unity学习90天-第2天-认识键盘 / 鼠标输入(PC)并实现WASD 移动,鼠标控制物体转向
学习·unity·c#·游戏开发
拖孩4 天前
我用 AI 搓了一个"比谁更持久"的微信小游戏,AI实现只用了一天,微信审核却用了一个月!!!
微信小程序·ai编程·游戏开发
Yuk丶5 天前
UE4客户端开发技术问题汇总
面试·ue4·图形学·ue4客户端开发
SmalBox5 天前
【节点】[Multiply节点]原理解析与实际应用
unity3d·游戏开发·图形学