UE4学习008——流体示例详解

2018-09-03  本文已影响279人  cdf02aaf6ae2

简介

这是一个用 RenderTarget 模拟水波效果的简单示例,波纹高度模拟和波纹法线计算设计的很巧妙

官方示例说明

官方说明只讲了建立工程的步骤及相关 Blueprint 中的设定,但没有解释其中的原理,此文根据我自己的理解加以说明

RenderTarget

RenderTarget 其实就是一般 3D 渲染概念中的显卡模板缓冲区,可以缓存渲染数据,而 UE4 将其进行了封装,让我们可以方便地用 Blueprint 进行操作,比如绘图

此示例使用了 4 个 RenderTarget,其中 3 个循环使用,以模拟计算波纹高度,另一个用于计算波纹法线

参数值由来

初始施加力

这部分是相对最简单的,就是把鼠标位置映射到纹理空间中的一个点,然后针对每一个像素,根据到此点的距离,线性换算成一个高度值,存入纹理的 R 通道

简单点说就是:

//0.02 - distance 还被约束到范围 [0,1]
h = (0.02 - distance) / 0.02

波纹高度模拟计算

此部分相对是最难的,使用了三个 RenderTarget,对应前一帧、当前帧、下一帧,循环进行模拟

每一帧对每一个像素,使用当前帧的高度图,采样其前后左右四个点,计算出均值并取一半作为此像素的变化趋势

然后减去再前一帧的高度,作为下一帧的高度值,存入纹理的 R 通道

波纹法线计算

此部分看起来挺难的,道理说透了,其实也简单

跟高度计算类似,对当前帧高度数据的每一个像素,采样其前后左右四个点,前减后,左减右,得到两个十字相交的向量

然后计算向量叉乘,得到的向量作为此点的法线方向

心得

可以通过修改 WaterSurface_BP 中的 UpdateRate 参数,比如改成 5,以较慢的速度看每一帧流体表面的变化

上一篇下一篇

猜你喜欢

热点阅读