欢迎光临散文网 会员登陆 & 注册

MMD联动Unity学习日志 Vol.7 Shader Graph基础

2019-04-05 22:58 作者:NXL2  | 我要投稿

前言

    上一期的内容是天空盒,它的材质球是由天空盒Shader(着色器)通过GPU绘制而成的。这期我们共同学习Shader的基础和它的基本应用。

Shader和Material的基本概念认知

Up在百度上引用一段,阐述Shader和Material(材质)的基本关系:

“Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。

所以说Shader并没有什么特别神奇的,它只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。“

Unity支持Shader的自定义编程,它使用的是标准的cg语言。不过,我们的原则是不写代码。这时就要用到另一种方法来编辑Shader,那就是Shader Graph。

ShaderGraph介绍

    Shader Graph着色器视图,可以让你轻松创建各种着色器效果:流动的岩浆,美丽的湖泊,闪动的LED灯,以及你能想象到的更多的效果!

    Shader Graph原生支持 Scriptable Render Pipeline (简称:SRP),拥有以下功能:

· 高清晰渲染管线 HD Render Pipeline

· 轻量级渲染管线 Lightweight Render Pipeline

· 通过扩展将任何你自己编写的自定义SRP着色器进行导出。

什么是ShaderGraph着色器视图 ?

    你可以通过可视化的方式来创建Shader Graph以生成所需的着色器,无需再手动编写着色器代码,只需通过连接各种节点创建节点网络即可。以下是一些你可以做的事情:

· 通过程序化的方式改变物体表面形状

· 对UV进行变形和动画

· 使用常用的图形编辑操作对对象进行修改操作

· 根据物体所在的世界坐标,法线以及和摄像机之间的距离等信息来改变物体表面

· 将你认为重要的属性,暴露在材质编辑面板上方便编辑操作

· 通过生成subgraph(子视图)在不同Shader Graph之间分享节点网络

· 使用C#和HLSL创建自定义的Shader Graph

· 视图框架可以提供即时的Shader Graph修改反馈,这样即使是新用户也能创建自己的着色器了。

怎么安装ShaderGraph?

    安装好的Unity2018是没有ShaderGraph的工具的,如果需要使用这个工具,需要单独安装插件。 

    打开Window > Package Manager,在All中选择ShaderGraph进行安装。

2018.1.x~2018.2.x版本

    点击All面板,找到SRP Core、Shader Graph点击右上角Install安装

2018.1.x~2018.2.x版本

2018.3.x~2019.1b

    刚打开Packages的列表中没有ShaderGraph选项,此时点击Advanced,出现ShaderGraph等安装选项。

2018.3.x~2019.1b

找不到Shader Graph

    打开项目的文件夹,在项目目录中,找到Packages目录中的manifest.json文件,打开

修改mainfest.json。

Packages文件夹里面含有mainfest.json文件

    用写字板或其它文本编辑器打开mainfest.json,将"com.unity.shadergraph": "4.1.0-preview",插入文本段落中。

将选取的文字插入文本中

    返回Unity工程会发现Unity正在加载工具,加载完之后ShaderGraph插件就已经安装好了。

ShaderGraph安装完成

使用PackageManager 

    在Unity中,通过点击Window->PackageManager来打开PackageManager窗口。在窗口中选择ShaderGraph 并且在右上角选择加载。 

如何看是否加载成功

在项目中点击创建菜单出现红色框中的内容就证明安装成功

    在项目栏中,点击右键Create出现有PBR Graph,Sub Graph和Unlit Graph那么就已经安装好了。(ShaderGraph旧版的使用方法与现在有所差异,在右键Create后找到ShaderGraph也能证明ShaderGraph安装完成)

如何创建Shader Graph?

    在Unity中,Shader Graph看起来就是一个普通的着色器。你可以通过Create >Shader>选择PBR Graph(基于物理渲染),Sub Graph和Unlit Graph其中的一个。这会在Project窗口中生成一个Shader Graph资源。双击这个资源或者点击Open按钮来打开Shader Graph编辑界面。

可以通过编辑默认的数值快速改变物体的表面属性。

    打开Shader Graph的时候,看到的是一个Master Node。可以通过把其他节点连接到Master Node来创造你先要的效果。

    点击齿轮图标可以展开着色器的其它基本属性:

Workflow(工作流)可以选择Specular(高光)和Metallic(金属)。

Surface(表面)可以选择Opaque(不透明)和Transparent(透明)。

Blend(混合)可以选择 Alpha(阿尔法),Premultiply(预乘),Additive(附加),Multiply(乘法)。

Two Sided(两边)勾选框。

右下角是着色器最终显示效果。

右键点击并选择Create Node即可生成新的节点。

    每一个内置的Shader Graph节点都有几个输入,为这些输入添加了默认的值,也可以随意改变它们。

往视图网络中添加一个纹理或者其他资源非常简单,只需创建一个对应资源类型的节点并连接上即可。

    通过Shader Graph生成的着色器和Unity中的其他着色器没有任何区别。可以右键点击着色器生成一个新的材质,并将其应用到项目中任意对象上。可以用同一个着色器生成多个材质。

将着色器中的参数暴露出去,使用材质调整效果

    可以在材质上暴露着色器中的参数,这样就可以通过这些参数,调整基于同一个着色器的不同材质的各种属性。只要简单的操作就可以暴露着色器的参数,在Shader Graph中点击任何变量节点,然后选择Convert to Property,这些属性就会显示在所有使用了此着色器的材质的检视窗口中。

也可以点击在Shader Graphs窗口的右上角的加号增加暴露参数。

    暴露的参数有Vector1,Vector2,Vector3,Vector4,Color(颜色),Texture2D(2D纹理),Texture2D Array(2D纹理数组),Texture3D,Cubemap(方形贴图),Boolean(布尔值)。

    要查看对Shader Graph所做修改的产生的效果,点击窗口左上角的Save Asset按钮保存修改即可。

创建渲染管线

    ShaderGraph是基于可编程渲染管线,我们要使用ShaderGraph也就需要设置SRP。 (注意:如果之前不导入渲染管线,ShaderGraph的材质球不会正常显示,呈现为洋红色,主节点会出现叹号,并提示当前渲染管线与主节点不匹配。如下图)

    打开Window >package manager,在All中选择Lightweight RP进行安装。(如果没有找到渲染管线插件,可以尝试用之前的方法导入。在项目目录里找到Packages目录中的manifest.json文件,将"com.unity.render-pipelines.lightweight": "4.1.0-preview",插入中间段落中。)

    在SRP中,unity帮我们封装了几种渲染管线: 

- 我们可以创建LWRP(轻量级渲染管线),这种渲染管线适合移动设备。 

- HDRP(高清晰渲染管线),适用于PC等性能较高的设备 

- Custom(自定义渲染管线) 

    这里我们暂时不做过多研究。

首先创建Lightweight Render Pipeline Asset。

    导入渲染管线插件后,unity就可以使用LWRP。 

    创建Renderpipeline可通过在文件窗口中Create > Rendering >Lightweight Pipeline Asset创建。 创建之后就可以进行渲染管线的设置了。

设置SRP

    设置方法:Edit > Project Setting > Graphics。

打开图像设置窗口,将之前设置的LWRP拖到SRP setting窗口中完成设置。

    如果没有设置的话,所有的Shadergraph都是不能使用的。

设置完成后,显示效果。


MMD联动Unity学习日志 Vol.7 Shader Graph基础的评论 (共 条)

分享到微博请遵守国家法律