【CG物理模拟系列】流体模拟--粒子法之SPH(实现)

邻域搜索的效率化

SPH等粒子法,由于需要考虑到邻域粒子带来的影响,通常邻域搜索都会消耗大量时间。如果我们只是单纯的计算所有粒子组合的欧氏距离的话,计算时间只会呈指数增加。

而空间分割法的出现,使邻域搜索实现了效率化。 空间分割法是一种,把希望检索到的物体存在的空间以格子等方式分隔开,只计算自身及相邻分割领域内包含物体的距离,可以使计算时间大幅减少的方法。空间分割法的处理顺序是,
  1. 物体的记录
    1. 分割空间
    2. 计算出各物体所属的分割领域
  2. 邻域搜索
    1. 计算出 搜索中心坐标所属区域
    2. 列出自身和相邻区域的物体
    3. 计算列出物体间的距离 

如上所述,分成记录和检索两部分。记录只在场景中的物体(粒子)位置变化的时候实行,检索则是在有必要的时候连续进行。

空间分割法的难点在于空间以怎样的方式分割。其代表性方法为,
  • 等间距格子(下图左)
  • 八叉树,四叉树构造(下图右)
  • kD树构造
等等。下图的四叉树构造,与等间距网格相比,检索效率更高,但是物体记录却更费事。使用粒子法的时候,为了使每一帧粒子都能实现动态移动,每一帧都要进行区域记录。为此,分割·记录较为容易的等间距网格法则会被经常使用。等间距网格,与有分层结构的其他分割方法相比,更容易进行记录同步化处理。 
particle_grid.gif  particle_octree.gif
図1 等间距格子 (左)和四叉树 (左)

GPU的实现


参照Particle Simulation using CUDA (PDF)(code源文件在NVIDIA的GPU Computing SDK中) ,来实现SPH法的扩充。

首先,介绍使用Particle Simulation using CUDA进行粒子搜索方法,如图所示。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值