概述:
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
比方说,我想要实现一个简单的水波效果,可如下实现:
参与讨论
(Participate in the discussion)
参与讨论