【Unity3D】Shader Graph简介

本文介绍了Unity官方的Shader制作插件Shader Graph。先简述其特点与支持的渲染管线,接着分别说明built - in和URP管线中环境搭建方法,然后介绍了不同管线创建Shader Graph的方式、窗口组成,最后通过纯色着色、漫反射着色、贴图三个简单案例展示其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Shader Graph 简介

        Shader Graph 是 Unity 官方在 2018 年推出的 Shader 制作插件,是图形化的 Shader 制作工具,类似于 Blender 中的 Shader Editor 和 UE 中的 Material Editor,它使用流程图的形式表达顶点变换和片元着色的流程,通过节点(Node)的连接实现各种复杂的特效,关于节点的介绍详见→Shader Graph节点

        Shader Graph 支持的渲染管线有:built-in(Forward 和 Deffered)、URP(Universal Render Pipeline)和 HDRP(High Definition Render Pipeline)。

        除了 Shader Graph 外,Shader Forge 也是一个图形化 Shader 制作工具,前者是 Unity 官方插件,后者是三方插件。

2 Shader Graph 环境搭建

2.1 built-in 管线中 Shader Graph 环境搭建

        built-in 管线是指渲染路径为 Forward 或 Deffered 的渲染管线,一般通过 3D 模板创建项目。

        依次点击【Window → Package Manager】打开包管理器,下载 Shader Graph 插件,如下。

2.2 URP 管线中 Shader Graph 环境搭建

        对于 URP 模板和 HDRP 模板创建的项目,在创建完项目后,会自动安装 Universal RP 插件、Shader Graph 插件,并配置 Universal Render Pipeline Asset,不需要进行额外的配置。

        对于 3D 模板创建的项目,在创建完项目后,需要手动安装 Universal RP 插件,并配置 Universal Render Pipeline Asset。

        1)下载 Universal RP 插件

        依次点击【Window → Package Manager】打开包管理器,下载 Universal RP 插件,如下。

        说明:在安装 Universal RP 插件时,会自动安装 Shader Graph 插件。 

        2)配置 Universal Render Pipeline Asset

        在 Assets 目录下创建 URP Settings 目录,在该目录下右键,弹出菜单栏,依次点击【Create → Rendering → URP Asset (with Universal Renderer)】,会生成以下两个文件,如下。

        依次点击【Edit → Project Settings → Graphics】,将上述创建的 Universal Render Pipeline Asset 文件拖拽到 Scriptable Render Pipline Settings 中,如下。

        配置完后,Main Camera 对象下面会自动添加 UniversalAddtionalCameraData 组件,Directional Light 对象下面会自动添加 UniversalAddtionalLightData 组件。

3 Shader Graph 窗口介绍

3.1 Shader Graph 的 创建

        1)built-in 管线中创建 Shader Graph

        在 Assets 窗口右键,弹出菜单栏,依次选择【Create → Shader Graph → Builtin】,再选择 Lit Shader Graph 或 Unlit Shader Graph,创建 Shader Graph。 

        2)URP 管线中创建 Shader Graph

        在 Assets 窗口右键,弹出菜单栏,依次选择【Create → Shader Graph → URP】,再选择 Lit Shader Graph 或 Unlit Shader Graph,创建 Shader Graph。

        3)Lit Shader Graph 和 Unlit Shader Graph 的区别

        Lit Shader Graph 和 Unlit Shader Graph 的区别是:前者带有光照模型,并且是基于物理的光照模型(PBR),用法类似于表面着色器;后者不带光照模型,需要自己写光照计算流程。

3.2 Shader Graph 窗口组成

        Shader Graph 由 Blackboard、Graph Inspector、Main Preview、Vertex、Fragment、Node 等模块组成(前 3 个模块可以通过右上角的按钮控制显示和隐藏),如下。  编辑好 Shader Graph 后,点击左上角的 Save Asset 按钮保存。滑动鼠标滑轮可以放大和缩小节点,按中键拖拽可以平移场景

  • Blackboard:用于创建外部属性,相当于 Shader 中的 Properties,可以创建 Float、Vector2~4、Color、Boolean、Gradient、Texture2D、Texture2D Array、Texture3D、Cubemap、Matrix2~4 等类型变量。
  • Graph Inspector:包含节点设置和图设置两个选项卡,节点设置中可以设置节点命名、参数值域、默认值等信息;图设置中可以设置着色器数值计算精度、支持的渲染管线(Built-in 或 Universal)、管线参数等。
  • Main Preview:用于预览着色器渲染效果,在该窗口右键,可以选择预览的模型。
  • Vertex:顶点着色器,顶点变换、法线变换、切线变换在这里进行。
  • Fragment:片元着色器,光照计算、贴图在这里进行,在 Graph Inspector 窗口的 Graph Settings 选项卡里的 Material 中可以选择 Lit(PBR 光照模型)或 Unlit(无光照模型)的片元着色器。
  • Node:节点,在 Shader Graph 窗口的空白区域右键,选择 Create Node,创建相应节点,节点类型主要有 Artistic(对比度、饱和度、白平衡等美术调整)、Channel(合并和分离通道等)、Input(顶点位置、颜色、法线、时间等输入)、Math(加减乘除等数学运算)、Procedural(噪声、圆形、多边形等程序纹理)、Utility(逻辑判断、自定义函数等实用工具)、UV(球形扭曲、旋转贴图等 uv 变换),详见→Shader Graph节点

