什么是材质
什么是材质,这对于游戏爱好者来说其实是比较陌生的概念,那放在现实生活中,什么是材质呢?
仔细观察你身边的一切,你会发现,手机有手机的材质,关掉手机,看一看漆黑的屏幕,你会看到屏幕上有一些污渍和指纹,以及屏幕带来的一些反光。
再打开手机继续读下去吧。接着看看你的手,你能看到你手上的指纹,还有杂乱的褶皱,这些,就是真实的材质,你看着它,会意识到它是什么东西,木头、塑料、皮肤、金属....而在游戏中,材质所需要做到的,就是让我们看着这个物体,意识到它是什么。
在官方文档的解释中,材质是:定义了场景中对象的表面属性。
一个普通的Box,赋予它一个材质使它看起来是一块木头
什么是PBR
PBR即Physically based rendering,基于物理的渲染。PBR这东西其实看不见也摸不着,因为它实质上是一系列的理论、公式等等,其最终目的就是为了得出一套能模拟现实运转的渲染理论,Unreal Engine的材质系统便是基于PBR开发的,在我们以后会不断提到PBR,而如果对PBR有更浓厚的兴趣,可以自己看一看理论基础等等,这里就暂时先说材质。
材质之路第一步:创建材质
学习材质,就先简单的创建一个材质,并认识材质的各个节点设定。
安装UE的话,用EPIC客户端就可以安装,打开新建一个工程即可,这里不再赘述。
首先点击左下角的内容侧滑菜单,右键空白处---新建文件夹---取名"Materials"。
做好整理和命名规范非常重要,这极大的有助于我们的游戏开发。
进入文件夹后,右键空白处,点击材质。
创建一个材质
材质这一子菜单中,不仅有材质,还有:材质参数集、材质函数、材质实例、材质图层、材质图层混合、次表面面数文件,这些会在之后逐步了解和使用,目前我们仅需要创建一个材质。
材质的命名也需要注意一下,材质的命名通常会使用"M_"开头,这也是比较通用的一个命名方式,M代表Material,因此在找寻文件的时候,一看“M_Wood"就知道,这是一个木头的材质,”M_Water"就是水的材质,所以说命名非常重要。
打开材质之后,便能进入我们的材质编辑器。
材质编辑器
材质编辑器打开后会是这个样子的,我们根据图中框选的123逐个说明。
1:材质编辑面板,这个面板占据了屏幕的大部分空间,我们日后的大部分操作也都会在面板中进行。
2:展示面板,这里的球体可以暂时展示我们的材质是什么样子的,我们可以点击右下角的小图标将它更改成正方体、圆柱体、平面等。
3:详细设置面板,这里会有一些设置是针对整个材质的,在我们需要的时候会在这里调整。
这三个部分便是材质编辑器主要的三个板块,除此之外,在正上方还有一些按钮,以及左下方还有一些按钮,这些按钮都非常浅显易懂,把鼠标指上去停住一会儿就会显示说明,我们会经常用到左上角的“保存”按钮。
OK,我们打开了空荡荡的材质编辑器后,我们来看看处于画面中心的这一排面板吧。
从上往下以此看,首先M_New是我们材质的名字,接着你会看到基础颜色、Metallic(金属度)、高光度、粗糙度等等。
那么,这里就是用到我们PBR的地方了,基于物理的渲染定义了我们在修改材质的时候,会从金属度、高光度、粗糙度这些方向去定义修改,这是符合我们认知的,比如金属度越高,那它就越像是金属,粗糙度越高,则说明其表面越不平滑,这极大的方便了我们去制作材质,举个例子,UE3并非使用PBR,因此你想要让这个东西呈现金属的质感,那你就需要调整很多名称奇奇怪怪的参数,从而达到我们的效果,这非常不方便我们去理解和记忆。
基础颜色:这个很好理解,就是物体呈现什么样的颜色,红色蓝色紫色绿色,那么怎么给它上一个颜色呢?
右键空白处
这里我们就可以右键空白处,搜索“Color”。
怎么样?找得到color吗?是不是有一堆奇奇怪怪的color但是就是没有最简单的color?
要赋予材质一个颜色,我们需要搜索“constant3vector”这个东西。你可以先按住横向数字键3,再左键点击空白处,快速创建这一节点。
接着,你可以双击它,选取一个你喜欢的颜色。
我选取了一个我喜欢的蓝色,然后我们点击确定,将小方块右上方的节点,左键按住,拖动到基础颜色节点。
这时,你就会看到,我们左边的球已经变成蓝色了,这说明我们成功的创建了一个可用的材质。
这个时候,你就会感到很奇怪,因为你会发现,constant3vector这个东西的翻译是:常数3向量。这个东西和颜色没有半毛钱关系,难道虚幻引擎工程师都是**?
其实并不是,材质实现的本质是通过代码进行的,电脑可认不得花里胡哨的颜色,那么,我们在材质编辑器完成操作后,编辑器会将我们的命令编译成着色器语言,着色器语言再转化给电脑看。
高级着色器语言,High Level Shader Language,通常简称为HLSL,HLSL有很多,比如windows平台的DirectX,这个大伙肯定很熟悉了。
UE的材质编辑器的好处在于,你可以不去真正的敲代码来实现功能,但是这玩意的本质还是代码,你可通过点击上方菜单的 窗口---着色器代码---HLSL代码来查看项目的HLSL代码。
所以说,这个时候你就明白,一个颜色,RGB三个值,刚好对应了constant3vector的三个值。
Metallic:金属度,字面意思,定义了这个物体像不像是一个金属,默认的值为0。
如何调节金属度呢?我们右键空白处,搜索constant,就能拿到一个常数框框。
快捷的方式,是按住横向键盘1,左键任意空白处创建。
我们左键点击选择它,然后在右侧就可以修改它的值了。
我们先保持默认的0,连接至Metallic节点,你会神奇的发现!
它没有任何变化!
对呀,因为默认值也是0。
我们将默认值更改为1,此时左侧的小球已经呈现出了金属的光泽,变成了一颗金属小球。
看起来很棒,那我们改成100试试呢?
并没有什么变化。
实际上,对于金属度的调节,值的范围你可以看成百分比,0就是没有,1就是百分百的金属。
并且,通常情况下,金属度的值要么是0,要么是1,0就不是金属,1就是金属。
如果把金属度改成0.7
如果你选取的值在0-1中间,那么这玩意看起来就既不像是金属,也不像是非金属,这玩意就会像是某种奇奇怪怪的外星材料,并不是说你不可以取中间的数值,只是在取值的时候你要想明白,这玩意这么搞,最终得到的效果是不是你想要的?
高光度:高光度突然又抽象起来了,似乎我们在生活中很难去定义一个高光,高光在编辑器中的默认值为0.5,它与金属度相同,同样是百分比调节,0是没有,1是百分百。
高光度其实更偏向于一些艺术性的修饰,我们可以创建一个常数,对比一下0高光度的效果,和1高光度的效果。
0高光度,跟一张图片一样
1高光度,亮堂堂的
粗糙度:粗糙度,顾名思义,指这玩意粗糙不粗糙,粗糙像是泥地里的石头,还是光滑的像太空望远镜的镜片。默认值同样是0.5。
同样设定一个常数,我们观察一下0和1的取值。
极致光滑,可以看到反射的背景
极致粗糙,有一种磨砂的质感
各项异性:难以理解的词汇!什么是各向异性?这个词汇似乎难以理解,我们可以暂时先了解到,各向异性通常用于制作头发的材质,为什么是头发?因为真实的头发是一根一根的,所形成的高光与一块平面并不相同,因此我们需要达到相同的效果,这时候就需要各向异性。
各向异性为0时
各向异性0.5
这个时候你就会发现,白色发亮的地方,变成一个环状的。
头发上的高光
自发光颜色:又好理解了,自发光颜色嘛,就是说这玩意会不会发亮,很简单,0就是不亮,1就是亮,对不?
所以我们试一试,你就会神奇的发现。
这玩意怎么发白光?
为什么会是白光呢?
因为这是颜色嘛,给定一个1,那就是代表RGB都是1,那就是最亮的白色咯。
所以我们再次创建一个constant3,给一个红色。
就可以看到,这颗球冒着一种粉色的光。
接下来,我们看到了不透明度和不透明蒙版都是暗的,无法选择,这是为什么呢?
我们暂时先搁置在这里,后续会再进行讲解。
我们先保存一下材质,点击左上角的保存,此时引擎会编译着色器代码。
接着关闭材质编辑器,看到我们的关卡。
选择一个你喜欢的物体,点击选择到它,然后将内容浏览器里,你创建的材质拖上去,OK,大功告成。
同时,你也可以拖到右侧的材质菜单里,这样也能完成材质的替换!
我们创建的第一个材质就完成了。