学习笔记,不喜勿喷!侵权立删!祝愿生活越来越好!
制作思路:
方法一:
通过对材质勾选使用材质属性,用2个MakeMaterialAttributes进行BlendMaterialAttributes,混合的alpha蒙版来自于heightlerp,heightlerp可以再由heightlerpwithtwoheightmaps得到,这样就完成了降低贴图重复度的方法。实际上就是通过混合高度图的方式来打破贴图的重复度,并且确保两种地形材质符合从低洼的地方向比较高的位置变化,主要用到有通过高度混合的HeightLerp、HeightLerpwithtwoheightmaps。核心节点主要有三个,分别是heightlerp、heightlerpwithtwoheightmaps(通过混合2张高度图来输出)、BlendMaterialAttributes;
蓝图连接大体如下:
heighlerp来自于两张高度图的混合:
方法二:
贴图的重复度,不仅可以通过上面高度图作为alpha贴图去破坏它,我们也可以通过距离的变化去破坏它。主要是通过PixelDepth像素深度蓝图节点来获得摄像机到像素点的距离,让这个变化的距离除以一个值,来获得一个0到1之间的值,为了这个0-1的值变化不是太过明显,可以加上一个随着距离而变化的噪点贴图,这样得到的选区也是可以调节对比度的。实际上有一个相似的蓝图节点能够实现这个功能叫Distance_Blend。
两种方法的融合:
第一种方法是一个混合的高度图,第二种方法是一个随距离而变化的高度图,我们现在想把它们融合在一起,就是我离远了实际上我不想看得细节更清晰,离近了我想看清楚细节,也就是我希望贴图uv平铺的次数随着距离进行增加。当近的时候贴图平铺次数比较少方便观察细节,当远的时候不需要看得太清楚,可以改变平铺次数变多一些。由于我们需要重复用到相似的功能,所以我们可以把它们制作成材质函数来进行使用。
方法一、知识点:
1、HeightLerp
来自于官方帮助文档设计视觉、渲染和图形效果—材质—材质函数——材质函数参考—纹理处理
HeightLerp(高度插值)函数允许您根据高度贴图和过渡阶段值,在 2 个纹理之间执行线性插值。这允许您沿着发生插值的高度贴图来调整值。
输入 | ||
A(矢量 3)(A (Vector3)) | 用于插值计算的第一个纹理。 | |
B(矢量 3)(B (Vector3)) | 用于插值计算的第二个纹理。 | |
过渡阶段(标量)(Transition Phase (Scalar)) | 此值定义发生过渡的高度贴图范围。保留此值为 0.5 表示执行标准插值,而将值调整为接近 0 和 1 将分别朝向高度贴图底部或顶部发生偏移。 | |
高度贴图(标量)(Height Texture (Scalar)) | 用于插值操作的高度贴图。 | |
对比度(标量)(Contrast (Scalar)) | 使用 CheapContrast(低成本对比度)函数对高度贴图应用对比度提升。 | |
输出 | ||
结果(Results) | HeightLerp(高度插值)函数的混合结果。 | |
阿尔法(Alpha) | 在插值中使用的阿尔法值(已提升对比度)。 | |
无对比度插值阿尔法(Lerp Alpha No Contrast) | 在插值中使用的阿尔法值(未提升对比度)。 |
双击此材质函数,进入内部观察节点:
可以像lerp一样理解它,高度的线性插值。
我们都知道纹理就是颜色的图片,所以这里我们让它特殊点,来看看2个颜色发生的变化;
示例1:
我把对比度设为0,你就会发现和线性插值一样了。
通过这里大体能够看出,利用高度图来混合A和B,高度图中减去1加上0.5乘以2正好又等于1,而这个值又作为alpha来线性插值A和B,所以白色基本上应该是B的颜色。我把对比度设为0,你就会发现和线性插值一样了。
CheapContrast函数内部结构为:
示例2:
我们来看看2个贴图应用情况:
放大看:
我们来调整过渡阶段(标量)(Transition Phase (Scalar))的值观察效果,当值为0时,
当值为1时:
有此可见过渡阶段(标量)(Transition Phase (Scalar))控制的是A和B的多少。
2、HeightLerpWithTwoHeightMaps
通过线性插值来混合两张高度贴图,
材质函数内部构造:
示例1:
示例2:
用它来混合高度贴图,只需要用到alpha输出,相当于在原来高度贴图的基础上生成了一张新的不规则的高度贴图。
效果图放大如下:
我们还可以处理下uv,如下处理:
处理后效果图:
对比下上面的效果更好了。调节参数可以得到更好的效果。
3、BlendMaterialAttributes
这个节点可以把原来用basecolor、normal、roughness等材质属性混合完再连接到材质节点上的方法改成下面这种:
方法二、知识点:
1、PixelDepth
PixelDepth(像素深度) 表达式输出当前所渲染像素的深度,即该像素与摄像机之间的距离。虚幻引擎默认的单位为厘米。
示例1:
效果如下:
在此示例中,已将材质网络应用于地板。请注意当地板后退 2048 个以上单位时(虚幻引擎默认的单位为厘米),线性插值在两种颜色之间是如何进行混合的。使用了 Power(幂)表达式来加强这两种颜色之间的对比,并产生更有意义的视觉效果。
示例2:
随着距离的变化产生一个蒙版变化的alpha选区。因为通过PixelDepth得到的是一个以厘米为单位的值比较大的值,所以我们需要重新定义一个值distance 作为过渡范围的1值,这样从0cm到distance就能得到一个从0到1的变化范围。由于大于这个值的相除得到的结果都是大于1的,所以我们就clamp一下范围在0-1,为了让变化的更加不规则,我们可以加上个噪点贴图,由于噪点贴图的变化范围比较大,我们可以通过它乘以一个divide后的结果,这样距离越近受到的干扰越小,距离越远受到的影像越大,让它们相加的选区加个限定在0-1去影像材质的混合效果。为了能够得到不同的混合效果我们还可以让噪点贴图产生变化,让它uv乘以一个值,当这个值大于1,相当于uv产生重叠,当乘以一个小数,相当于只显示原来uv图的一小部分,相当于放大贴图。最后得到的选区还可以进行调节对比度。选区就是一张灰度图,灰度图在ps中是可以调整对比度的,让过渡更加柔和还是生硬。
2、Distance_Blend
材质函数内部构成: