• 新优seo

    扫面微信二维码,及时联系我们

统一大场景FPS迷宫生成与优化技术

摘要:场景编程生成技术是游戏开发中广泛应用的技术。早前在***游戏暗黑破坏神系列中使用过,无论是***代、第二代还是第三代,如图1-1所示:每次进入野外场景时都能看到随机场景(随机地形、随机怪物、随机宝藏点)。

统一大场景FPS迷宫生成与优化技术

场景编程生成技术是游戏开发中广泛应用的技术。早前在***游戏暗黑破坏神系列中使用过,无论是***代、第二代还是第三代,如图1-1所示:每次进入野外场景时都能看到随机场景(随机地形、随机怪物、随机宝藏点)。

另一个***的游戏是手机游戏“国王之战”。这个游戏中的世界地图也是通过编程生成的。如下图1-2所示,在移动窗口中只能看到这个巨大地图中的一个小点。程序将随机生成山、湖等景观,外加资源点、怪物等。

还有一个游戏中技术点最多的游戏使用编程场景生成技术。它的名字是MyWorld,如图1-3所示。游戏世界是由大量的正方形组成的。一开始逻辑似乎比较简单。事实上,为了产生一个高保真的场景,让游戏在每部手机上都能顺利运行,就需要大量的老公工作。

我们正在制作一个FPS游戏项目,它也使用了编程生成场景的技术,如图1-4所示。本文的主要内容是介绍在FPS游戏项目中如何用程序生成迷宫场景以及如何优化迷宫场景的显示。

首先,对项目的规划目标提出了明确的要求,要生成一个更加复杂的迷宫,纵横通道和房间交错的地下场景,每次玩家进入场景进行交互时,场景必须不同,但我们可以控制场景的大小等一些自定义参数。我们测试了几种常用的迷宫生成算法,具体如下:

这些算法的实验过程相对简单。利用该算法生成随机迷宫,然后根据数据统一以简单的方式画出整个迷宫。***,让计划者比较并选择哪个算法是项目最希望的迷宫。本文将逐一介绍。

下图2-1显示了一个30*20的迷宫的初始化视图,其中白色网格表示房间,黑色网格表示墙壁。因为没有后续的迷宫算法被处理过,所以每个房间都被一堵墙隔开,不能通过。本文提出的三种算法都是在这样的初始状态下,通过不同的方向打开房间,得到最终的迷宫。

递归分割算法的效果如图2-2所示:

与其他两种算法一样,递归分割算法首先继承了常用的父类mazegenerator,定义了迷宫的基本数据结构、迷宫尺度和根据迷宫数据绘制场景的成员函数genmazescene。代码如下,其中int[,,]mmazedata的三维数组是要生成的迷宫数据。前二维下标分别表示行和列,第三维下标表示

然后给出了递归分割算法的代码。它的主要代码是RecursiveDiv,它是一个递归函数。可以理解为:将整个迷宫作为一个大房间,将当前房间递归地分成4个小房间,随机打开其中的3个,直到要分割的房间是一个基本的房间单元。代码如下

深度优先算法得到的迷宫场景,主干道较为明显,支路较少且较浅,如图2-3所示:

相应的核心代码如下。与递归分割算法不同的是,加入房间堆栈来记录访问的房间(访问序列的路径)。

prim算法的效果如下图2-4所示。与前两种算法相比,该算法的分支较多,步行难度***。

除了矩形迷宫,还可以使用prim算法实现六边形迷宫。算法思想与四边形迷宫基本相同。下面是六边形迷宫的渲染:

prim算法的具体实现代码如下。其主要思想类似于深度优先算法,但它不是要找到一个没有被访问过的房间,而是要找到一个已经被访问过的房间。如果发现一条死路径,不是要返回上一个路径点,而是在周围房间随机进行处理。

在上述数据生成的基础上,将各种迷宫场景组件与程序相结合,完成FPS项目中的迷宫。我们首先规划了几个迷宫组件,比如描述四条路径的迷宫组件,如图3-1所示:

该部分艺术制作完成后,导入unity,然后为每个部分创建一个场景,导入场景进行灯光设置,然后进行静态烘焙,计算并生成物理碰撞数据,***根据子场景部分填写场景部分配置表,加载并显示在程序代码中。

各迷宫构件的碰撞信息由BVH树保存。每个迷宫组件分别生成自己的BVH树,以提高碰撞检测的效率。下面介绍BVH树的算法流程:

获取每个对象的三角形并将它们放入集合中

2基于集合构建BVH根节点

4shake(shake树:删除没有三角形的叶节点)

BVH树的分割过程如下图4-1所示。从根节点开始,将场景分成八个部分,然后遍历根节点中包含的三角形列表。三角形根据自己的位置存储在每个子节点中,然后继续递归,直到可以分配***深度或没有三角形为止。

由于迷宫场景是一个大规模的场景,我们需要在考虑运行平稳的前提下,尽量减少内存和CPU、GPU的占用。

首先,场景的静态碰撞数据,因为它是一个具有帧同步的网络游戏,需要加载到内存中以保证平滑性。加载过程包括先加载原始碰撞信息,然后旋转并转换到相应的迷宫场景。

然后是子场景处理。为了保证操作的顺利进行,并且由于每个子场景的数据量不大,在需要显示子场景时,首先进行预加载,避免加载延迟

对于子场景的显示优化,其主要思想是尽量不显示不可见的房间,因此可以使用以下算法:

2如果某一方向的遍历层数达到设定的***层数,则遍历也停止

算法的渲染如5-1所示,只显示播放器周围可见的房间,以减轻显卡的负担。

***是碰撞检测的优化,因为我们为每个子场景建立了BVH树,所以在进行碰撞检测时,可以节省更多的CPU负载。接下来,以光线碰撞检测为例说明算法流程

大规模场景生成技术是一项比较广泛的技术,很多知名游戏都在使用,因为每种类型的游戏特点不同,而使用的具体实现和优化方法也不同。本文介绍了FPS迷宫鸡食游戏项目的实际制作方法和优化方法,包括迷宫数据的生成、迷宫组件的制作、迷宫显示的优化等。

今后,我们将介绍其他几种典型的游戏场景生成算法和优化方法,敬请期待!

现在为所有技术爱好者,收集优秀的原创技术文章,并将为您提供一个反应堆展示平台。

期待您的分享!