UE5 材质 体积冰

chenglixue / 2023-05-13 / 原文

前言

本篇将介绍如何实现体块的体积感

目标

  • 实现玻璃效果

    噪声在表面下四处移动,而不是一动不动

  • 实现冰块效果

实现玻璃

  • 对于玻璃而言,我们不再将其视为一层而是两层,我们希望随着观察向量的变化它的子表面的纹理也随之变化。简单来说,随着观察向量角度的变化,观察点的uv也在不断变化
    image-20230513005504962

  • 我们需要一个观察向量和一个反射向量,随着观察向量角度的不同,我们看到物体的uv也不同,也就是说需要反射到摄像机
    image-20230513011159072

  • 可能的实现如下
    image-20230513143230310

    image

  • 目前这种玻璃效果有些过于强以至于不太真实,我们需要的是靠近玻璃,反射效果变强;远离玻璃,反射效果变弱,也就是说需要求得z和纹理偏移的关系
    image-20230513014504331
    最后采取相乘是因为这样的效果更好,经验之谈

  • 这里还没有结束,因为这是体渲染,所以正常来说需要处理的是三d纹理,但方向向量仅仅代表一个方向,使用2d纹理亦可实现,因此在这里我们需要除以纹理的分辨率来变换至2d
    image-20230513143441002
    image

实现冰块

  • 从上图可以看出,目前这个玻璃表面是非常光滑的,但现实中冰块的表面可没有这么光滑。因此我们需要想办法如何让其有粗糙感,感觉表面的效果很容易想到以凹凸贴图为基础的法线贴图
    image-20230513144925147
    image

  • 当前,因为目前所有像素点的偏移量都是相同的,为了让每个像素点的偏移量各不相同,以uv offset图作为输入即可

    image-20230513145428880
    image

reference

Cloth Shading - UE4 Materials 101 - Episode 10 - YouTube