基于优化算子的快速碰撞检测算法
曲慧雁1,2, 赵伟3,4, 秦爱红5
1.吉林大学 计算机科学与技术学院,长春 130012
2.吉林农业大学 信息技术学院,长春 130118
3.长春工程学院 机电学院,长春 130012
4.浙江传媒学院 电子信息学院,杭州 310018
5 浙江传媒学院 新媒体学院,杭州 310018
通信作者:赵伟(1967-),男,教授,博士后.研究方向:虚拟现实,人机交互技术.E-mail:prince1205@163.com

作者简介:曲慧雁(1980-),女,副教授,博士.研究方向:虚拟现实,图形图像处理.E-mail:quhuiyan68@163.com

摘要

针对复杂人机交互实时性的要求,提出了一种基于优化算子的SIMD并行碰撞检测算法。引入了优化算子,将搜索空间限定在非均匀的局部极小区域,减少了蚁群的搜索时间。在多蚁群求解过程中,将子任务使用负载均衡策略分配到多核处理器的各个处理核心上并行执行,实验结果表明:与经典的I-COLLIDE、MPI及Pipelining等算法相比,本文提出的算法较好地解决了人机交互中的碰撞检测问题。

关键词: 人工智能; 碰撞检测; 并行算法; 优化算子; 平衡包围盒
中图分类号:TP391 文献标志码:A 文章编号:1671-5497(2017)05-1598-06
A fast collision detection algorithm based on optimization operator
QU Hui-yan1,2, ZHAO Wei3,4, QIN Ai-hong5
1.College of Computer Science & Technology, Jilin University, Changchun 130012,China
2.School of Information Technology, Jilin Agricultural University,Changchun 130118,China
3.School of Mechanical and Electrical, Changchun Engineering Institute,Changchun 130012,China
4.School of Electronics and Information Technology Zhejiang University of Media and Communications, Hangzhou 310018,China
5.School of New Media,Zhejiang University of Media and Communications, Hangzhou 310018,China
Abstract

To meet the real-time requirement in complex human-computer interaction, a Single Instruction, Multiple Data (SIMD) parallel collision detection algorithm based on optimization operator is proposed. By introduction of optimization operator, the search space is confined in a non-uniform local minimum area, reducing the colony search time. In the process of solving the multiple ant colony, the load balancing strategy is used to assign the sub-tasks to each processing core on multi-core processors for parallel execution. Results show that, compared with the classic I-COLLIDE, MPI and Pipelining algorithms, the proposed algorithm has better performance in solving the human-computer interaction in collision detection.

Key words: artificial intelligence; collision detection; parallel algorithm; optimization operator; balance bounding box
0 引 言

碰撞检测是计算机图形学、增强现实、人机交互等领域研究的热点问题。近几年大规模复杂场景的实时仿真受到了很多学者的关注, 尤其是云计算与大数据技术的出现, 给实时场景的仿真提出了更高的要求, 这也给研究者带来了前所未有的机遇和挑战。由于虚拟环境几何复杂性的增加, 使得碰撞检测的计算复杂性大大提高, 复杂场景的交互消耗了大量的计算机资源, 因此快速的碰撞检测问题成为了虚拟环境中的一个瓶颈[1]。如何设计出满足实时性、精确性要求的高效碰撞检测算法, 成为当前亟待解决的问题。

碰撞检测算法大致可以分为两大类:一类是基于物理空间的碰撞检测算法, 另一类是基于图像空间的碰撞检测算法。基于物理空间的碰撞检测算法, 如空间分解法和层次包围盒法。空间分解法中比较典型的有k-d树、八叉树、BSP树、空间网格等。层次包围盒法比较典型的有:沿坐标轴的包围盒(Axis-aligned bounding boxes, AABB), 包围球(Sphere)、沿任意方向包围盒[2](Oriented bounding box, OBB)和固定方向包围盒[3](Fixs directions hulls, FDH)及k-DOP包围盒。基于图像空间的碰撞检测算法, 如将图形处理单元GPU相关技术应用到碰撞检测中可以提高了碰撞检测的效率[4, 5]。这类算法主要是把复杂计算量分配给GPU减少CPU的计算负荷, 提高了碰撞检测的效率。

针对复杂虚拟空间碰撞检测实时性、精确性的要求, 本文提出了一种基于优化算子的SIMD的并行碰撞检测算法。首先引入了优化算子的概念, 采用优化算子对迭代几乎停滞的最劣子群重新初始化, 使其重新开始新的迭代搜索。将复杂虚拟空间的物体划分为若干子群, 将子群使用负载均衡技术执行SIMD并行模型。对比实验结果表明:与经典的I-COLLIDE、MPI及Pipelining等算法相比, 该算法在效率、精确性方面具有较明显优势, 可以满足人机交互中的碰撞检测实时性和精确性的要求。

1 相关知识
1.1 碰撞检测的定义

定义1 设三维几何空间为R, 用三维几何坐标系统FW表示。在FW中用FA表示模型A所占的集合, 则FAFW的子集。T={T1, T2, T3, …, Tn}为时间集, Ti表示时间集上的任意时刻, FW随着T变化的四维空间坐标系统CW, 模型A沿着一定轨迹运动够成CW的子集表示为CA。碰撞检测就判断空间坐标系统CW的子集CA是否为空集, 即 CT1CT2∩ …∩ CTn≠ ∅是否成立。这个定义在实质上给出了碰撞检测的精确描述过程, 要实现这一描述过程, 代价非常高, 解决的关键问题是四维集合CA的计算。

碰撞检测过程就是判断空间任何两个几何体之间是否存在相交的过程, 而空间几何体的划分多以三角形为主, 因此相交检测的过程就是三角形与三角形求交的过程。文献[6]提出了矢量判别法和标量判别法两种判别三角形相交的算法, 并通过实验证明了矢量判别法比标量判别法速度快7%, 本文以此算法设计了基本碰撞检测算法, 并采用k-Dop包围盒及并行化的SIMD-Dop的方法实现三角形的求交过程。

1.2 k-DOP包围盒

在碰撞检测中最常用的技术就是包围盒相交检测技术。目前常用的包围盒技术有包围球、AABB、OBB、k-DOP等, 每一种包围盒都有其各自的优缺点和适用范围。k-DOP即为离散有向多面体(Discrete oriented polyhedron, k-DOP)。

由于k-DOP的平面方向是固定的, 包围盒逼近效果比较好, 几何体重叠相交测试速度快, 所以本文选择k-DOP为碰撞检测层次中的包围体, 随着k的增大, k-DOP与物体的凸包越来越相似, 测试表明, 选k=18时具有最好的效率。如图1所示, 是一个茶杯的8-DOP示例。

图1 一个茶杯的二维8-DOPFig.1 Two-dimensional 8-DOP of a cup

1.3 建立k-DOP平衡包围盒树

k-DOP其实是介于AABB和凸包之间的包围盒, 其突出特点是只要合理地选取平行平面对的个数和方向, 就可以在碰撞检测的简单性和包裹物体的紧密性之间灵活取舍, 即紧密性要优于AABB, 而相交测试的复杂度要小于OBB。由于k-DOP包围盒间相交测试的速度是所有包围盒类型中最快的相交测试, 所以本文采用的检测包围盒选择了k-DOP包围盒。鉴于此, 本文提出了一种新的构建k-DOP平衡包围盒树的方法。具体构建方法如下:

(1)任取空间解集M={M1, M2, …, Mn}的任意两个物体MiM, MjM, 分别以Mi, Mj为根节点构建其整体k-DOP包围盒树, Mi, Mj包含组成物体所有多边形。

(2)采用文献[7]分裂平面的方法划分Mi, Mj的左右子树。

(3)使用最长轴方法确定分裂轴、分裂点, 然后确定根节点Mi, Mj中所有几何元素的中心点在分裂轴上的投影。

(4)找出最大点和最小点, 并以这两个点为中心点, 将距离投影点分为两组。若有点距两中心点等距, 则将其归入含投影点少的一组。

