从头学ShaderGraph :UV与基础材质

作者:Lute Li 2020-03-05
写在前面

由于本人美术出身,加上不会写代码,,无奈成为连连看玩家,从最早的Shader Forge,Amplify Shdaer Editor,到现在的Shader Graph,Substance Designer,都有所涉及。 Shader Graph早期版本,节点贫瘠,问题众多,所以弃坑了许久,偶然听闻近期更新之频繁,群友哀嚎学习资源之匮乏,遂重新开坑Shader Graph,望大家多多捧场。 我会找些有意思的shader案例,在Shader Graph中重现出来,主要讲解 制作思路 与 基础原理,要学习软件操作的请自己加油。 提前声明:除部分常见shader效果实现外,本人文章将多以Youtube的Shader Graph案例为主。或把Forge/ASE的shader,在Shader Graph重现,如果是别人的案例,我会贴出链接地址或原始出处。本人能力有限,如过看到有任何地方写的不对,请告之,我会改正。

正文开始


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

Node Library | Shader Graph | 7.1.6

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

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


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

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


这就是着色器(Shader)

这是一个最基础的连法

他一共做了4件事

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



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

UV

可能某些程序,天天能看到模型贴图,但至今不知道UV是起什么作用。

UV是什么?他其实是一种规则,告诉贴图应该怎么贴在模型上。模型做完后,需要手动展开UV,再制作贴图。之后贴图便能以该UV的规则,贴在模型上。


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

基础的UV看似一张彩图,其实是用两个通道来记录贴图的上下左右位置。拆开UV,可以看到UV的U记录左右信息,UV的V记录上下信息。

所以,改变UV也会改变图片映射方式


*OneMinus:用一减去输入(即1-x)

我将U左右翻转,最终图片也会左右翻转


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


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


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

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



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

铺垫结束,下篇开始说实际案例。节奏大概是 简单节点,一篇介绍两个;复杂节点,一篇说一个。

基础材质



这次来做连连看案例,基础的PBR材质,刚入门shadergraph的可以来看看,案例文件会放在文章底部。

为了显示效果,我选择HDRP来做演示项目的管线,ShaderGraph做的内容可以通用,但数值上会有稍许不同。

基础材质,也就是Standard材质,是我们使用unity过程中最常见的一种着色器,相信大家对基础材质的每项参数都很熟悉。

所以把这个作为第一章,不会有技术门槛(主要是熟悉节点操作)。当然,如果觉得这篇内容都会,可以跳后面文章。


PBR材质,自然要以PBR Master作为输出节点

先来分析下Standard材质球的贴图和控制参数

Metallic工作流:

贴图

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


控件

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


把贴图贴好

首先是UV


创建一个Vector4,取名叫Tiling And Offset,RG做Tiling,BA做Offset,这个在上篇也写过。

将所有贴图位放入Graph中,并将对应线条都连好。


注意法线要选择Type为Normal。以及每种贴图位在缺少贴图时的默认颜色,比如法线要选为Bump,自发光选为Black等。


接下来是控件

普通的强度控制,就直接是一个数值乘上去。强度数值可以设置为滑块,比如金属度/光滑度/AO这种,只能在0到1之间变化,可以用滑块来控制。而法线强度这种就无需用滑块。


可以在左边Properties,切换参数的模式为滑块Slider。

但不是所有强度都是用乘,AO和Normal不同。要用Lerp和Normal Strength


*Lerp:线性插值 / Normal Strength:法线强度

AO这个很好理解。你希望AO强度是0的时候,颜色应该是白色,也就是1。强度是1的时候,颜色应该是贴图。

如果用乘法,任何数乘0都是黑。所有行不通,要用插值来切换AO强度。

除此之外

HDRP是用的物理单位的灯光,一个10000Lux的平行光作为太阳光,再用后期调整曝光值,强行把颜色压下来。

这会导致,同一个Emission的强度,所产生的Bloom效果,在HDRP与URP(LWRP)中差很多。

Unity默认的HDR颜色选项,范围只有-10到10。

而我为了达到图中Bloom效果,强度乘了10w倍。

tql



当然,具体数值,你可以自己调整。

下面是我的文件

文件分享

https://share.weiyun.com/5fg7YEG

share.weiyun.com

密码:7rdabm

使用方法:找个HDRP或着URP(LWRP),拖进去。我的文件夹下有预制体。记得调自发光强度。

下面是我的artstation地址:https://www.artstation.com/luteli


作者:Lute Li
专栏地址:https://zhuanlan.zhihu.com/p/98052762

最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多