1. Rectangle节点在Shader Graph中的核心价值
在Unity的Shader Graph中,Rectangle节点是一个看似简单但功能强大的基础组件。这个节点本质上是一个数学函数,用于生成矩形形状的遮罩或图案。不同于简单的UV坐标比较,Rectangle节点提供了更灵活的参数控制和边缘处理能力。
我最初接触这个节点时,也曾低估它的作用,直到在一个UI特效项目中,发现它能够替代多个Step节点的组合,大大简化了Shader的复杂度。Rectangle节点最核心的功能是根据输入的UV坐标,返回一个矩形区域内的值(通常为1)和区域外的值(通常为0),并可以控制边缘的过渡效果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Rectangle节点的参数解析与工作原理
2.1 基础参数配置
Rectangle节点通常包含以下几个关键参数:
- UV:输入坐标,通常是默认的UV或经过变换的坐标
- Width/Height:矩形的宽度和高度
- Center:矩形的中心点位置
- Border:边缘过渡的宽度
在URP项目中,我习惯将Width和Height设置为0.5,Center保持默认的(0.5,0.5),这样矩形会居中显示并占据画布的一半空间。Border参数特别有用,当设置为0.1时,会产生10%的渐变边缘效果。
2.2 数学原理剖析
从底层实现来看,Rectangle节点实际上是两个Step函数的组合。以水平方向为例,它首先计算当前UV.x与矩形左右边界的距离,然后通过SmoothStep函数(如果启用了边缘过渡)或Step函数(硬边缘)来确定是否在矩形范围内。
数学表达式大致如下:
code复制float inRectX = smoothstep(center.x-width/2-border, center.x-width/2, uv.x) -
smoothstep(center.x+width/2, center.x+width/2+border, uv.x);
float inRectY = smoothstep(center.y-height/2-border, center.y-height/2, uv.y) -
smoothstep(center.y+height/2, center.y+height/2+border, uv.y);
return inRectX * inRectY;
3. 实际应用案例解析
3.1 UI元素的高光效果
在一个最近的项目中,我使用Rectangle节点为UI按钮创建了动态高光效果。具体实现步骤:
- 创建Rectangle节点,设置Width=0.8, Height=0.6, Border=0.1
- 将节点输出连接到Color节点的Alpha通道
- 添加Time节点和Sine节点制作动画效果
- 将动画结果连接到Rectangle的Center参数
这样就能创建一个在按钮表面缓慢移动的渐变高光效果,比使用传统贴图方法节省了纹理内存,且更容易调整效果。
3.2 场景物体的选择框效果
在RTS类游戏中,我们经常需要显示单位的选择框。使用Rectangle节点可以实现这种效果:
- 在Shader Graph中创建Rectangle节点
- 将屏幕空间坐标作为UV输入
- 通过脚本动态设置Center、Width和Height参数
- 将输出与边缘发光效果结合
这种方法比使用多个Quad渲染更高效,特别是当需要同时显示大量选择框时。
4. 性能优化与常见问题
4.1 性能考量
虽然Rectangle节点计算量不大,但在移动平台上仍需注意:
- 避免每帧动态修改所有参数
- 对于静态效果,考虑烘焙到纹理中
- 在Fragment Shader中使用时,注意分支预测的影响
实测数据显示,在中等配置的Android设备上,使用Rectangle节点的Shader比使用纹理样本的版本性能提升约15%。
4.2 常见问题排查
-
矩形显示不正确:
- 检查UV输入是否正确
- 确认Center参数在[0,1]范围内
- 验证Width/Height不超过2.0(超过会导致重复)
-
边缘过渡不生效:
- 确保Border值大于0
- 检查是否错误连接到了硬边缘版本的节点
-
动画效果卡顿:
- 避免在Update中频繁修改参数
- 考虑使用Shader Graph的Custom Function节点优化计算
5. 高级技巧与创意应用
5.1 组合多个Rectangle节点
通过将多个Rectangle节点使用Max或Add操作混合,可以创建复杂的形状。例如:
- 创建十字形:一个水平矩形和一个垂直矩形的叠加
- 制作圆角矩形:四个小矩形作为角落,一个大矩形作为中心
5.2 非视觉应用
Rectangle节点不仅可用于视觉效果,还可以:
- 作为遮罩控制其他效果的显示区域
- 在计算着色器中作为条件判断的替代方案
- 控制粒子系统的发射区域
在一个天气系统的Shader中,我使用Rectangle节点来定义云层的生成区域,配合Noise节点创建了动态的云层效果。
6. URP中的特殊注意事项
在URP管线中使用Rectangle节点时,有几个关键点需要注意:
-
坐标空间一致性:
- URP中默认使用Clip空间坐标
- 对于屏幕空间效果,需要添加适当的转换节点
-
后期处理兼容性:
- 某些后期效果可能会影响Rectangle节点的显示
- 测试时需关闭所有后期效果进行验证
-
多相机场景:
- 不同相机可能需要不同的参数设置
- 考虑使用Camera节点获取当前视图信息
在实际项目中,我创建了一个可复用的Sub Graph,将所有这些考虑因素封装起来,团队其他成员可以直接调用而无需关心底层实现。
