unity shader可视化工具——Shader Graph


前言

使用Shader Graph来制作着色器具有简化着色器制作过程和着色效果编译显示快的优点。当前,Shader Graph中支持通用渲染管线(URP,Universal Render Pipeline。unity2019.3以前的版本命名为LWRP)和高清渲染管线(HDRP,High Definition Render Pipeline。URP这种渲染管线性能消耗较低,能支持在手机端的的硬件性能消耗,几乎适用于所有平台,而Height Render Pipeline比较适合与PC端和计算性能较好的平台。

ShadeGraph官方示例GitHub地址.


一、Shader Graph介绍

什么是Shader Graph?

Shader Graph是在Unity2018版本之后推出的一款可以实时通过可视化界面的节点连接来实现着色器的创建及编辑的可编程式渲染管线工具。在项目中使用该工具包前需要先安装好,除此还应该安装好对应的渲染管线工具包和创建及配置对应的渲染管线文件。

二、Shader Graph安装配置

1、新工程中使用Shader Graph

方法一:

  • 打开unity编辑器时,在创建项目时,选择High Definition Render Pipeline或者Universal Render Pipeline任一模板来创建项目(使用哪种渲染管线根据自己的项目决定,通常大部分人使用Universal Render Pipeline居多)。这种方式创建出来的项目,打开后就能直接使用Shader Graph,不用再进行任何的配置。
    在这里插入图片描述

  • 新建Shader Graph的 Shader 文件
    在项目资源中右键—Creat—Shader—X-Graph(分别是PBR Graph、Sub Graph、Unlit Graph),命名好创建的shader文件。
    PBR Graph: PBR,基于物理的渲染
    Sub Graph :子图,用于创建一些可复用的节点
    Unlit Graph :不受光照的,无光照的
    在这里插入图片描述

  • 打开Shader Graph编辑面板
    双击使用shader Graph创建的shader文件就可以打开shader Graph的编辑面板,就能在面板中进行shader节点的操作了。

方法二:

  • 创建工程
    创建一个空的unity项目(默认的3D模板)。
  • 安装Shader Graph
    在unity中,打开window—Package Manage,如果在Package Manages中找不到shader Graph,就在Package Manages中点击Advanced—show Preview Packages等待加载后就能找到Shader Graph,点击Install安装即可。
  • 安装渲染管线
    同样在unity的Package Manage中找到High Definition RP或者Universal RP两者任一渲染管线点击Install安装。
  • 配置渲染管线
    在unity中,右键—crate—Rendering—Universal Render Pipeline—Pipeline Asset(Forward Renderer),命名好该文件。
    再Edit—Project Settings,在Project Settings中的Graphics中将刚才创建的SRP文件设置到这里来即可。
    在这里插入图片描述

2、旧工程中使用Shader Graph

注意:为了避免项目出现不可逆错误,建议在更改项目前,先复制备份好原先的项目。

  • 安装Shader Graph和渲染管线包,以及配置。
    根据上面新工程中方法二中的方式在unity Package Manage中安装好Shader Graph和Universal RP(或者High Definition RP)。
    创建Pipeline Asset,以及在Project Settings中的Graphics中设置SRP的配置文件即可。(详细见上述新工程中方法二)
  • 升级材质
    随后,会发现场景中的材质都会变为洋红色。
    Edit—Render Pipeline—Universal Render Pipeline—upgrade project Materials to Universal RP Materials,等待转换材质,完成后材质就恢复好了。

三、Shader Graph详解

1、Shader Graph基本操作

创建节点:在空白区右键——creat Node(或者空格键),选择自己想到的节点进行创建
复制节点:选择要复制的节点ctrl+D 或者先ctrl+c,在ctrl+v
居中显示节点:按F键
保存shader:ctrl+S 或者编辑器中的Save Asset
上下左右移动编辑器窗口视图:按住鼠标中键移动
缩小编辑器窗口视图:鼠标滚轮
创建属性/节点后,在连接面板中拖出连接线到空白处松手,就能跳出该节点可以与哪些节点相连接

2、Shader Graph窗口

属性窗口
在这里插入图片描述myshader01是该shader名;
属性名字:color为该属性名(图中第一个属性名为color)是显示在材质面板上的名字
expose:是否在材质面板中显示该属性
Reference:Reference中的命名是使用代码来找到这个属性的变量命,脚本中通过该变量名修改材质的属性。
default:相当于属性默认的值
mode:为贴图默认的形式
Precision:为节点的精度

Main Preview窗口(预览窗口)
在这里插入图片描述
在预览窗口中,可以实时预览shader效果。鼠标左键可以旋转模型查看效果;右键可以更改效果显示的模型,有默认的球状、正方体胶囊体等还可以使用自定义的网格模型预览。
PBR Master(基于物理渲染)
在这里插入图片描述
PBR (Physically Based Rendering,基于物理渲染),其中有两种工作流(workflow),一种是Metakkic(金属度),一个是Specular(高光)。Specular setup 和 Metallic setup 都会产生镜面高光,金属度只有明度的区别;高光颜色可以带有其他的颜色。

3、Shader Graph节点

属性节点

属性使用工作流:创建属性后,将属性拖出编辑器中作为一个节点,连接到输出接口使用

  • Vector1
    Mode:Default、slider(滑动条)、Integer(整数,只能读取整数)
  • 多元向量Vector2,Vector3,Vector4
    数值对应X、Y、Z、W
  • Color
    Mode:Default、HDR
    Texture 2D(U、V二维)
    默认值为一张贴图接口,可在编辑面板中直接赋予贴图。Texture2D拖到面板中后,要与创建Sample Texture 2D节点连接(需要采样贴图信息),才能输出。
    Mode:White、Black、Grey、Bump(如果贴图为法线贴图需要将模式改为Bump)
  • Texture 2DArray 贴图数组
    几张贴图串在一起作为贴图、序列帧贴图
  • Texture 3D(U、V、W三维)
    需要创建Sample Texture 3D相连接
  • Cubemap
    需要创建Sample Cubemap节点进行采样
  • Boolean
    用来控制开关Ture/False

其他节点
在Shader Graph编辑器中空白区右键——creat Node(或者空格键),选择自己想要的节点进行创建。
在这里插入图片描述

四、unity shader可视化工具比较

Shader Graph、Shader Forge 和 Amplify Shader Editor

  • Shader Graph属于unity内置的着色器可视化的工具,因此会更加的简便。并且有个说法叫既然官方有自己的shader可视化编辑器,那当然是用官方自己的了可视化编辑器了。
  • Shader Forge 和 Amplify Shader Editor都是从资源商店就能获取的unity 资源包,且不是free的。这两者的功能都比Shader Graph多,体现在节点更多,因此可自定义的东西也会更加丰富。但目前Shader Forge已经停止更新包内容了(并且我自己试用该资源包的时候打开有报错"实例化对象为null",导致无法打开Shader Forge的编辑器面板,具体如何解决这个错误还没解决,不知道是不是就我这样子,或许是版本不对应的问题 )。如果目前要在两种中选一个的话,更加推荐使用Amplify Shader Editor。
  • Shader Forge 和 Amplify Shader Editor这两个都能通过节点连接的方式自定义光照模型,但Shader Graph就没有能自定义光照模型,因为Shader Graph中没有光照相关的节点,并且Shader Graph只有两种一种PBR和无光照两种shader模板。
  • unity shader可视化工具在实现效果的时候是更加的快捷方便,很容易就出效果了。但是节点过多也会导致项目的性能变差,因此使用unity shader可视化工具来快速实现效果还是可以的,在实际项目中更加推荐手写shader代码。
  • 别想着有shader可视化工具就可以不学习手写shader代码,如果不了解shader底层基础知识,即使有节点式的shader可视化工具也是不会进行shader开发的。这就好比有shader可视化是开车,手写代码是走路,要说速度快肯定是开车;但说哪个起到运动作用还得是走路的方式。

猜你喜欢

转载自blog.csdn.net/Poggio742/article/details/122910859