Unity-着色器图形(Shader Graph)

着色器窗口·

  • Shader Graph 工具栏 (1) 是您保存着色器资源的地方。

  • Blackboard **(2) **包含可供使用此着色器创建材质的艺术家使用的属性。您可以在此处定义属性类型及其名称、属性和默认值。

  • 工作区** (3) **将在其中创建着色器的节点图。

  • 主预览窗口** (4) **将为您提供着色器外观及其行为方式的实时更新。

  • Graph Inspector 窗口** (5) **将显示您选择的任何节点的当前设置、属性和值。

  • Master Stack** (6) **是定义着色器最终表面外观的着色器图的终点。它列出了顶点着色器和片段着色器的主要着色器属性,并为您提供了插入必要值的末端节点。

基本操作·

  • 平移:中键点按并拖动,或按住 Alt (Windows) 或“选项”(macOS)并点按并拖动。

  • 缩放:旋转滚轮或使用触控板缩放。

  • 对焦和放大:选择一个元素,然后按下 F 键。

  • 适合窗口:按 A 键。

  • 创建节点:空格键

  • 节点组合:Ctrl + G

着色器-节点(Node)·

Vertex和Fragment - 主栈·

又名主栈(Master Stack),用于控制输出。主栈包含两个上下文:Vertex 和 Fragment,分别代表着色器的两个阶段。它的内容可能会根据选择的 Graph Settings 而变化(在Graph Inspector窗口的Graph Settings选项卡中,添加一个Active Targets中的Universal,其中的Material可以配置Lit、Unlit等模式)

连接到 Vertex Context 中的 Block 的任何节点都将成为最终着色器的顶点函数的一部分。连接到 Fragment Context 中的 Block 的任何节点都将成为最终着色器的片元(或像素)函数的一部分。如果您将任何节点连接到两个上下文,它们将被执行两次,一次在顶点函数中,然后在片元函数中再次执行。上下文不能剪切、复制或粘贴。

自定义变量·

自定义函数节点·

自定义函数节点用于在 Shader Graph 中注入自定义 HLSL 代码。这样,您可在需要时提供额外的控制级别(例如,进行一些细粒度的优化)。可以使用 string 模式直接将较小的函数写入图形,或者引用外部的 HLSL include 文件。还可以使用 Custom Port Menu 在节点本身上定义自己的输入和输出端口。

输入·

基本·

Time - 时间节点·

输出时间变量
类型:

  • Time 时间普通值
  • Sine Time 时间正弦值
  • Cosine Time 时间余弦值
  • Delta Time 当前帧时间
  • Smooth Time已平滑的当前帧时间

Color - 颜色节点·

使用 Color 字段在着色器中定义一个常量矢量 4 值。可通过节点的上下文菜单转换为 Color 属性类型。生成属性时,也会考虑 Mode 参数的值。

几何·

Position - 顶点位置节点·

允许访问网格顶点或片元的位置,具体取决于节点所属图形部分的有效着色器阶段。可使用 Space 下拉选单参数选择输出值的坐标空间。

提供对网格顶点或片元位置的访问。它控制着色器在场景中的行为方式以及它在什么空间中渲染。例如,如果将位置更改为“视图”,着色器将始终从摄像机的视图方向进行渲染。
输出是可通过“Space”下拉列表确定的坐标空间。此节点具有单个输出和一个参数。

  • Space 参数:允许您选择要输出的位置的坐标空间。它具有以下选项:“Object”、“View”、“World”、“Tangent”和"Absolute World"。
    • Object:当您希望位置基于场景中对象的坐标时。它对于使用与着色器附加到的对象专门相关的坐标非常有用。
    • View:当您要使用查看器坐标时。当您想要使用查看器面向的位置和方向来影响着色器时,它非常有用。
    • World:如果要对整个场景使用坐标系,此选项很有用。当您想要使用整个场景的位置数据,而不是局限于对象或视图坐标时,非常有用。
    • Tangent(切线):此选项导出最接近给定点的对象的位置坐标。想象一下球体上的一个点,多个平面都经过该点。其中一个平面(切面)接触球体,同时尽可能接近所有附近的点。
    • Absolute World:此选项返回所有可编写脚本的渲染管线中场景中对象的绝对世界位置。这是通用渲染管线的默认世界空间,其中高清渲染管线使用摄像机相对世界空间。

渐变·

Gradient - 渐变节点
定义用于 Shader Graph 中的常量渐变 (Gradient),但这在着色器内部定义为结构。要对渐变采样,必须将其与 Sample Gradient 节点结合使用。使用单个 Gradient 节点时,可使用不同的 Time 参数对渐变进行多次采样。

数学·

基本·

Add - 加法节点·

返回两个输入值 A 和 B 的和。

Subtract - 减法节点·

返回输入 A 减去输入 B 的结果。

Multiply - 乘法节点·

返回输入 A 乘以输入 B 的结果。

Divide - 除法节点·

返回输入 A(被除数)除以输入 B(除数)的结果。

UV·

Tiling And Offset - 平铺和偏移节点·

根据输入 Tiling 和 Offset 来平铺和偏移输入 UV 的值。这通常用于细节贴图和随时间滚动纹理。

纹理·

Texture 2D Asset - 2D纹理资源节点·

定义要在着色器中使用的常量 2D 纹理资源。要对 2D 纹理资源采样,必须将其与 Sample Texture 2D 节点结合使用。使用单个 Texture 2D Asset 节点时,可使用不同的参数对 2D 纹理进行两次采样,无需对 2D 纹理本身进行两次定义。

Sample Texture 2D - 2D纹理采样节点·

对 2D 纹理进行采样并返回矢量 4 颜色值以在着色器中使用。可使用 UV 输入覆盖 UV 坐标,并使用 Sampler 输入自定义采样器状态。

程序化·

噪声·

Simple Noise·

根据输入 UV 生成简单噪声或 Value 噪声。生成噪声的比例由输入 Scale 控制。

Gradient Noise·

根据输入 UV 生成渐变柏林噪声。生成噪声的比例由输入 Scale 控制。

Voronoi·

根据输入 UV 生成 Voronoi 或 Worley 噪声。Voronoi 噪声是通过计算像素和点阵之间的距离生成的。通过使这些点偏移由输入 Angle Offset 控制的伪随机数,可以生成一组单元。这些单元的规模以及产生的噪声由输入 Cell Density 控制。输出 Cells 包含原始单元数据。

美术·

Blend - 混合·

使用 Mode 参数定义的混合模式将输入 Blend 的值混合到输入 Base 上。指混合的强度由输入 Opacity 定义。Opacity 值为 0 将原封不动返回输入 Base。