4 Shader Graph 简单案例

4.1 纯色着色

        创建 Unlit Shader Graph,重命名为 My Unlit Shader Graph。双击打开 My Unlit Shader Graph 文件,在 Blackboard 窗口新建 Color 变量,并重命名为 _Color。

         将 _Color 变量拖拽到空白区域,并与 Base Color 相连,选中 _Color 后,在 Node Settings 中设置默认颜色,如下。点击左上角的 Save Asset 按钮保存编辑。

         在 Assets 窗口创建材质,重命名为 UnlitMat,将 My Unlit Shader Graph 文件拖拽到 UnlitMat 中,并设置颜色为绿色,如下。

        在场景中创建 Cube 和 Sphere,修改其材质为 UnlitMat,显示如下。

4.2 漫反射着色

        在 4.1 节的基础上,修改 My Unlit Shader Graph 文件如下。 

        其中 MainLight 是自定义函数(通过 Custom Function 节点创建),选中 MainLight,在 Node Settings 中配置如下,SHADERGRAPH_PREVIEW 用来判断是否是预览窗口。

#if SHADERGRAPH_PREVIEW
    Direction = half3(0.5, 0.5, 0);
    Color = half4(1, 0, 0, 1);
#else
    Light light = GetMainLight();
    Direction = light.direction;
    Color = light.color;
#endif

         显示效果如下。

4.3 贴图

        在 4.1 节的基础上,修改 My Unlit Shader Graph 文件如下。 

         在 Assets 窗口创建 2 个材质,分别重命名为 CubeMat、SphereMat,将 My Unlit Shader Graph 文件拖拽到 CubeMat 和 SphereMat 材质中,并设置纹理图片,将 CubeMat 和 SphereMat 分别拖拽到 Cube 和 Sphere 对象上,显示效果如下。

### 使用 Shader Graph 创建光晕效果 在 Unity 中通过 Shader Graph 实现光晕效果可以分为几个部分来考虑。首先是创建一个新的 Unlit 类型的 Shader Graph[^1],因为光晕通常不需要复杂的光照计算。 #### 设置项目资源 为了实现良好的光晕效果,准备一张带有 Alpha 通道的光晕贴图是非常重要的。这张图片定义了光晕的具体形态和透明度变化规律,在后期处理过程中起到关键作用[^3]。 #### 构建 Shader Graph 节点结构 打开 Shader Editor 后,拖拽必要的节点进入工作区: - **Texture2D**: 加载之前准备好的光晕纹理。 - **Screen Position**: 获取当前像素所在屏幕空间的位置信息以便后续操作。 - **UV Transform**: 对输入 UV 进行变换以适应不同的场景需求。 - **Branch (if)**: 判断条件用于控制哪些区域显示光晕。 - **Lerp 或者 Saturate**: 平滑过渡光晕强度。 - **Output Master Node**: 将最终颜色输出给渲染管线。 连接这些节点形成合理的数据流路径,并调整各参数直至满意为止。对于想要应用于特定对象上的局部光晕,则可以通过修改顶点位置或者利用法线向量来进行微调[^2]。 #### 控制渲染特性 为了让光晕能够正确地叠加于其他图形之上而不受遮挡影响,需设置合适的渲染队列。一般情况下会把此类特殊效果放置在 `Transparent` 队列之后甚至更高优先级如 `Overlay` 来确保其总是最后被绘制出来[^4]。 ```csharp // C#脚本中指定Material属性 material.renderQueue = 4000; ``` 此外关闭深度写入 (`ZWrite Off`) 可防止光晕干扰正常的深度缓冲管理;而开启混合模式则允许它与其他半透明表面正常交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little_fat_sheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值