APP下载

Unity平台中虚拟仿真鱼群复杂行为的算法研究与优化

2019-12-27相景丽

山西电子技术 2019年6期
关键词:碰撞检测鱼群群组

相景丽

(山西职业技术学院,山西 太原 030006)

1 虚拟仿真环境下鱼群算法复杂行为分析

在虚拟仿真领域,经常会涉及到对一些生物群组行为的虚拟仿真控制,例如在水中游动的鱼群、在天空盘旋的鸟群,以及在特定场景中移动的动物群、人群等。生物群组行为的虚拟仿真控制能够使3D模拟技术在更多行业领域得到实际应用,例如在人群疏散模拟、无人机群的飞行模拟等[1]。

群组行为的虚拟仿真主要涉及两个方面:一是个体行为的特征模拟,二是群组行为的特征模拟。个体与个体之间通常会存在随机性的差异化行为,实现个体差异性行为的智能模拟较为容易,但在群组层面,个体的差异性行为则需要得到统一的控制,以避免群组行为的失控。特别是针对一些特殊行为的控制实现,例如群组的随机行为控制和障碍物的避让路径规划,具体分析如下:

1) 群组中的随机行为

一般的鱼群算法所实现的群组移动轨迹都是固定的,群组中节点的行为更新的频率也是固定的,鱼群会在相同的轨迹上一直飞,所有的鱼都会在同一时间变快或者变慢。但在真实环境中群组移动的轨迹不会一成不变,每个群组成员的行为改变也不可能同时发生,因此模拟群组行为时,增加一些随机行为效果是非常必要的。

2) 障碍物的避让行为

在真实场景中群组移动经常会遇到各类障碍物,群组就会依据实际情况及时做出避让反应,例如鱼群在水中游动时遇到的礁石,或者其他游动的生物等。障碍物在场景中的存在形式也各有不同,有些障碍物是静态存在的,这类障碍物在虚拟场景中可以预判到它的存在,那么最简单的方式就是通过预先的路径设定,使群组直接绕开障碍物。但是还有些障碍物是动态随机出现的,这就需要群组具备实时的碰撞检测功能,并依据检测结果产生相应的避让行为,这也是本研究中鱼群算法改进策略中重点研究的内容之一[2]。

2 Unity3D中的鱼群算法的研究与优化

2.1 鱼群随机行为的更新策略研究

群组成员行为更新频率的随机性,这是针对所有的群组成员实现的随机策略,每执行一次,就会产生一个随机的更新频率。同时Unity提供有协程调用功能,可以利用该功能实现在群组成员对随机策略的多次调用。如图1所示。

图1 群组成员行为随机更新中随机策略的应用思路

RandomPush()函数的功能,是在整个群组移动过程中,以基于FreqRandom的频率对PushVel的值进行更新。代码示例:

// radius为自定义的半径值,time为协程调用的间隔时间

PushVel=Random.insideUnitSphere*radius;time= Random.Range(-FreqRandom,FreqRandom);

其中PushVel是鱼群速度更新的影响因子之一,会以线性叠加的方式对鱼群的最终速度产生影响。Random.insideUnitSphere()函数用于返回一个随机速度向量,其取值范围是以当前boid的位置为中心,以radius为半径的一个球体区间内。

FreqRandom用于随机生成一个协程调用的间隔时间time,协同调用函数StartCoroutine()会依据time实现对RandomPush()的随机调用。通过对RandomPush()的随机调用,以实现对群组移动速度的随机调整,群组在移动时就会具有一个随机的速度增长或降低的效果,这使得群组行为模拟更加的逼真、自然。

2.2 鱼群碰撞检测策略优化

碰撞检测功能用于检测虚拟场景中所存在的物体有无发生碰撞[3],当发生碰撞后就会触发一些特定的事件。在群组移动过程中利用碰撞检测功能能够帮助群组节点检测到障碍物的存在,从而产生避让行为。

Unity3内置有碰撞器组件和三个特定事件:OnCollisionEnter(进入碰撞器)、OnCollisionStay(停留碰撞器)、OnCollisionExit(退出碰撞器)[4]。当群组遇到障碍物后,碰撞组件会触发特定事件,其实现过程如下:

1) 为障碍物绑定碰撞器组件,并设定一个阻力值,为鱼群中的所有节点添加刚体属性。障碍物通过碰撞组件对节点进行实时检测,当发生节点进入到碰撞器检测范围之后,会触发三类事件:CollisionEnter事件、OnCollisionExit事件、OnCollisionStay事件。CollisionEnter事件会在碰撞发生时响应,OnCollisionExit事件会在碰撞结束时响应,OnCollisionStay事件在碰撞过程中可被多次响应。将碰撞后所要实现的群组避让行为写入到响应事件当中,一旦碰撞发生,即可被即时调用处理。

2) 利用刚体属性中的加速度参数控制鱼群的避让行为,当触发碰撞事件之后,获取节点A当前速度视作进入碰撞检测范围的初始速度v0,在碰撞器中设定一个最小速度值为A的末速度vt,且vt

(1)

G表示A的加速度值,在OnCollisionEnter事件中对A的加速度进行动态刷新,并将其视作A最终速度的影响因子之一,以线性叠加的方式计入到A的最终速度当中。由于vt

3 研究总结

本研究围绕Unity3D虚拟仿真项目开发中,生物群组的复杂行为展开了深入的研究。以鱼群为例,对生物群组中移动轨迹随机更新与障碍物避让的复杂行为进行了分析,并提出了鱼群算法的优化改进策略:碰撞检测策略。碰撞检测策略通过Unity内置的刚体组件对鱼群对象添加了可用于检测的碰撞属性,通过内置的三种检测函数实现对场景中障碍物的实时检测,最后通过加速度计算规划出新的鱼群路径,从而有效改善了虚拟鱼群行为的模拟效果。

除此之外,群组行为的模拟控制需考虑的影响因素还有很多,例如群组中生物质量与重力关系的影响,雨、雪、风等自然环境因素对群组行为的影响,不同视野范围对群组行为的影响等,在后续研究中,将针对上述问题继续展开深入研究,并提出针对性的优化改进策略。

猜你喜欢

碰撞检测鱼群群组
基于动力学补偿的机器人电机力矩误差碰撞检测
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
Boids算法在Unity3D开发平台中模拟生物群组行为中的应用研究
人工鱼群算法在雷达探测器射频端电路设计中的应用
鱼群漩涡
朱梦琪??《鱼群》
BIM技术下的某办公楼项目管线碰撞检测
具功能反应食饵捕食模型动力学分析
群组聊天业务在IMS客户端的设计与实现