ShaderGraph基础

发布于 2021-10-09


介绍

之前写shader相当于重学一门语言,shadergraph可以通过可视化的连接节点就可实现各种效果。

img

现有Shader Graph节点被分为8类,每个节点的详细信息可以看官方文档

https://docs.unity3d.com/Packages/com.unity.shadergraph@7.1/manual/Node-Library.html

也可以对着节点右键,点Open Documentation,查看指定节点的文档。

所有节点用处,其实可以总结为3大类:输入→运算→输出

  • 输入:图片,数字等一些列外部能取到的信息
  • 运算:加减乘除平方开方等,将上述输入内容进行处理,生成新的图像
  • 输出:将运算后的图片或数据,喂给各种光照模型的Master节点,完成着色。
image-20211009151050762

这是一个最基础的连法
他一共做了4件事

  1. 以图中UV方式映射一张图
  2. 外部输入一张彩图
  3. 外部输入一个颜色,颜色与上图相乘
  4. 该图输出到 Unlit Master 的 Color

可见,输入有2个:图片 与 颜色,运算也有2个:UV 与 乘法(运算)。如果要做文章,自然在UV和运算上。

UV

可能某些程序,天天能看到模型贴图,但至今不知道UV是起什么作用。
UV是什么?他其实是一种规则,告诉贴图应该怎么贴在模型上。模型做完后,需要手动展开UV,再**制作贴图。**之后贴图便能以该UV的规则,贴在模型上。

image-20211009151652433

Split:分离通道 / Combine:合并通道

基础的UV看似一张彩图,其实是用两个通道来记录贴图的上下左右位置。拆开UV,可以看到UV的U记录左右信息,UV的V记录上下信息。
所以,改变UV也会改变图片映射方式

image-20211009151928843

UV乘以一个数值,就是缩放(Tiling),UV加减一个值,就是移动(Offset)。当然你也可以直接用Tiling And Offset这个节点。

image-20211009152048642

UV大类中还有很多节点,都可以试试,还挺好玩的。

image-20211009152323373

理解了UV含义后,现在回头再看看。并非只有制作模型时的UV,能当作图片映射规则,只要是能再画面中变化的数值,均可当作UV。

举个例子,以世界坐标的XZ来当作UV

image-20211009152451042
1

这个可以用来做地面重复的瓷砖材质,模型都不用展UV。(或者你可以用Triplanar节点,做三面映射)

配置使用ShaderGraph

在Unity2019中,ShaderGraph支持Lightweight Render Pipeline(又名Universal RP,即通用渲染管线)和HD Render Pipeline。在Unity 2019中,采用了PackageManager来管理Unity的众多新功能,包括Shader shader包和Lightweight Render Pipeline包。

  1. 安装Lightweight Render Pipeline和ShaderGraph包。

    有两种方式:
    1)在菜单栏Window > PackageManager的All 标签页中下载组件包

    img

    Package Manager界面

    2)通过手动设置Unity工程下Packages/manifest.json文件

    img

    manifest.json

    目前通过Package Manager只能下载最新版本的包,而通过manifest文件可以设置使用任意版本的包。如果有时候新版本的包和Unity版本不兼容的话,可以通过manifest文件回退到之前的旧版本。

  2. 创建设置SRP(可编程渲染管线)

    1)菜单栏Assets > Create > Rendering>Lightingweight Pipeline Asset,会创建出来一个文件,这是渲染管线的配置文件。

    img

    2)在菜单栏 Edit > Project Settings > Graphics中设置刚才的SRP文件

    img

    经过这些设置,现在就可以开始使用ShaderGraph了!

创建ShaderGraph文件

通过菜单栏 Create > Shader > *** Graph 可以创建ShaderGraph文件,会在Project创建一个graph文件。

img

PBR Graph PBR图
Sub Graph 子图,用于创建一些可复用的节点
Unlit Graph 不受光照的图

ShaderGraph窗口

我们先创建一个PBRGraph来看一看。双击graph文件即可打开ShaderGraph窗口。

img

ShaderGraph的图是以节点和连线组成的,默认创建出来会有一个Master Node(主节点)。你可以通过把其他节点连接到Master Node来创造你想要的效果。

编辑节点的属性

如下图所示,你可以通过编辑默认的数值快速改变物体的表面属性。

img

修改节点属性

添加节点

添加纹理和其他复杂的交互操作,只要右键点击并选择“Create Node”。

img

创建节点

连接节点

通过拖拽对应的值即可创建连线。

img

创建输入变量

一个shader当然必不可少要有输入的变量了,这在ShaderGraph中也很简单。

img

创建输入变量

使用输入变量

你可以给输入变量设置一个默认值,方便调试。

img

给输入变量设置默认值

在Graph中使用这个变量也很简单,只需要将变量拖入图中,和其他节点创建连线即可。

img

使用输入变量

自定义预览模型

ShaderGraph右下角有一个预览窗口,可以选择内置的5种和自定义的模型来更好的预览Shader的效果。

img

自定义预览模型

材质球使用Shader

Shader调好以后,当然最最终要应用到材质球上。材质球的Shader选择菜单中会多出一个graphs的类别,下面就是你创建的ShaderGraph对应的shader。

img

基础材质

1

基础材质,也就是Standard材质,是我们使用unity过程中最常见的一种着色器

image-20211009162722668

Metallic工作流:

贴图

  • 颜色:Albdeo(RGB)+Alpha(A)
  • 材质:Metallic(R)+AO(G)+Smoothness(A)
  • 法线:Normal(RGB/OpenGL)
  • 自发光:Emission(RGB)

控件

  • 所有贴图的UV位移和缩放
  • 与Albedo相乘的颜色
  • 法线强度
  • 金属度/光滑度/AO强度滑块(0-1)
  • 与自发光相乘的颜色(可以是HDR)
  • 自发光强度