概述:

ShaderGraph 是一种可视化的 Shader 编程

正如之前所讲,ShaderGraph 中可编程的有两个的着色器,一个是顶点着色器(改变网格位置),一个是片元着色器(不改变网格,对原有的上色进行更改)。

在 URP 项目中,ShaderGraph 分为这几类:

不同 ShaderGraph 之间的区别:

  • Lit:包括了更复杂的物理光照计算,包括 Albedo(反照率)、Metallic(金属)、Smooth(摩擦),同时计算完整光照,包括漫反射、高光、阴影等,真实感比较强,但是比较耗性能。

  • Unlit:不计算光照,仅显示纹理和颜色,节省性能,适合移动端

  • Sprite:专门为 2d 精灵图提供的 Shader,简化一点

  • Custom:自定义光照

ShaderGraph 编辑器设置

Color Mode

主要用于在 Blackboard(黑板)中对属性和参数进行颜色分类,帮助开发者更直观地管理和识别不同类型的参数。简单的项目用 None 就够了。

Blackboard

放参数的地方,这些参数可以在脚本当中通过 Get/Set 方法读写,比如对于一个 Speed 的浮点类型,可以这么设置:

public Material mat;  

void Update()

{

mat.SetFloat("_Speed", darkIntense);

}

Plain Text

设置参数:右键单击节点->Covert To->Property

建议一个着色器多设置一些参数,这样自由调节高一点,也增加了 Shader 复用性

Graph Inspector

这是用于配置整个 Shader 的全局设置和属性的面板

这里以 sprite unlit 材质为例(这也是 2D 项目中最常用的材质)

Precision(精度):定义 Shader 中浮点数的计算精度

  • Single:32 位浮点数(高精度,适合 PC/主机)

  • Half:16 位浮点数(中等精度,适合移动端)

Target Settings(目标设置)

定义 Shader 的渲染目标和平台适配。

  • Active Targets:当前激活的渲染目标(如 Universal)

  • Universal:适用于 URP(通用渲染管线)

Material(材质类型)

选择 shader 材质,不多说

Blending Mode(混合模式)

定义材质与背景的混合方式,不同模式的效果很不一样,参考下 DeepSeek 指导的回答:

Alpha Clipping(Alpha 裁剪)

启用后,根据 Alpha 值裁剪像素。

  • Threshold:设置裁剪阈值(低于该值的像素被丢弃)

  • 实现硬边缘透明效果(如树叶、镂空纹理)

常用节点

可参考 https://docs.unity.cn/Packages/com.unity.shadergraph@16.0/manual

uv

很基础很重要的节点,可以理解为二维坐标系,实际是一组平滑递增的 0-1 的浮点数

UV Channel:

  • uv0:纹理映射

  • uv1:光照贴图

  • uv2:细节处理

  • uv3:自定义

目前 uv0 和 uv1 就够用了

Split

分割节点,如图

如果是像 color 这样的四维向量,就依次输出,如果是二维向量,就以 R 为 x 轴,G 为 y 轴,依次类推

Clamp

裁剪节点,将输入值控制在 min 和 max 之间,如图:这里是尝试将这个特效的黑色部分(即为 0 的部分)去掉,防止特效中出现死黑(因为 0*任何数都是 0)

Step:

取整节点,小于输入则为 0,大于为 1,如图

OneMins

取反节点:

Time:

时间节点

  • Time:从游戏开始到当前时刻的总时间(秒)

  • Sine Time:基于时间的正弦波值(范围 [-1, 1])

  • Cosine Time:基于时间的余弦波值(范围 [-1, 1])

  • Delta Time:上一帧到当前帧的时间间隔(秒)

噪点(Noise):

可理解为符合某种规律的随机数,一般和时间相乘做一些随机的动态效果,比如水波纹、旋涡之类的

一般是三种:Gradient、simple 和 Voronoi

比方说,我想要实现一个简单的水波效果,可如下实现: