上一篇:

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

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

制作雨水材质:

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

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

2.完成材质。

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

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

制作雨水粒子:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

让粒子受风力影响:

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

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

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

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

最终效果

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

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

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

  1. ue4 怎么传递变量到另一个蓝图_资深建模教你放置UE4蓝图节点,所以你就不要偷懒啦,认真点学...

    蓝图是UE4的一大特色,蓝图节点作为UE4学习的一个重要知识点,一直被很多人所重视.那你知道UE4是怎么放置蓝图节点的呢? 放置蓝图节点 在"图形模式"下,有几种方法可以放置节点. ...

  2. ue4 怎么传递变量到另一个蓝图_【UE4】UI注意事项

    文章内容导图: 以下仅是自己在实际操作过程中记录的一些笔记,可能不是很全,关于UI这块以后会根据具体情况以及自己的疑惑点不断更新,不断完整的. (另:自己把相关知识总结一遍形成一个框架,相当于建一座图 ...

  3. UE4学习-在虚幻编辑器中打开VS的三种方式

    文章目录 方式一 方式二 方式三 在虚幻编辑器中打开VS的三种方式 方式一 在文件浏览器这里,选择C++类,然后在文件夹内,找到一个和截图中类似的图标,双击,即打开vs,并在vs中打开这个类的代码. ...

  4. python中指定最后一个字符_如何从Python字符串中删除最后一个字符?

    如何从Python字符串中删除最后一个字符? Python支持负索引切片和正切片.负索引从  -1 到-(iterable_length)开始.我们将使用负切片从可迭代对象的末尾获取元素. 索引  - ...

  5. python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

    在python语言中,除了常规变量之外,还有函数变量.把函数本身赋值给变量,这个变量为函数变量. 工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件 ...

  6. python apscheduler 阻塞方式只用一个线程_框架APScheduler在python中调度使用的实例详解...

    本篇文章主要介绍了详解python调度框架APScheduler使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近在研究python调度框架APScheduler使 ...

  7. 打开另外一个页面_如何在PDF页面中插入图片?

    如何给PDF添加图片?有些时候为了丰富PDF的文档内容,需要添加一些图片,相比Word或PPT文档可以直接插入图片,而PDF的操作很多人可能并不熟悉,下面一起来看看如何在PDF文档中插入图片. 关于P ...

  8. java list去除最后一个元素_如何快速删除list中的最后一个元素?

    (前言: 在项目中,在统计在线用户量及其行为方式的时候,想在项目如"/bob/recode/online",结果发现:把写日志的东西放到了ebin文件下,即:/bob/ebin/r ...

  9. python已安装这个产品的另一个版本_电脑安装会声会影过程中提示已安装这个产品的另一个版本怎么解决...

    ‍ 最近有用户在电脑中安装会声会影x7的过程中出现提示,"已安装这个产品的另一个版本,这个版本的安装无法继续".通过分析可以得知,应该是之前卸载会声会影的操作不当导致卸载不完全.如 ...

最新文章

  1. [搜索]波特词干(Porter Streamming)提取算法详解(1)
  2. django_rest_framework之GenericAPIView(二)之搜索、排序、分页讲解
  3. 长春成人计算机学校有哪些专业学校,长春成人高考学校有哪些
  4. 光盘刻录只允许读取不能拷贝_便携易用,读写强劲:ORICO外置刻录光驱体验
  5. c++hello world代码_在 Rust 代码中编写 Python 是种怎样的体验?
  6. jQuery学习笔记——jQuery基础核心
  7. 催化剂概念在管理领域的应用——来自项目管理群的讨论
  8. 软件测试-缺陷报告(自己看)
  9. 哈哈,我把熊猫烧香病毒扒了!
  10. 李庄 220kV变电站电气部分初步设计
  11. RNA剪接体 Spliceosome | 冷冻电镜 | 结构生物学
  12. python计算偶数平方和_如何使用Python和Numpy计算r平方?
  13. win10删除*某些设置由你的组织来管理
  14. 7-2 531 字符串_小写变大写
  15. 【decode()】
  16. 小松鼠邮件(squirrelmail)服务器部署(squirrelmail+Postfix)
  17. 新手使用xc3s50an-dk@liuger 开发板
  18. MANIFEST.MF文件
  19. iOS开发mac工具
  20. TransmittableThreadLocal的简单使用 + 手写源码

热门文章

  1. html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
  2. 微信小程序引入npm
  3. ROS-手势控制小海龟移动
  4. Vue路由传参及传参后刷新导致参数消失处理
  5. Git Submodule新漏洞已修复
  6. leetcode-507-Perfect Number
  7. window.btoa()方法;使字符编码成base64的形式
  8. iOS--百度地图相关功能的实现
  9. kali实战-被动信息收集
  10. Kafka Consumer端的一些解惑