• Unreal地形高级材质之根据斜率分配材质


    总结:

    1利用heightlerp来调整坡度上地表的拉伸

    2利用材质里的grass out put节点来根据地形的mask自动生成地面的草 花  等小细节

    3利用ProceduralFoliageVolume生成树木

    4利用Foliage 植被系统来调整ProceduralFoliageVolume自动生成的植被

    目的:根据地形的斜率来混合地形材质,制作地形时,当地形有高度抬升时,被拉伸部位的贴图会出现拉伸,或者想要在拉伸区域使用其他类型种类的贴图时。如果使用笔刷对地形进行更改是耗费时间的,所以想要整体一次性更改,需要使用高度融合节点HeighLerp 及材质层融合节点 MatLayerBlend_Standard 实现。

    HeighLerp节点,材质函数,可双击进入查看逻辑。可以理解为 高度的线性插值。可以控制地形在高度上拉伸时,控制填充其他类型贴图高度范围。

    MatLayerBlend_Standard节点,材质函数,可双击进入查看逻辑。可理解为顶层和基础层的混合。地形在高度上拉伸时,想象成一个高度内拥有两端及中间区域,需要两端显示的材质链接TopMaterial节点,中间拉伸部位显示的材质链接BaseMaterial节点,Alpha:插值系数

     

    TopMaterial节点一般链接地形现有层材质即可。

    拉伸区域的材质需要自定义材质函数。

     2 创建岩石材质函数(拉伸区域的材质需要自定义材质函数)(希望在地形高度差的位置上表现的材质)

    1 创建一个材质函数

    2 创建岩石材质函数

    worldalignedtextures_complex 节点:

    备注:在模型拉伸使想要让贴图跟随物体拉伸,进行平铺使用WorldAlignedTextures节点即可实现效果. 

    在地形高度融合中,根据高度区域大小实现贴图平铺,需要使用WorldAlignedTextures_Complex节点完成,此节点是一个材质函数,官网没有解释。可以理解为 官方提供了一个规则,让我们直接按照规则使用。

    将材质蓝图中的贴图转换为纹理对象,不同类型的贴图与WorldAlignedTextures_Complex中对应节点链接。
     

    注意:所有连接到WorldAlignedTextures_Complex节点的贴图输入项后边括号内标有(T2d)的都要转为2d纹理(选中贴图右键“转换为纹理对象”)

     使用worldAlignedTextures节点设置后无法直接进行输出,需要使用制作材质属性节点(MakeMaterialAttributes)来输出

    如果需要再额外输出ao等信息需要新建output节点

    注意这里处理UV贴图重复度的方式~  第三个参数TextureSize是UV重复度值,我们需要外部将此参数值传入,需要创建输入节点命名为 UV重复度,控制板搜索input选择FunctionInput。将节点类型更改为函数输入标量(实际上就是个一维)。x默认值设置成300。

     

     最后使用时候需要创建一个函数从这里输入tilling值,如果这里没有输入则使用节点上的默认值。

     最后岩石材质函数节点

    3 然后创建普通地表贴图的材质函数:(草地之类的)

    1创建材质函数:

    2地表贴图的材质

    4 地面材质蓝图公式:

    创建一个材质球,将两个岩石材质函数拖入,创建一个一维参数节点(命名:小岩石贴图大小)连接到小岩石材质函数的Tiling(这里如果不输入参数的话贴图大小就默认制作材质函数时输入的x:800为默认参数);

          创建一个LinearInterpolate(简:Lerp 线性插值),三维常量和一维参数节点(小岩石法线混合值),将三维常量连接到Lerpde的A点并设B通道为1,将小岩石材质函数的Normal连接到B点,一维参数节点连入Alpha通道;
          创建一个Transform(空间转换,将线性空间转换代世界空间),选中Transform节点在细节面板的Source选项改为‘Tangent Space’,Destination选项改为‘World Space’;z再将Lerp连接到Transform 
          转换到世界空间后Transform的数值范围是无穷大的,所以需要一个归一化节点Normalize约束一下数值在一定范围内(0-1);
          创建一个DotProduct(简:Dot)将Normalize节点连接到A点,再把刚刚创建的三维常量节点连接B点,这样是世界空间与原始数据对比;
    将得出的对比数据连接到ConstantBiasScale节点(常量偏差比例);

    创建一个Layer Blend节点将绘的材质函数连接起来,有几个残值函数添加几个混合层,每个混合层的混合模式改为高度混合(Blend Type: LB Height Blend),还要设置每个绘制层的混合权重(Preview Weight);

     

    最后完整的材质节点图:

    然后创建材质实例,赋予地形就OK~

    enjoy~  地形坡度两层岩石地表混合方式完成~    

    下面为简单的地形坡度地表混合节点图:

    地表节点图

    高度范围值逻辑

    完整的材质节点图

    材质函数的贴图参数开放~  在材质函数里把Tex Object转成 param Tex Object这样调用这个材质函数的材质球就可以替换对应的贴图了~ 

    利用材质Grass Output 节点, 以及Foliage 系统添加植被

    1在材质蓝图里创建landscapeGrassOutput节点

    2然后再资源库里创建landscape grass type 在grass type这里设置植被或者草的密度是性价比比较高的~ ,如果在材质蓝图里利用遮罩蒙版来控制植被密度 性能上不是很好。

    利用jitter来控制生成植物之间的间距

     利用density 来控制生成植被的密度

    3 材质蓝图里控制landscape grass type里植被的生成范围(相当于制作了一个mask)可以控制mask的范围但是植被的密度最好是在landscape grass type里设置好~  

    可以利用图片来和地形的mask进行减法来做出变化~  (mask图片可以RGB做三种不同变化)

    4 最后实现的效果,因为使用了 岩石立面避免拉伸的mask 所以 岩石的立面不生长植被(草和树(不过树不推荐用这个方法)比较适合草 花 小岩石  地面的小树枝等)。

    5 利用UE地形节点 Landscape Layer Weight节点创建一个Foliage Removal层,用来控制 Grass Output节点生成的植被。

    【想了解其他类似地形相关节点  搜索 ue4地形表达式】

    (上图有个问题,不需要修改Blend Mode 为mask就可以显示Landscape Layer Weight节点创建d的Foliage Removal层)

    利用 LandscapeLayerWeight 表达式可根据地形材质中获取的关联图层权重混合所有材质网络。该图层的权重用作混合两个输入网络的Alpha值

    1. 参数名称 – 给定参数的唯一命名。
    2. 预览权重 – 材质编辑器中用于预览的权重。
    3. 恒定底色 – 可在此指定地形需要拥有的底色
    4. 基础 – 要与该图层混合的网络。此通常为前一图层混合的结果,但如是首个图层,则可以为空。
    5. 图层 – 要混合起来创建该图层的网络。

     LandscapeLayerWeight表达式利用乘法和原来的mask进行blend然后连接到对应的Grass out put节点上~   

    搭配Foliage 系统添加植被

    1 创建Mesh foliage 类型~  指定植物的static mesh

    可以设置植被的大小 旋转等参数~    

    利用来设置植被的生产地形~ ("草地")这个名字需要和地表的名字对应上~  这样就只能在名字对应的地表上进行刷对应的植被了

    2 OK 然后正常刷植被即可~   

    Procedural Foliage Spawner 程序化植被系统

    利用程序化快速生成植被,生成后可以利用UE的植被笔刷来修改程序化植被生成后的植被结果

    1 创建Procedural Foliage Spawner

    2 在Procedural Foliage Spawner里指定两个设置好的 Static Foliage Spawner 

    static mesh Foliage 里的设置:

    Collision       碰撞 :该属性主要用来控制,当植被的碰撞半径,与另一种植被类的碰撞半径或着色半径重叠时,会根据植被类型对象的优先级,确定哪种植被的种子会被取代或移除。

    Clustering    集群设置:  通过设置集群中的阶数来控制植被的年龄
                                            通过设置初始种子密度来控制植被的总体密度

    Growth        生长设置:  通过对生长设置进行调整,植被类型对象的网格体实例会根据设置随时间生长。     

    3 把创建的Procedural Foliage Spawner拽到场景里~  然后缩放调整生成框的大小

    设置好框大小后,点击Resimulate 生成~  

    4  Procedural Foliage Blocking Volume 设置植被阻挡体积

    该遮挡体积可以阻挡植被工具进行生成,即被该体积覆盖的地方,不会有植被被生成。

    5 利用程序区域生成的植被,可以支持UE的植被笔刷来调整~  

  • 相关阅读:
    『PyQt5-Qt Designer篇』| 12 Qt Designer中如何设置信号与槽?
    centos/rocky/redat 8 删除swap分区,重启后无法进入系统
    Gitee的使用
    MapInfo格式到ArcGIS格式的转换方法
    【树莓派】yolov5 Lite,目标检测,行人检测入侵报警
    Maxwell 是什么?
    [线程与网络] 网络编程与通信原理(四):深入理解传输层UDP与TCP协议
    使用 JavaScript 检测用户是否在线
    【CTF Web】CTFShow 数据库恶意下载 Writeup(目录扫描+mdb文件泄露+Access脱库)
    每日一题47-48
  • 原文地址:https://blog.csdn.net/weixin_37298380/article/details/128052597