(5)递归执行上述过程, 直到满足线性判别函数P(x)=* Mj的递归终止条件。其中Mi=(Mi1, Mi2, …, Min), Mj=(Mj1, Mj2, …, Mjn)。Mj1, Mj2, …, Mjn为递归终止条件, 可以是包围盒树高度, 叶子节点中所含基本几何元素的最多数等, Mi1, Mi2, …, Min分别为Mj1, Mj2, …, Mjn对应的加权值。

2 算法描述及实现
2.1 平衡包围盒树的几何划分

MiM, MjM是空间解集M={M1, M2, …, Mn}的任意两个元素, 不妨设Mi, Mj是构建包围盒树的两个根节点, 按照1.3节k-DOP平衡包围盒树构造方法构造两颗平衡包围盒树。则以Mi, Mj为根节点的平衡包围盒树包含组成物体所有多边形。其划分过程如图2所示。

图2 划分为几何体的平衡包围盒树Fig.2 Divided into geometry balance bounding box tree

2.2 搜索空间

定理1 任取空间解集 M={M1, M2, …, Mn}的任意两个物体MiM, MjM, δ =D(Mi, Mj)为两个物体间距δ ≥ 0, 若两物体之间存在一特征点Mi, j(Mi, Mj), 满足D(Mi, Mj)≤ δ , 当δ = limx(minD(Mi, Mj))=0则Mi, Mj一定相交。

证明:假设Mi, Mj不相交, 则一定存在一个特征点 M-i, j( M-i, ), 满足D( M-i, M-j)≤ , 使得< δ 成立, 由于δ = limx(minD(Mi, Mj))=0, 必有< 0, 矛盾, 故定理成立。

所以在随机碰撞检测中, 若判断两个物体是否相交, 就是要判断两个物体之间是否存在一特征点Mi, j(Mi, Mj), 满足D(Mi, Mj)≤ δ 。若存在这样的特征点, 则两物体发生碰撞。Mi, Mj是两物体物体的基本几何元素包围盒特征, 它们在物体空间具有坐标属性(x, y, z), D为距离函数, δ 为距离阈值, 为了能找到满足条件的特征对集合, 本文把问题转化为一个由两模型特征对序号构成的离散二维空间中的优化问题, 并将优化算子引入蚁群优化算法求解, 从而返回模型间的碰撞点。搜索空间M是由两模型特征对任意组合形成的二维离散空间, 并且M的大小为Mi× Mj。构建的搜索空间是一个多峰值的动态空间, 这是因为在物体空间中, 发生碰撞的两个物体可能产生多个碰撞点, 把它描述在搜索空间中即是存在多个极值, 另外在搜索空间中最优解位置变化也会引起搜索空间动态变化。

2.3 优化算子

对于中小规模的应用问题, 蚁群算法可以在允许的时间范围内获得满意的解。对于大规模或超大规模多变量的求解问题, 简单的串行蚁群算法由于可能会出现早熟现象, 从而影响求解过程[8]。近年来出现了一些并行蚁群算法或将串行算法并行化[9], 其目的不只是为了缩短算法的执行时间, 更多的是为了维持群体多样性的能力, 避免算法出现早熟。

为了避免蚁群陷入局部最优解, 本文提出了优化算子的概念。

优化算子:首先将该子种群τ 0τ max初始化为τ 0max=1/ (1-ρ)Lgb, τ minmax/(2n), 式中Lgb为至此所有子种群的最优路径的长度, ρ 为种群参数, 参数的确定取决于种群。从全局最优解中心随机选出m个解, 更新信息素矩阵, 一般情况下取mM的乘积。各边信息素值按如下递归方式更新:

τij=(1-ρ)τij+ρ·k=1mckrkΔτijk(1)

其中:

Δ = (Sk)-1, (i, j)为选出的第k个解路径0, 否则

Sk表示选出的第k个解的路径长度, rk为[0, 1]之间均匀分布的随机数, ckΔ 的权重值, 由于rk的期望均值为1/2, 所以 k=1mck=2。

对于子种群参数α β ρ 采用算术交叉方式完成初始化如下:

α=k=1mckrkαk2β=k=1mckrkβk3ρ=k=1mckrkρk4

其中, rkck为初始化信息素时保留值。而α kβ kρ k则为选出的第k个解所使用的运行参数。

2.4 SIMD并行处理技术

SIMD是在单一控制部件下的多个处理单元构成的阵列, 所以有时也称为阵列处理机。SIMD技术主要用于大量高速向量或矩阵运算的场合。SIMD重复设置多个同样的处理单元(Processing element, PE), 按照一定的方式相互连接, 在统一的控制器控制下, 各自对分配来的数据并行地完成同一条指令所规定的操作。可以提高数据同时运算的效率, 这个特点使SIMD技术特别适合计算密集型的应用, 如三维游戏动画、实时仿真等。如图3所示。

图3 SIMD并行处理机模型Fig.3 SIMD parallel processor model

2.5 优化算子SIMD并行碰撞检测

(1)基于SIMD指令的k-DOP优化

k-DOP是由多组平行面定义的3D空间封闭区域。每组中的两个平行平面限定了物体在平面法向方向上的延伸范围。k-DOP提供了相对AABB更加紧凑的包围盒并且与OBB相比进行构造和整理的代价较小[10]

通过使用SIMD浮点向量保持所有数据, 我们可以使用SIMD指令对SIMD-DOP重建、整理、重叠测试进行加速, 在k-DOP包围盒树的重建、遍历、相交测试时都可以将SIMD并行指令应用在执行过程, 加速数据处理速度。

(2)基于优化算子的SIMD并行算法

两个碰撞的模型是两个特征集合, 在解空间里就是两个模型的坐标点, 判断两物体是否发生碰撞就是判断两个物体间是否有一特征对间的距离是否达到碰撞的条件。如果将每个特征集合做成一个蚁群, 就可以应用蚁群算法, 在蚁群算法中应用SIMD并行技术。

对于多种群的蚁群算法, 本文提出了一种新的可以避免过早局部收敛的算法, 使用了优化算子。算法开始执行时, 多种群蚁群都处于初始化状态, 在SIMD下并行执行, 如果某个子群陷入局部最优解, 利用信息素优化算子, 重新初始化这个子种群, 同时给出了该算法的SIMD并行实现过程。把这一算法应用到碰撞检测上, 采用了文献[10]的基于前线分解的方法。采用多进程、多线程的并行方式, 对碰撞检测任务进行细粒度分解, 对每个子任务使用负载均衡策略分配到多核处理器的各个处理核心上并行执行。

基于优化算子的并行算法具体实现过程:

Optimization Operator Collision Detection(Mi, Mj)

(1)输入空间解集 M={M1, M2, …, Mn}, 其中

M为蚁群, ∀ MiM为子群。

(2)输出∀ MiM, ∀ MjM, Mi i=1nMj=∅或Mi i=1nMj≠ ∅。其中

Mi i=1nMj=∅为存在最优路径, 有碰撞发生; Mi i=1nMj≠ ∅为不存在最优路径, 没有碰撞发生。

(3)初始化M及∀ MiM子群; 置任意两子群Mi, Mj的检测标志Mif=0, Mjf=0。

构造预检测的层次包围盒BVH:

前线节点集FV={fv1, fv2, …, fvn}

初始化堆栈LIVESMi=∅,

LIVESMj=∅;

初始化碰撞检测标志Collision

flag=FALSE。

(4)如果蚁群M=∅, 表示所有子群都检测完成, 则算法结束, 转到(7); 否则在M中删除Mif=1; Mjf=1的子群; 采用SIMD并行指令并行执行∀ MiM, ∀ MjMMif=0, Mjf=0任意两子群Mi, Mj的相交检测。

(5)采用SIMD并行多进程、多线程技术更新FV={fv1, fv2, …, fvn}; 更新检测模型的顶点坐标; 更新层次包围盒BVH。

(6)判断是否存在最优解Mi i=1nMj=∅; 如果Mi i=1nMj=∅, 存在最优路径, 有碰撞发生, Collision flag=TURE。

将检测到碰撞的两个子群压入堆栈, Push Mi, Mj to LIVESMi, LIVESMj

利用优化算子重新初始化子群Mi, Mj, 使Mif=1, Mjf=1。转到(4)。

(7)输出所有Mi i=1nMj=∅的最优路径, 即M中所有发生碰撞的解集。

如果(LIVESMi≠ ∅, LIVESMj≠ ∅)

Pop LIVESMi, LIVESMj

算法结束。

3 对比实验结果及性能分析

本文算法已经在一台HP-Z820图形工作站(2颗E5-2643V2, 六核, 3.5 GHz/32GB/2x1TB /K4000)2颗六核心CPU, E5-2643V2, 25MB三级缓存, 3 GB独立显示卡上实现。以Microsoft Visual Studio 2005, VC++为开发工具。实验环境设定了一个复杂的动态场景, 分别选取32个和1500个物体做仿真运动, 基本几何元素数(三角面片数)多于300个和90 000个。为了说明算法的性能, 我们做了如下两个实验:

实验一:时间效率分析

我们把本文提出的优化算子的并行碰撞检测算法(Optimization operator collision detection algorithm, OOCDA)与基本的三角形求交算法(Base collision detection algorithm, BCDA)、经典的I-COLLIDE算法、包围球算法SPHERE、串行算法(Serial collision detection algorithm, SCDA)做了时间复杂性、帧频及运行2000步的时间测试, 实验结果如表1所示。

通过时间复杂性对比分析可知, OOCDA算法与其他4种算法相比, 算法的时间复杂性是O(nlogn), 比BCDA好一些, 与I-COLLIDE、SPHERE、SCDA相同; 在帧频刷新上, 采用OOCDA算法, 帧频刷新可达到15.57 帧/ms, 是其它算法帧频刷新的2.3~5.7倍, 运行2000步所用的时间仅为其它经典算法的1/50~1/1.9, 算法效率有较大提高, 在检测同一场景物体的碰撞检测上用时也有所减少。

实验二:OOCDA与经典串并行算法的比较

对比实验将本文提出的OOCDA算法与经典的串行SCDA算法及另外两种并行算法MPI及Pipelining从时间效率和资源消耗两个方面进行了比较。实验结果如表2所示。其中MPI为采用文献[5]中MPI的并行碰撞检测算法; Pipelining为采用文献[6]中流水线和分治技术的并行碰撞检测算法。

表1 算法效率分析 Table 1 Analysis on algorithm time efficiency
表2 OOCDA与串行算法SCDA及并行算法MPI、Pipelining的比较 Table 2 Comparison of OOCDA with serial algorithm SCDA and parallel algorithm MPI, Pipelining

从对比数据可以看出, 本文提出的OOCDA碰撞检测算法的时间效率高于并行MPI算法, 与Pipelining并行算法几乎相同。这是因为MPI并行工作时采用多进程, 把要进行碰撞检测的物体划分为多任务, 然后分配给多处理机, 由多进程完成碰撞检测的计算任务, 除了计算需要时间外, 进程间还需要通讯, 需要花费额外的通讯时间。而Pipelining并行算法不仅在单进程中采用了多线程, 同时整个任务还采用了多进程, 因此它的效率高于MPI的并行算法, 由于本文提出的优化算子的并行碰撞检测算法也采用了多进程与多线程, 因此OOCDA算法与Pipelining算法用时几乎相近, 略高于Pipelining的主要原因是, 算法中采用了优化算子避免了蚁群算法陷入局部最优解, 优化了模型, 因此减少了算法执行时间。但Pipelining算法的主要缺点是:Pipelining的任务进程数p对算法性能有很大影响, 在实际求解时, 很难找到较合适的最佳p值, 因此算法稳定性较低。从资源消耗方面来说, 本文提出的OOCDA算法效率明显比串行SCDA效率高, 比采用多进程的并行算法MPI要节省内存空间。同时OOCDA具有可移植性强, 实现简单, 可扩展性好, 灵活支持多线程等优点。对于网络大数据间信息通讯极为方便, 同时在海量数据存取上也有优势。

