ue4 怎么传递变量到另一个蓝图_[UE4蓝图]虚幻4中实现简易天气系统(三)—— 受风力影响的Cascade雨水粒子...

439dd3fcc1b54091123bed81c2137f61.png

上一篇:

架狙只打脚:[UE4蓝图]虚幻4中实现简易天气系统(二)—— 随机风力​zhuanlan.zhihu.com
a2ccf5a467b01922ec6df077becc0fba.png

Cascade就是现在UE4中正在使用的ParticleSystem。

制作雨水材质:

1.我们先新建一个材质M_Rain,然后将BlendMode(混合模式)改为Translucent(半透明),ShadingModel改为Unlit(无光照)。

3fe7acb447d0791addee383ba387eafb.png

可以将预览网格改成方片状的,方便观察

9c6c836fdbdddd53827946b1e6a13010.png

2.完成材质。

97154149db016a6acf05c5f0b76377f1.png
  • ParticleColor(粒子颜色):当材质被用在粒子里时,这个节点就能把ParticleSystem里设置的粒子颜色传过来。与这个节点关联,就能在粒子系统里控制雨滴材质的颜色了。
    默认白色。
  • RadialGradientExponential(指数径向渐变):径向渐变,也就是从圆心向外渐变。
    UV(Vector2):控制渐变所在的位置及其涵盖 0-1 空间的程度。
    CenterPosition (Vector2):渐变中心位置偏移量。
    Radius (Scalar):渐变的半径。
    Density (Scalar):渐变的硬度。这个数值越大,意味着渐变越清晰。
    Invert Density (Boolean):将渐变的白色反转为黑色,并将黑色反转为白色。右键此节点并选择StartPreviewingNode可预览此节点的输出。

ff22e8299809d22cd38c2b2578ce9646.png

由图可看出,RadialGradientExponential节点输出的结果就是一个半径为0.5的圆,圆心点为白色输出值为1,渐变到圆周时变为黑色输出值为0。(半径硬度可做适当调整)
那么用这个输出值应用到透明度,也就获得了我们想要的效果(近似雨滴)。

44c86f6c599eae5ed8e7965a399ea35e.png

制作雨水粒子:

1.新建一个粒子系统P_Rain,选中Required(必需)模块,将Emitter(发射器)中的材质替换为雨水材质。

b17319c507806a151ea9dead40fb9f99.png
  • Required(必需)模块和Spawn一样都是粒子默认包含且无法删除的模块。其中包含了粒子发射器所需的所有属性。

2.右键在TypeDate(数据类型)中选择GPU Sprites。

51559e0701a590d359f1d11b8cbf8d3b.png
  • 粒子系统默认的数据类型是Sprite类型,该类型为CPU计算模拟粒子运动,并使用Billboard面片渲染的粒子。
  • GPU Sprite类型的粒子与Sprite类型效果类似,只是将模拟粒子运动的计算放在GPU端执行。相比CPU端模拟粒子运动,它的优势是减少了CPU端的开销,借助GPU的高性能并行计算,能够支持更多的粒子数目
  • 其他的几种类型:Mesh类型支持使用网格来渲染粒子。Beam类型粒子是一种可实现在两个物体之间连线的粒子,适合做激光束之类的。Ribbon类型粒子可以用于实现飘带的效果。AnimTrail类型粒子是模拟拖尾效果。它可以挂接到角色动画的骨骼上,跟随挂接骨骼的运动轨迹形成拖尾效果。

3.Spawn模块中将粒子数量修改为300。

6e6c4392f17a44e1fbd110bd89500853.png

4.Lifetime(生命周期)模块中将粒子生命周期改为5秒。

e31c36855589e4b742eece0397467d96.png

5.InitialSize(初始大小)模块中将初始大小改为(3,3,3)。

26c072e95c00c979dab4c99734557e9d.png

6.右键添加一个Location->InitialLocation(初始位置)模块,给定一个范围。

60775a6b68e3b6bf0176d4fa6557be5e.png

