UE5 材质 噪声shader

发布时间 2023-05-21 17:52:18作者: 爱莉希雅

noise介绍

  • 关于Perilin noise我已总结过实时渲染 perilin noise - 爱莉希雅 - 博客园 (cnblogs.com),这里不再介绍

  • UE5 的noise节点

    • noise的分类,一般会选择3d纹理(相较于普通的速度更快,但消耗更大),不过此时就是对纹理进行采样而不是进行数学计算。另外,如果物体在世界空间中移动,它的noise纹理也会发生变化
      image-20230518101905114
    • 一般来说,Levels设为3

枯木积雪

思路

  • 通常每棵树的纹理都是不同的,如果都为这些树制作单独的纹理,那成本就大了,在这里使用程序化噪声来生成不同的纹理
  • 在这里我们使用noise来blend树木和雪

实现

  • 初步实现
    image-20230518111935387

  • 提高清晰度

    可以看到目前实现的效果还有些模糊
    image-20230518113258237

  • lerp树木和雪
    image-20230518113448673

  • 增大积雪范围改变树木纹理
    image-20230518231545157

层积岩

目标

  • 艺术家工作时会发现,当他们创造多个岩石并将这些岩石合并成一个岩层时,合并的效果并不好,看起来很混乱。此节我们将使用程序化noise来解决这个问题

  • 另外,岩层还有一些特征:每一层都有独特的特征,层与层相融合

纹理

  • 下图是一张岩石的渐变纹理,用该纹理来模拟岩层

image-20230519172216198

对纹理进行采样的效果如下
image-20230519172319816

实现

投影到世界空间

  • 上图是以uv坐标进行采样的,但我们需要的是岩石无论做任何运动都持有横向渐变的特性,因此我们需要以世界坐标进行采样且采样坐标的v轴是世界空间的z轴
    image-20230519173306431

调整缩放比例

  • 从上面放大后的可以看出,当前的缩放比例太小了!我们需要将其放大

    image-20230519173637310

调整z坐标

  • 使用Noise调整z坐标的值
    image-20230519174007764
  • z坐标确实被修改了,但可以看到noise过于强烈
    image-20230519174148019

控制渐变

  • 我们还需要的是随着世界坐标的变化,岩石的渐变效果随之发生改变
    image-20230519174952308

解决模型间的缝隙

动机

  • 当艺术家们制作完模型后,这时将这些模型像积木一样进行拼凑,会发现模型和模型间存在缝隙。解决这一问题的方法便是不使用uv的材质,并将其变换到世界空间,以创建可以混合的材质

思路

  • 我们需要做的是将材质投影到前顶侧三个面,创建两组不同比率重复性的纹理,且与世界坐标对齐,再使用程序化noise对他们进行blend
    image-20230519190148252
    image-20230519190339794

实现

  • 在UE5中有一个"worldAligned"的节点,使用该类型的节点即可消除模型间的间隙
    image-20230519192138233

  • 效果
    image-20230519193753583