Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

代码示例:使用 Unreal Engine* 进行并行处理的一种方法

$
0
0
文档:下载(英特尔软件 Github)
许可:英特尔示例源代码许可协议
面向……而优化 
操作系统:Windows® 10(64 位)
硬件:需要 GPU
软件:
(编程语言、工具、IDE、框架)
Microsoft Visual Studio* 2017、Unreal Engine* 4、C#
前提条件:

熟悉 Visual Studio、Unreal Engine API、3D 图形、并行处理。

教程:Unreal Engine 4 - 并行处理鱼群

简介

该项目的理念是展示如何使用 Unreal Engine* 对游戏进行并行处理,以及如何使用游戏引擎执行与游戏相关的物理。在这个领域内,现实感是成功的一个重要标志。为了模拟真实世界,许多动作需要同时发生,这需要并行处理。代码和随附的文章(参见下面的参考文献)介绍了群集算法的开发,并通过应用以鱼群的形式展示该算法。该应用可以单线程或多线程运行,以查看性能的差异。  此外,通过在 GPU 上执行物理计算提升性能。本文还介绍了算法的整体复杂度以及增加鱼的数量对工作效率的影响。

  1. 群集算法概述
  2. 算法实施概述
  3. 单线程、多线程或 GPU

入门教程

群集算法概述

在本示例中,一个群集被定义为一群鱼。算法需要考虑每个成员的聚集、队列和分离。  如果每条鱼都与鱼群中的其他鱼均保持一定的距离,经过计算得出,该鱼在一个鱼群里“游动”。鱼群的成员只能以群集成员的身份行动,不得单独行动,它们拥有相同的参数,如速度和方向。

  • 聚集:鱼在一个被定义为“聚集半径”的范围内搜索近邻。对所有近邻的当前位置进行求和,并将结果除以近邻数量,得出近邻群集的中心。鱼需要朝着该方向游动,以实现聚集。为了确定鱼的运动方向,从之前获得的结果中减去鱼的当前位置,然后对得到的向量执行规范化。
  • 分离:鱼在一个被定义为“分离半径”的范围内搜索近邻。为了计算单条鱼在特定分离方向(相对鱼群)上的运动矢量,对近邻的位置差值和各自的位置进行求和。将结果除以近邻数量,然后进行规范化,并乘以 -1,以改变鱼的初始方向,使其朝着与近邻相反的方向游动。
  • 队列:鱼在一个被定义为“队列半径”的范围内搜索近邻。对所有近邻的当前速度进行求和,然后除以近邻数量。对得出的结果进行规范化。
  • 转向:鱼只能在特定的空间内游动,空间的边界已被指定。必须察觉鱼穿过边界的运动。如果鱼碰到边界,鱼的方向将变为相反的矢量,从而将鱼限制在定义的空间内。

对于鱼群中每条鱼,4 个基本行为原则合为一体,以计算每条鱼的总位置值、速度和加速度。必须在每一帧计算每条鱼的所有值。

在该算法中,引入了权重系数的概念,以增加或减少这 3 种行为模式(聚集、分离和队列)的影响。权重系数并未应用于转向行为,这是因为不允许鱼游到定义的边界之外。因此,转向拥有最高优先级。此外,该算法规定了最大速度和加速度

算法实施概述

使用双缓冲来计算鱼群中鱼的状态。鱼状态存储于 N x 2 大小的阵列中,N 为鱼的数量,2 为状态副本的数量。使用两个嵌套循环实施该算法。在内部嵌套循环中,针对 3 种行为类型(聚集、分离和队列)计算方向矢量。在外部嵌套循环中,根据内部嵌套循环的计算结果计算鱼的最新状态。这些计算结果也基于每种行为类型的权重系数值和速度与加速度的最大值。本文详细介绍了上述每种循环,还介绍了用于计算每条鱼位置的计算着色器。

单线程、多线程或 GPU

如前所述,示例可以在单线程或多线程模式中运行,借助 ParallelFor便可轻松实现这一目标。  取决于 isSingleThread Boolean 变量的状态,ParallelFor 可用于两种模式中的任意一种:

ParallelFor(cnt, [&agents, currentStatesIndex, previousStatesIndex, kCoh, kSep, kAlign, rCohesion, rSeparation, rAlignment, maxAccel, maxVel, mapSz, DeltaTime, isSingleThread](int32 fishNum) {

由于需要在每一帧计算每条鱼的位置和近邻的位置,增加鱼的数量将导致计算量飙升。相比单线程模式,在多个线程上运行的应用更胜一筹,这点不足为奇。通过使用 GPU 进一步分配工作,性能得到了更大的提升。再次提醒,文章更详细地介绍了上述内容。

参考资料

Nikolay Lazarev,Integrated Computing Solutions 公司,Unreal Engine 4 - 并行处理鱼群,2018 年

更新日志

创建于 2018 年 3 月 20 日


Viewing all articles
Browse latest Browse all 583

Trending Articles