7.选中InitialVelocity(初始速度)模块,暂时为了方便调整效果,我们先不将其参数化(之后需要参数化才能在蓝图里根据风力控制),将速度先调整如下图。

e9338543e5da579ddf12cbc1a79a99eb.png

这时候粒子效果应该是这样的了(虽然不太像雨)

7d740bbc17377de7f3e68279ab2ddc6f.gif

8.为了更像雨,我们需要拉长一点粒子,并且是随着速度变快而拉得更长。因为日常中雨从我们的视野里落下,速度很快,所以留给我们大脑里的雨滴形象都会被拉长一点。
右键添加一个Size->SizeBySpeed(根据速度变化大小)模块并设置如下。

f807ca993bf5a6dbe7991756646d41ab.png

9.右键添加一个加速度Acceleration->Const Acceleration(常量加速度)模拟一下重力。
其实风力也需要提供平面方向加速度的,但Const Acceleration是个常量,不能提升为变量,不能随风向而改动。
如果你先把GPUSprite数据类型删掉,你会发现,Acceleration里会多出两个模块,其中一个就叫Acceleration,而这个模块是可以使用变量的。

7a5786a2cc885c615a3e692ab0592492.png

但是,再添加上GPUSprite的数据类型后

1986fbcd7382dd3534e0c87a4061fab1.png

意思就是GPUSprites数据类型不能和Acceleration模块一起用,我傻了真的。
二选一当然选GPUSprites了,性能问题更重要。
继续设置我们的ConstAcceleration

09ef697586f2be933b2416b2a43c77fa.png

10.细心的话可以看到粒子视窗左下角有一个警告Warning:This particle system has to fixed bounding box and contains a GPU emitter.
这是因为数据类型改为了GPUSprite需要确定粒子系统的边界,前面特意没有处理是因为这个边界会根据粒子的范围而设定,所以在设置好所有模块后再处理比较好,否则可能会导致边界不够大。(当边界在相机视野内时,粒子才会被渲染,如果你的粒子时隐时现,很可能是这个问题,再设置一次边界就好了)

0e9e6136dda163adb7f3271207197d79.png

现在的效果像雨了,但是如果从下向上看,像一根根牙签掉下来

983267b18d902a6e41dce8fa78850f37.gif

10.在Requied模块中将ScreenAlignment(屏幕对齐)改为PSA Velocity,这样粒子就不会一直面向Camera,而是会同时朝向自身的移动方向和Camera。

c33a6d6dc76bb7eb77d2806d644032b9.png

11.右键添加Color->Initialcolor(初始颜色)模块,将StartColor改成淡蓝,StartAlpha(透明度)改为0.3更像水珠。

f5a2b2784291176d971440ecb215138c.png

现在把粒子拖到场景中看看效果

2f2a93b48a389a6c3bc785e38986e5e5.gif

让粒子受风力影响:

1.我们无法使用参数化的加速度了,只能在InitialVelocity上做文章了。
将Distribution(分布数据)由默认的DistributionVectorUniform (向量均匀分布)改为DistributionVectorParticleParam (向量粒子参数分布),这样我们就能在外部动态修改这个值了,然后自定义一个参数名比如RainSpeed。

aecd2536715955c8102074b618dab1d6.png

2.将ParamModes都由DPM Normal改为DPM Direct。
ParamModes有三种,Normal是Constant里设置的值经过上方MinMaxInputOutput的范围比较后输出的值,ABS是取绝对值再比较,Direct则是无视上方的范围限制,直接使用Constant设置的值。

8fa82ab326fe1f14b43bcbfde67006bd.png

3.在关卡蓝图中的WindDirection函数中设置参数

993550f880ad2204824af1994f7dd5fc.png

这里我们用WindSpeed×可调整的倍数×风力方向-初始向下需要的速度500来求得我们需要的粒子初速度。然后用Set Vector Parameter方法设置参数就可以了。

最终效果

766f55740b711b52baf0373f47092691.gif
在实际使用中,应该顺滑的用插值过渡比较好吧

感谢关注评论点赞收藏!有问题请评论或私信。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值