在unreal中的基于波叠加的波浪水面材质原理和制作

关于水的渲染模型

如何渲染出真实的水体和模拟,是图形学,游戏开发乃至仿真领域很有意思的一件事

记得小时候玩《Command & Conquer: Red Alert 3》,被当时的水面效果深深震撼,作为一款2008年出的游戏,现在想起它当时的水面还是依旧印象深刻

 2018年的《盗贼之海》的水就非常好看在unreal中的基于波叠加的波浪水面材质原理和制作_第1张图片

 到现在的水体渲染已经从材质模拟到现在ue5的粒子模拟,可谓是进步十足,现在的主流水体渲染方案有几种,线性波形叠加方法,统计模型方法,波动粒子方法,基于物理的方法,预渲染方法等,各种五花八门的方法层出不穷,本文的方法主要是基于第一种方法

真实的波浪模型

波浪,意思是指具有自由表面的液体的局部质点受到扰动后,离开原来的平衡位置而作周期性起伏运动,并向四周传播的现象。

在unreal中的基于波叠加的波浪水面材质原理和制作_第2张图片

实际上海或者水的波浪是多个波浪叠加起来的产物

波的性质:必须是周期性或近似周期性的运动,也是可以后面我能用流动uv的原因

驻波(Standing wave)﹕外观波形并无明显之移动趋势,各点仅有水面上下起伏者

在unreal中的基于波叠加的波浪水面材质原理和制作_第3张图片

行进波(Progressive wave): 外观波形以特定速度行进者

在unreal中的基于波叠加的波浪水面材质原理和制作_第4张图片

波浪叠加﹕不同频率、不同方向传的波浪彼此可以是不相干的。实际在海面 上观看到的混乱波浪场便是由许多大小不等、方向与频率各异的波浪所叠加而成。叠加过程并不妨碍波浪场各组成份子(成份波)彼此的独立性。在unreal中的基于波叠加的波浪水面材质原理和制作_第5张图片

 关于波的叠加

波共同特性 各种形式的波的共同特征是具有周期性。 受扰动物理量变化时具有时间周期性,即同一点的物理量在经过一个周期后完全恢复为原来的值;在空间传递时又具有空间周期性,即沿波的传播方向经过某一空间距离后会出现同一振动状态(例如质点的位移和速度)。

 在unreal中的基于波叠加的波浪水面材质原理和制作_第6张图片

在同一介质中传递的两个波相遇时,重叠范围内会遵守波的叠加原理,当两波分开后,会维持各自原本的运动,称为波的独立性。

下面将利用波的独立性多个性质叠加实现波浪模拟

首先给一个波浪的基础颜色和法线贴图

在unreal中的基于波叠加的波浪水面材质原理和制作_第7张图片

 可以看见一个贴图已经好了,但是没有效果

在unreal中的基于波叠加的波浪水面材质原理和制作_第8张图片

对波浪的法线贴图做UV流动动画

在unreal中的基于波叠加的波浪水面材质原理和制作_第9张图片

关于Panner(平移)节点 

在unreal中的基于波叠加的波浪水面材质原理和制作_第10张图片

坐标(Coordinate):接收可以通过表达式来修改的基本 UV 纹理坐标。 
时间(Time):接收用来确定当前平移位置的值。这通常是用来提供常量平移效果的时间表达式,但是,也可以使用常量或标量参数来设置特定偏移,或者通过 Matinee 或蓝图来控制平移。
Speed X(速度 X) : 坐标沿水平或 X 轴方向移动的速度。
Speed Y(速度 Y) : 纹理坐标沿垂直或 Y 轴方向移动的速度。
Const Coordinate(常量坐标) : 仅在未连接坐标的情况下使用。
Fractional Part(小数部分) : 仅输出平移计算结果的小数部分,以提高精度。输出将大于或等于 0 并且小于 1。 

这时候给材质一个在X分量上的速度0.2,这时候就可以看到材质流动了

但是这时候法线波浪不明显,这时候就需要修改法线贴图的分量比例了 

处理法线贴图使波浪明显

法线贴图的的RGB分别代表法线的XYZ坐标

光线作用于法线的时候,物体的凹凸效果是通过XY的分量决定的,这里将RG(也就是法线向量的XY分量)提出来,乘一个系数Param,系数越大,波浪越明显

处理好的蓝图如下:

在unreal中的基于波叠加的波浪水面材质原理和制作_第11张图片

 将RG分量乘以系数,就直接给个20,可以发现波浪已经非常明显了

 但是单个贴图流动,总是重复的,太假了

利用多UV的向量叠加制造不重复真实的波浪效果

将三个贴图的法线贴图叠加,给予不同的速度(不同的波浪速度是不一样的)

在unreal中的基于波叠加的波浪水面材质原理和制作_第12张图片

这三张贴其实是不一样的(我用了个技巧,给他们的UV平铺不一样,大小不一样,就像三种波纹叠加了) 

在unreal中的基于波叠加的波浪水面材质原理和制作_第13张图片

 看看效果:

利用贴图法线XY分量的周期变化实现驻波 

用下面的材质,注意其中的Param要随着时间周期变化

在unreal中的基于波叠加的波浪水面材质原理和制作_第14张图片

 在actor蓝图中设立一个时间轴,值随着时间去变大然后变小,周期变化

在unreal中的基于波叠加的波浪水面材质原理和制作_第15张图片

 时间轴(其实这里用正弦或者余弦函数更仿真,这里只先讲清楚原理)

在unreal中的基于波叠加的波浪水面材质原理和制作_第16张图片

 实现效果: 

将行进波和驻波叠加

在unreal中的基于波叠加的波浪水面材质原理和制作_第17张图片

 最终效果:

你可能感兴趣的:(材质,ue4,ue5)