4 结束语

本文提出了一种基于优化算子的并行碰撞检测算法OOCDA。引入了优化算子, 将搜索空间限定在非均匀的局部极小区域, 减少了蚁群的搜索时间。在多蚁群求解过程中, 采用并行任务的细粒度分解, 将子任务使用负载均衡策略分配到多核处理器的各个处理核心上并行执行。

The authors have declared that no competing interests exist.

参考文献
[1] 范昭炜, 万华根, 高曙明. 基于流的实时碰撞检测算法[J]. 软件学报, 2004, 15(10): 1505-1514.
Fan Zhao-wei, Wan Hua-gen, Gao Shu-ming. Streaming real time collision detection using programmable graphics hardware[J]. Journal of Software, 2004, 15(10): 1505-1514. [本文引用:1]
[2] 赵伟, 何艳爽. 一种快速的基于并行的碰撞检测算法[J]. 吉林大学学报: 工学版, 2008, 38(1): 152-157.
Zhao Wei, He Yan-shuang. Rapid algorithm for parallel collision detection[J]. Journal of Jilin University (Engineering and Technology Edition), 2008, 38(1): 152-157. [本文引用:1]
[3] 魏迎梅. 虚拟环境中碰撞检测问题的研究[D], 长沙: 国防科技大学计算机学院, 2000.
Wei Ying-mei. Research on collision detection in virtual environment[D]. Changsha: School of Computer Science, National University of Defense Technology, 2000. [本文引用:1]
[4] Govindaraju N K, Lin M C, Manocha D. Quick-ULLIDE: fast inter- and intra-object collision detection using graphica processors[J]. Proceedings of the IEEE Conference on Virtual Reality, 2005, 319: 59-66. [本文引用:1]
[5] 郑轶, 宁汝新, 刘检华, . 虚拟装配环境下快速碰撞检测方法的研究[J]. 系统仿真学报, 2005, 17(9): 2167-2170.
Zheng Yi, Ning Ru-xin, Liu Jian-hua, et al. Research on fast collision detection method in virtual assembly environment[J]. Journal of System Simulation, 2005, 17(9): 2167-2170. [本文引用:1]
[6] Xu Qiang, Lu Xiao-feng, Ma Deng-wu. A Survey of Triangle and Triangle Intersection Test[J]. Computer Simulation, 2006, 23(8): 76-78. [本文引用:1]
[7] 泥宗涛, 余英林. 基于分层包围盒的连续碰撞检测加速算法[J]. 计算机工程与应用, 2000, 36(10): 24-26.
Ni Zong-tao, Yu Ying-lin. Speeding up constant collision detection using layered bounding box[J]. Computer Engineering and Applications, 2000, 36(10): 24-26. [本文引用:1]
[8] 薛广涛, 李超, 尤晋元. 基于凸多面体剖分的并行碰撞检测算法[J]. 上海交通大学学报, 2004, 38(8): 1385-1388.
Xue Guang-tao, Li Chao, You Jin-yuan. Algorithm of parallel collision detection based on dividing a convex polyhedron to tetrahedrons[J]. Journal of Shanghai Jiaotong University, 2004, 38(8): 1385-1388. [本文引用:1]
[9] Alba E, Leguizamon G, Ordonez G. Analyzing the behavior of parallel ant colony systems for large instances of the task scheduling problem[C]//20th IEEE International Parallel and Distributed Processing SymPosium, 2005: 14-23. [本文引用:1]
[10] 赵伟, 蔡兴盛. 基于解空间划分的PSO改进算法[J]. 吉林大学学报: 理学版, 2012, 50(4): 725-732.
Zhao Wei, Cai Xing-sheng. A PSO optimization algorithm based on the solution space division[J]. Journal of Jilin University(Science Edition), 2012, 50(4): 725-732. [本文引用:1]