Shader Graph 速查手册

本手册为 The Unity Shaders Bible 课程第14课的配套参考文档,汇总了 Shader Graph 中的核心概念、节点类型、常用工作流及与手写 HLSL 的对照关系。

一、界面核心组件速查

组件快捷键功能描述等效 ShaderLab
Save AssetCtrl+S / Cmd+S保存着色器配置保存 .shader 文件
Blackboard(黑板)管理属性变量(颜色、纹理、Float 等)Properties { … }
Graph Inspector节点属性 + 着色器全局设置属性声明 + Pass 状态设置
Main Preview实时预览效果,可导入自定义 MeshGame 视图
创建节点Space(空格键)搜索并创建节点
创建节点(右键菜单)右键 → Create Node浏览分类节点列表

二、Graph Inspector 设置速查

Graph Settings(着色器全局设置)

设置项选项等效 ShaderLab 命令
Surface TypeOpaque / TransparentBlend SrcFactor DstFactor
Render FaceFront / Back / BothCull Back / Front / Off
Alpha ClipTrue / Falseclip()
Blend ModeAlpha / Premultiply / Additive / MultiplyBlend [Src] [Dst]

Node Settings(节点属性设置)

设置项说明
Name属性在 ShaderLab 中的引用名称
Reference属性的内部标识符
Default属性的默认值(颜色、浮点数等)
Mode纹理模式:White / Black / Gray / Bump
Precision计算精度:Inherit / Single (float) / Half

三、常用节点分类速查

3.1 输入节点(Input)

节点输出等效 HLSL
ColorVector4 (RGBA)float4 颜色常量
Texture 2D AssetTexture2Dsampler2D _Tex
Vector 1 / 2 / 3 / 4float / float2 / float3 / float4对应维度向量
Booleanboolbool
Timefloat (Time)_Time
UVfloat2i.uv

3.2 数学运算节点(Math)

节点操作等效 HLSL
AddA + Ba + b
SubtractA - Ba - b
MultiplyA * Ba * b
DivideA / Ba / b
PowerA ^ Bpow(a, b)
Square Rootsqrt(A)sqrt(a)
Clampclamp(In, Min, Max)clamp(x, min, max)
Lerplerp(A, B, T)lerp(a, b, t)
Saturateclamp(A, 0, 1)saturate(x)
Smoothstepsmoothstep(Edge1, Edge2, In)smoothstep(e1, e2, x)
Remap将 In 从一个范围映射到另一个范围自定义映射公式
Normalizenormalize(V)normalize(v)
Dot Productdot(A, B)dot(a, b)
Cross Productcross(A, B)cross(a, b)
Absoluteabs(In)abs(x)
Signsign(In)sign(x)
Floor / Ceil / Round取整操作floor / ceil / round
Fractionfrac(In)frac(x)
Minimum / Maximummin(A, B) / max(A, B)min(a,b) / max(a,b)
Sin / Cos / Tan三角运算sin / cos / tan

3.3 纹理与采样节点

节点功能等效 HLSL
Sample Texture 2D采样 2D 纹理tex2D(tex, uv)
Sample Texture 2D Array采样纹理数组tex2Darray
Texture 2D LOD指定 LOD 级别采样tex2Dlod(tex, float4(uv,0,lod))
Gather Texture 2D采集四个邻近纹素tex2Dgather
Flipbook精灵图动画采样自定义 UV 偏移
Channel Mask提取指定通道(R/G/B/A)col.r / .g / .b / .a

3.4 向量与 UV 节点

节点功能
Split将向量拆分为各分量(R/G/B/A 或 X/Y/Z/W)
Combine将各分量组合为向量
Swizzle重排向量分量(如 .rbg → .grb)
Flip翻转指定的 UV 通道
TwirlUV 扭曲/漩涡效果
RotateUV 旋转
Tiling And OffsetUV 平铺与偏移

3.5 艺术效果节点

节点功能等效 HLSL(近似)
Fresnel Effect菲涅尔边缘光效果pow(1 - saturate(dot(N, V)), exp)
Blend多种混合模式(Overlay / Screen / Multiply 等)Photoshop 风格混合公式
NoiseSimple / Gradient 噪波伪随机函数
Distortion基于法线贴图的 UV 扭曲法线偏移 + 纹理重采样
Invert Colors颜色反转1 - col
Posterize色调分离(减少颜色层级)floor(col * n) / n

四、Custom Function 节点配置速查

配置项说明示例
TypeFile(引用 .hlsl 文件)或 String(内联代码)File
Name函数名(必须与 HLSL 函数名完全一致)CustomLight_float
SourceType=File 时,指定 .hlsl 文件路径CustomLight.hlsl
BodyType=String 时,直接粘贴函数代码void Foo_float(...)
Inputs / Outputs在 Graph Inspector 中定义输入输出端口float A, float B → float Out

常见 HLSL 模板 // 无输入,有输出

void MyFunction_float(out float3 result) { result = float3(1, 0, 0); }

// 有输入,有输出 void MyFunction_float(float3 input, out float3 output) { output = normalize(input); }

五、关键工作流程

5.1 创建基本 Unlit Shader 的流程

  1. Create → Shader → Universal Render Pipeline → Unlit Shader Graph
  2. 在 Blackboard 添加属性(_Color, _MainTex 等)
  3. 拖入节点区,连接 Sample Texture 2D
  4. 用 Multiply 节点组合颜色和纹理
  5. 连接输出到 Fragment 的 Base Color
  6. Save Asset

5.2 创建透明 Shader 的流程

  1. 在 Graph Settings 中设置 Surface Type = Transparent
  2. 设置 Blend Mode(Alpha / Additive 等)
  3. 将 Alpha 通道连接到 Fragment 的 Alpha 输入

5.3 创建自定义光照 Shader 的流程

  1. 创建 .hlsl 文件,写一个输出光照方向的函数
  2. 添加 Custom Function 节点,引用该文件
  3. 将输出连接到 Normalize 节点
  4. 与法线做 Dot Product
  5. Saturate 后乘以颜色

六、Shader Graph vs 手写 HLSL 快速对照

Shader Graph手写 HLSL (.shader)
Blackboard 属性Properties { _Name ("Display", Type) = default }
Sample Texture 2D 节点tex2D(_Tex, i.uv)
Multiply 节点a * b
Graph Settings → SurfaceBlend [Src] [Dst], Cull [Back/Front/Off]
Graph Settings → Alpha Clipclip(color.a - threshold)
Graph Inspector → Precisionfloat (single) 或 half
Sub Graph自定义函数(.hlsl include)
Custom Function 节点void Func(in type val, out type result)
Vertex 阶段 Position(3)float3 vertex : POSITION
Fragment 阶段 Base Colorreturn fixed4(color, alpha); // SV_Target

七、最佳实践与常见问题

最佳实践

  • 善用 Sub Graph:将常用的节点组合封装为 Sub Graph,提高复用性和可维护性。
  • 命名规范:属性命名使用下划线前缀(_Color, _MainTex),保持与 ShaderLab 传统一致。
  • 精度策略:移动端优先使用 Half 精度;需要高精度计算(如世界空间位置)使用 Single。
  • Custom Function:复杂逻辑优先用 .hlsl 文件方式,便于版本控制和跨项目复用。
  • 版本管理:Shader Graph 不同版本间可能存在功能差异,团队内部统一 Unity 版本。

常见问题

问题可能原因解决方案
着色器编译错误节点连接了不兼容的类型或维度检查节点输入输出维度(float / float2 / float3 / float4)是否匹配
Custom Function 不工作Name 与函数名不匹配或文件路径错误确认 Name 精确匹配函数名(含后缀 _float / _half)
升级后无法编译新版 Shader Graph 弃用了某些节点查看升级指南,替换废弃节点
预览与实际渲染不一致Preview 中未启用 SHADERGRAPH_PREVIEW 相关逻辑在 Custom Function 中处理 SHADERGRAPH_PREVIEW 分支
材质显示为粉红色着色器编译失败或管线不匹配检查着色器是否为当前渲染管线(URP / HDRP)兼容格式

Note

本速查手册对应 The Unity Shaders Bible 第14课(0014-shader-graph.html),完整课程请查阅对应 HTML 文件。