![439dd3fcc1b54091123bed81c2137f61.png](https://i-blog.csdnimg.cn/blog_migrate/00eb57a2f39b560827fe570591a1b310.jpeg)
上一篇:
架狙只打脚:[UE4蓝图]虚幻4中实现简易天气系统(二)—— 随机风力zhuanlan.zhihu.com![a2ccf5a467b01922ec6df077becc0fba.png](https://i-blog.csdnimg.cn/blog_migrate/c188e5985415455709436bd127b7acfd.jpeg)
Cascade就是现在UE4中正在使用的ParticleSystem。
制作雨水材质:
1.我们先新建一个材质M_Rain,然后将BlendMode(混合模式)改为Translucent(半透明),ShadingModel改为Unlit(无光照)。
![3fe7acb447d0791addee383ba387eafb.png](https://i-blog.csdnimg.cn/blog_migrate/f2dda1aee6e88ede3fc30ce6b6808333.png)
可以将预览网格改成方片状的,方便观察
![9c6c836fdbdddd53827946b1e6a13010.png](https://i-blog.csdnimg.cn/blog_migrate/81c68b5c98823af8247638714aecefec.png)
2.完成材质。
![97154149db016a6acf05c5f0b76377f1.png](https://i-blog.csdnimg.cn/blog_migrate/646f33f5d5cec3063e7935e306b4e6fc.png)
- ParticleColor(粒子颜色):当材质被用在粒子里时,这个节点就能把ParticleSystem里设置的粒子颜色传过来。与这个节点关联,就能在粒子系统里控制雨滴材质的颜色了。
默认白色。 - RadialGradientExponential(指数径向渐变):径向渐变,也就是从圆心向外渐变。
UV(Vector2):控制渐变所在的位置及其涵盖 0-1 空间的程度。
CenterPosition (Vector2):渐变中心位置偏移量。
Radius (Scalar):渐变的半径。
Density (Scalar):渐变的硬度。这个数值越大,意味着渐变越清晰。
Invert Density (Boolean):将渐变的白色反转为黑色,并将黑色反转为白色。右键此节点并选择StartPreviewingNode可预览此节点的输出。
![ff22e8299809d22cd38c2b2578ce9646.png](https://i-blog.csdnimg.cn/blog_migrate/e8e559cec37f9c9dc3219a9d5060d80b.jpeg)
由图可看出,RadialGradientExponential节点输出的结果就是一个半径为0.5的圆,圆心点为白色输出值为1,渐变到圆周时变为黑色输出值为0。(半径硬度可做适当调整)
那么用这个输出值应用到透明度,也就获得了我们想要的效果(近似雨滴)。
![44c86f6c599eae5ed8e7965a399ea35e.png](https://i-blog.csdnimg.cn/blog_migrate/6df1cd1a62f39a341efd6f56c18d4117.png)
制作雨水粒子:
1.新建一个粒子系统P_Rain,选中Required(必需)模块,将Emitter(发射器)中的材质替换为雨水材质。
![b17319c507806a151ea9dead40fb9f99.png](https://i-blog.csdnimg.cn/blog_migrate/d7ad63749934f0b8e3aaf830f33b3b14.jpeg)
- Required(必需)模块和Spawn一样都是粒子默认包含且无法删除的模块。其中包含了粒子发射器所需的所有属性。
2.右键在TypeDate(数据类型)中选择GPU Sprites。
![51559e0701a590d359f1d11b8cbf8d3b.png](https://i-blog.csdnimg.cn/blog_migrate/b7edee632b564b222c59bc01eea1ac04.png)
- 粒子系统默认的数据类型是Sprite类型,该类型为CPU计算模拟粒子运动,并使用Billboard面片渲染的粒子。
- GPU Sprite类型的粒子与Sprite类型效果类似,只是将模拟粒子运动的计算放在GPU端执行。相比CPU端模拟粒子运动,它的优势是减少了CPU端的开销,借助GPU的高性能并行计算,能够支持更多的粒子数目。
- 其他的几种类型:Mesh类型支持使用网格来渲染粒子。Beam类型粒子是一种可实现在两个物体之间连线的粒子,适合做激光束之类的。Ribbon类型粒子可以用于实现飘带的效果。AnimTrail类型粒子是模拟拖尾效果。它可以挂接到角色动画的骨骼上,跟随挂接骨骼的运动轨迹形成拖尾效果。
3.Spawn模块中将粒子数量修改为300。
![6e6c4392f17a44e1fbd110bd89500853.png](https://i-blog.csdnimg.cn/blog_migrate/b512ccb2b6fdb2eb3b0c284b2fa95612.png)
4.Lifetime(生命周期)模块中将粒子生命周期改为5秒。
![e31c36855589e4b742eece0397467d96.png](https://i-blog.csdnimg.cn/blog_migrate/d7f223158ed1cf13a18c62c2a34892a3.png)
5.InitialSize(初始大小)模块中将初始大小改为(3,3,3)。
![26c072e95c00c979dab4c99734557e9d.png](https://i-blog.csdnimg.cn/blog_migrate/8c0218795c8403076b9eb76e7509bb84.png)
6.右键添加一个Location->InitialLocation(初始位置)模块,给定一个范围。
![60775a6b68e3b6bf0176d4fa6557be5e.png](https://i-blog.csdnimg.cn/blog_migrate/b9a94e55ea60f0479efbadb50261de1d.png)
7.选中InitialVelocity(初始速度)模块,暂时为了方便调整效果,我们先不将其参数化(之后需要参数化才能在蓝图里根据风力控制),将速度先调整如下图。
![e9338543e5da579ddf12cbc1a79a99eb.png](https://i-blog.csdnimg.cn/blog_migrate/8c510daa0d669c2934f040d4d0cd50bf.png)
这时候粒子效果应该是这样的了(虽然不太像雨)
![7d740bbc17377de7f3e68279ab2ddc6f.gif](https://i-blog.csdnimg.cn/blog_migrate/9b3577685db9e3d8148552afba78ee0f.gif)
8.为了更像雨,我们需要拉长一点粒子,并且是随着速度变快而拉得更长。因为日常中雨从我们的视野里落下,速度很快,所以留给我们大脑里的雨滴形象都会被拉长一点。
右键添加一个Size->SizeBySpeed(根据速度变化大小)模块并设置如下。
![f807ca993bf5a6dbe7991756646d41ab.png](https://i-blog.csdnimg.cn/blog_migrate/60df32af7c98e97889f866043b750255.png)
9.右键添加一个加速度Acceleration->Const Acceleration(常量加速度)模拟一下重力。
其实风力也需要提供平面方向加速度的,但Const Acceleration是个常量,不能提升为变量,不能随风向而改动。
如果你先把GPUSprite数据类型删掉,你会发现,Acceleration里会多出两个模块,其中一个就叫Acceleration,而这个模块是可以使用变量的。
![7a5786a2cc885c615a3e692ab0592492.png](https://i-blog.csdnimg.cn/blog_migrate/7b523e00f03225f08bbf5e4776a22514.png)
但是,再添加上GPUSprite的数据类型后
![1986fbcd7382dd3534e0c87a4061fab1.png](https://i-blog.csdnimg.cn/blog_migrate/7ca5e21b185e16131f261e7646a5d342.png)
意思就是GPUSprites数据类型不能和Acceleration模块一起用,我傻了真的。
二选一当然选GPUSprites了,性能问题更重要。
继续设置我们的ConstAcceleration
![09ef697586f2be933b2416b2a43c77fa.png](https://i-blog.csdnimg.cn/blog_migrate/30afbd1fe622b1122bfd11ce7a9869dc.png)
10.细心的话可以看到粒子视窗左下角有一个警告Warning:This particle system has to fixed bounding box and contains a GPU emitter.
这是因为数据类型改为了GPUSprite需要确定粒子系统的边界,前面特意没有处理是因为这个边界会根据粒子的范围而设定,所以在设置好所有模块后再处理比较好,否则可能会导致边界不够大。(当边界在相机视野内时,粒子才会被渲染,如果你的粒子时隐时现,很可能是这个问题,再设置一次边界就好了)
![0e9e6136dda163adb7f3271207197d79.png](https://i-blog.csdnimg.cn/blog_migrate/2952f3ed983fa8c214e4d603f87b37c3.png)
现在的效果像雨了,但是如果从下向上看,像一根根牙签掉下来
![983267b18d902a6e41dce8fa78850f37.gif](https://i-blog.csdnimg.cn/blog_migrate/511d18c8dbc079cddcf69be1b47205bd.gif)
10.在Requied模块中将ScreenAlignment(屏幕对齐)改为PSA Velocity,这样粒子就不会一直面向Camera,而是会同时朝向自身的移动方向和Camera。
![c33a6d6dc76bb7eb77d2806d644032b9.png](https://i-blog.csdnimg.cn/blog_migrate/0a02e884e95faac502d56863da9a8a96.png)
11.右键添加Color->Initialcolor(初始颜色)模块,将StartColor改成淡蓝,StartAlpha(透明度)改为0.3更像水珠。
![f5a2b2784291176d971440ecb215138c.png](https://i-blog.csdnimg.cn/blog_migrate/e1772fd42d5211178f2c6c4bcfa41f78.png)
现在把粒子拖到场景中看看效果
![2f2a93b48a389a6c3bc785e38986e5e5.gif](https://i-blog.csdnimg.cn/blog_migrate/1ba933ff96f4dd3dc1c57d1dc1becb33.gif)
让粒子受风力影响:
1.我们无法使用参数化的加速度了,只能在InitialVelocity上做文章了。
将Distribution(分布数据)由默认的DistributionVectorUniform (向量均匀分布)改为DistributionVectorParticleParam (向量粒子参数分布),这样我们就能在外部动态修改这个值了,然后自定义一个参数名比如RainSpeed。
![aecd2536715955c8102074b618dab1d6.png](https://i-blog.csdnimg.cn/blog_migrate/b6884443e6eeb5857d4bb7439b45a64a.png)
2.将ParamModes都由DPM Normal改为DPM Direct。
ParamModes有三种,Normal是Constant里设置的值经过上方MinMaxInputOutput的范围比较后输出的值,ABS是取绝对值再比较,Direct则是无视上方的范围限制,直接使用Constant设置的值。
![8fa82ab326fe1f14b43bcbfde67006bd.png](https://i-blog.csdnimg.cn/blog_migrate/b0ab64b20a4cf32da02f4f0a7915191f.png)
3.在关卡蓝图中的WindDirection函数中设置参数
![993550f880ad2204824af1994f7dd5fc.png](https://i-blog.csdnimg.cn/blog_migrate/ca1795eed77d263806f028849f0b825c.jpeg)
这里我们用WindSpeed×可调整的倍数×风力方向-初始向下需要的速度500来求得我们需要的粒子初速度。然后用Set Vector Parameter方法设置参数就可以了。
最终效果
![766f55740b711b52baf0373f47092691.gif](https://i-blog.csdnimg.cn/blog_migrate/9bd950dde01f9e32f89755defc374025.gif)