虚幻4渲染编程(物理模拟篇)【第三卷:Fluid Particle Emitter】

MY BLOG DIRECTORY:

YivanLee:专题概述及目录​zhuanlan.zhihu.com图标

INTRODUCTION:

如果我们想要做流体模拟或者是一些特殊的物理粒子效果,我们就需要自己制作一个粒子发射器。下面就来写一个简单的粒子发射器。先看下我做的动力学粒子发射器的效果吧:

v2-e7768d5ed7c62f8a289b8327f6cd0d28.jpghttps://www.zhihu.com/video/1126859204463525888

MAIN CONTENT:

不知道为什么,一提到”粒子“就会想到(特效),(特效粒子编辑器器)等概念,也许是我特效编辑器用多了。在物理篇种其实反复强调,”粒子“其实就是一个抽象的概念,一坨数据。这坨数据的主要组成是两个位置数据,OldPos和NewPos,用这两个位置来进行韦尔来计算和Constraint等操作。所谓的粒子发射器其实就是spawn一堆这种粒子的东西,所以我简单粗暴地做了一个spawn函数

v2-b3e78096a0a96bfafaa293ef898a9550_b.jpg
v2-0d01397adc0ea86d7ac5774efcdcfffb_b.jpg

就是简单粗暴地往粒子网格数组里塞粒子然后对这些粒子进行解算就完了。

v2-6a7a971eb2f7ddf3d812ff5723d87080_b.png
v2-6ca225af1c42187166bd79fe94da129f_b.jpg

然后我们就得到了一个非常粗暴的粒子发射器,效果如下:

v2-ee4056c53502127fc073607141c076c9.jpghttps://www.zhihu.com/video/1126185355430408192

为了让粒子发射器能和我们认知的粒子发射器一致,所以我在Spawn粒子之后对所有粒子的状态进行检测,这样就可以让我的粒子发射器发射的粒子处于循环状态,依然是非常暴力的方法。

v2-4b4b455ebfc2c8018c165c52ea69d045_b.jpg

其实这里可以进行一个简单的封装,比如各种生命检测,位置约束等等都可以在Spawn完粒子之后进行。

把Spawn完成后的那部分代码封装到一个叫PhyGXEmitterSolver的类中,然后在PhyGXParticleEmitter中做一个约束列表

v2-eb27ff0c0d7c611aee2c2b118a94401c_b.jpg
v2-2c9c4424b9d087d39d70c805dfaaf00b_b.jpg

然后在Spawn完成后执行这个列表

v2-cfecb8262c13cc6dff2d1bf8630706e8_b.jpg

我们可以得到如下效果:

v2-6a1eebcbe68c827645dd59e65f891178_b.gif

至此我们完成了我们的粒子发射器。

完成粒子发射器以后对每个粒子进行SPH流体解算就可以得到一个简单的流体啦。下面是伪代码:

v2-e8747b20c361f369adac1bacfdeec291_b.jpg

可以得到的效果如下:

v2-5882e37d22f3c8d5cdb5093a61ff25b7_b.gif



SUMMARY AND OUTLOOK:

虽然我们的方法粗暴简单,但是我们初步建立了一个粒子系统的框架。先由粒子发射器向粒子塞粒子数据,塞完后对粒子进行各种循环检测,生命检测等,完成了这些检测再对粒子进行运动迭代。

完成了简单的粒子发射器就可以使用MarchingCube在粒子的基础上生成流体模型了。上述方法是我个人的想法及总结,也没在网上找到物理粒子系统的实现思路,如果有巨佬有更好的方式还请给我留言交流。

部分源码:PhyGX

Enjoy it。


NEXT:

YivanLee:虚幻4渲染编程(物理模拟篇)【第四卷:基于粒子的物理水面】


Reference

【1】matthias-mueller-fischer.ch

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpongo11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值