[材质] Unreal高级地形材质使用技巧

[复制链接]
查看2893 | 回复0 | 2021-6-10 17:12:37 | 显示全部楼层 |阅读模式
Hello,大家好,今天给大家分享一些关于unreal高级地形材质的内容。关于UE4的地形以及基本的材质,大都主要基于基本的地形创建分层材质。现在设想,如果我们做好了一片草地,后面还想用工具刷出带有一定坡度的小山,而实际上刷的时候如果坡度达到一定的值,泥土和草是会剥落露出里面的岩石的,所以我们就可以用高级一点的地形材质来根据斜率的变化自动加载不同的材质。

首先,我们随便新建一个landscape,任意大小。然后创建我们的基本材质球,如下图:

1.jpg

然后按照规矩添加Layerblend节点。然后给layerblend添加三层材质分别代表泥土,草地和湖泊。Blend模式直接默认weight blend,然后给简单的输入一个纯色作为贴图。(除了输入纯色做贴图以外,如果我们更改layerblend属性中ConstLayerInout的值,在默认没有输入的情况下,材质就会直接计算这个参数的值,比如当x=y=0,z=1的时候,就是蓝色)

2.webp.jpg

现在我们把这个简单的材质先赋给地形,并创建weight-blended layer

3.jpg

我们现在随意将三种材质刷到地形中。如果我现在在三种颜色交界的地方用sculpt增加一座有坡度的小山

4.jpg

我们会发现得到的结果并不自然,因为在自然状态下,这种接近九十度的坡度,泥土和草根本是不可能存在的。所以需要我们添加另外一种材质,岩石的材质。

重新进入到我们的材质球,首先需要添加一个材质混合节点叫做MatLayerBlend_StandardWithDisplacement,

5.png

此节点用于混合两个材质球,类似于blend节点。Topmaterial输入的则是我们的三层混合材质。Basematerial输入我们的基本材质,也就是我们要添加的岩石的材质,这里给一个灰色。但是当我们把三维的灰色直接给连到basematerial的input里面的时候,发现连不上,因为这边需要输入的是一个材质球,现在只是一个数据,还算不得一个material,所以我们还需要用MakeMaterialAttributes节点来进行转化,效果如下;

6.webp.jpg

接着我们在把混合后的材质节点连接到basecolor的时候,发现也无法连入,是因为我们不能够用默认定义好的材质属性,需要勾选上Use Material Attribute来自定义我们的材质。

7.webp.jpg

现在我们保存一下,然后进入到地形中观察,发现所有的地形都变成了我们定义的岩石灰色,是因为我们还没有给alpha添加数值,所以默认应用的是basematerial。

8.webp.jpg

现在我们开始来给alpha添加数值,也就是我们要进行的斜率算法。

首先我们需要用VertexNormalWS获取地形中每一个顶点的世界法线坐标,因为我们的贴图映射是根据Z轴来映射的,所以斜率的换算就是每个点z轴的换算,所以我们用ComponentMask(提取通道)获取世界法线的z值(只勾选B通道)

9.webp.jpg

然后为我们的坡度定义一个范围gradient(default value:0, Slider Min:0, Slider Max:1),并将z轴的值减去坡度,即得到我们想要漏出岩石的那一部分斜率范围;

10.jpg

此时的过渡是很生硬的过渡,所以我们需要给不过度边缘添加细节渐变,除以自定义渐变值roughness(default value:0.5, Slider Min:0, Slider Max:1)

11.webp.jpg

由于materialblend需要输入的是一个alpha值,所以我们需要用saturate将值限定在0-1的范围,然后连入materialblend的alpha输入中,保存;

12.webp.jpg

为方便调节,我们给mat_landscape创建一个材质实例,然后将材质实例给地形,调节gradient的值和roughness的值发现,如果增加gradient的值,就会得到更多的岩石材质,如果增加roughness的值,边缘的分界线就会更加明显,渐变更少。

13.jpg

以上就是完成的最后效果图,有兴趣可以将纯色贴图换成正经材质球,效果会更好。

来源:火星时代

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

37

主题

10

回帖

257

积分

初阶编码师

积分
257