我们生成图块级别并向玩家隐藏方块


未开发2中的关卡生成


我们为未开发2游戏关卡生成器感到非常自豪,这是一个可以满足所有现代要求的程序。 在一篇文章中,我将讨论如何创建游戏关卡。

我们不必重新发明轮子。 在“未探索1”中,我们已经创建了对第一款游戏的成功产生重大影响的技术。 Unexplored 2继续了所开始的工作。 我们技术的基础包括两个部分:我们使用多阶段生成,几乎模拟了一个与生活水平设计师的工作非常相似的过程。 最重要的是,我们使用了一种称为“ 循环地牢生成 ”的技术,该技术比大多数标准的可生成内容创建应用程序在生成自然外观方面要好得多。 在这篇文章中,我将讨论第一个方面。 将循环地下城的生成适应于Unexplored 2将是未来帖子的主题。

模仿“人类”关卡设计


电平生成器将电平生成过程分解为一组受控阶段。 它从高级计划到低级详细地图。 实际上,他首先创建了一个关卡的草图,然后开始添加细节,直到关卡完成并填充为止。

在此过程的每个阶段,我们都使用生成语法来转换先前阶段中生成的级别。 特别是,我们使用图块文法和图文法,它们是更通用的字符串文法的变体,它们像正则表达式一样,简单地用其他字符串搜索和替换部分字符串。 如果您不熟悉生成语法和正则表达式的概念,那么建议您在Internet上搜索示例(或继续阅读-您不需要深入的知识就可以了解本文的含义)。

该级别的第一阶段相对简单。 我们使用低分辨率位图来定位关卡的基础。 在下面的示例中,该级别最初非常简单:它仅包含左侧的入口(e),右侧的入口并连接直接路径。 由于其他大多数图块位于关卡的边缘,因此它们是未定义的(u)或已阻止的(B)。


图1:关卡的简单草图

在下一阶段,将添加详细信息:出现一组房间,这些房间由大门连接,旨在朝某个方向通过:


图2:添加的结构

平铺地图非常适合创建关卡几何图形,但是使用图形生成结构和游戏逻辑更为实用。 这是生成器接下来要做的:


图3:基础图

在图中,一些节点包含子节点,在我们的情况下,大多数门被标记为危险(H),有些门被标记为打开(O)。

基于相当简单的分析和生成规则,将新元素添加到图中。 例如,终点(G)位于距入口足够远的位置。 此外,图中还添加了一些小危险,以使级别更具威胁性。


图4:新项目添加到图中。

同时,使用多个噪声函数将低分辨率切片图转换为高分辨率切片图,以使其看起来更自然:


图5:高分辨率平铺图

然后,将来自图的信息用于装饰图块地图并添加新元素:


图6:装饰的磁贴卡。

生成的地图仅用于在游戏过程中呈现。 白色图块表示开放空间,几乎所有其他图块表示非常具体的游戏元素,例如,穿过灌木丛的秘密通道(绿色圆圈),“灌木丛中的大门”(绿色方块和淡紫色条纹)或用于绑树的产卵场所(红色圆圈带有字母s)。 该关卡的主要部分仍未定义,在这一阶段,生成器假定应填充这些区域,以阻止玩家的移动。

他在几层上执行此任务:较低的层指示高度和表面类型,第二层指示在某些位置添加水,第三层指示植被和其他装饰。


图7:地球表面类型(草,泥和石头)


图8:水


图9:植被和其他装饰品

然后将这些层添加到最终级别的数据文件中,并在其中添加更多详细信息。 游戏使用这些数据来放置资产并按照您所看到的方式构建关卡。 在此阶段有很多技巧。 例如,您可能会注意到上图中的地砖具有奇怪的形状。 这些表格用于创建地面“平铺”,以使玩家不会注意到源数据是平铺地图。 我将在文章的第二部分中对此进行讨论。


图10:就绪级别

添加游戏


此级别生成方法有很多好处。 将级别转换为图形的阶段特别重要,以简化生成器对游戏玩法的“推理”。 在上面显示的示例中,我们没有执行任何操作,只是要验证是否在距输入一定距离处创建了级别目标。 但是对于这些阶段的其他级别,将执行更多任务。

以更经典的地牢风格的洞穴地图为例(与上例中的森林水平相比)。 该级别的基础图只有一个入口和几个新的门类型。 它们中的一对是关闭的(L):有些门从一侧(T)夹住玩家,而深绿色则称为“阀门”:这种类型的门仅允许玩家朝一个方向移动。


图11:洞穴的基本数量

该级别的结构使生成器可以执行更复杂的任务。 例如,达到此级别的唯一方法是通过“阀门”,迫使玩家寻找另一种出路。 打开出口的钥匙(左下方)位于危险区域的左上方,目标位于诱捕玩家的大门之后。 这样的目标的一个例子是在玩家身后塌陷的一段。 通常,这会创建一个值得自己探索的洞穴,但是Unexplored 2也可以添加在运行时融合的生物和事件。


图12:添加到洞穴的锁和钥匙

使用上述过程,该图用于生成和填充完整详细的图块图。 反映此级别洞穴性质的各种参数的应用会导致非常不同的结果,包括破坏的地下结构(带有字母c的蓝色正方形)和带有尖峰的深渊(淡紫色圆圈):


图13:详细的洞穴水平

总结一下


我希望您对我们如何在Unexplored 2中进行关卡生成有一个大致了解。这是一个复杂的多阶段过程,我计划在不久的将来对此进行详细介绍。 至少我已经答应过您要写有关循环地牢生成的应用程序。 但是,从生成的讲故事技术,渲染线条和着色方法到我们用来创建运气系统的冗长的设计过程以及其他方面,您可以了解更多。

第2部分。从图块到曲线,或从Voronoi计数中受益



未开发2内容生成器生成图块地图。 典型结果如下所示:


这些磁贴卡彼此堆叠,并使用不同的磁贴指示地球表面的类型(在此示例中为草皮或泥土)以及各种装饰。 在这种情况下,有几个灌木丛(绿色大圆圈),石头(黑色圆圈),植物(绿色小圆圈),花朵(白色圆圈)和装饰纹理(灰色方块)。 还有一些特殊的磁贴指示游戏数据,例如,标有字母“ s”的生成点。 此外,可以在图块上标记其他信息,例如,高度级别或特殊子类型。

切片图是一种便于生成器使用的数据结构。 但与此同时,这非常简单,并且网格在游戏中通常很明显。 但是,将数据加载到游戏中并放置资产后,结果如下所示:


我认为我们很好地隐藏了瓷砖,这就是我们得到它的方式。

沃罗诺伊魔术


诀窍是各个图块对应于Voronoi图中的单元。 此图可用于生成看起来更自然的形状。 Voronoi图是通过将平面与随机点一起播种并将其划分为像元而创建的,以使平面上的每个点都属于对应于最接近起点的像元。 在过程内容生成中,可以通过几种有趣的方式使用Voronoi图。

典型的Voronoi图是根据生成点的随机但相当均匀的分布创建的,如下所示:


在“未探索2”中,我们使用了另一种生成点分布。 首先,我们为每个图块生成一个点。 因此,我们可以确保图块地图上的每个图块将对应于Voronoi图中的一个单元。

如果我们将生成点放置在每个单元格的中间,我们会得到一个看起来像瓷砖地图的直线网格(对于下面的图像和其他图像,我制作了一个国际象棋版本,其中一半的瓷砖变为黄色,以便您可以做得更好一些)查看模式):



最简单的方法是通过简单地随机化每个生成点的位置来改进图表。 移动点时,值得检查的是该点没有超出原始图块。

结果看起来像这样:



已经更好了,但是非常嘈杂,因此不会产生漂亮的缠绕线。 可以通过执行Voronoi图的“松弛”来改善图片(这是对它们的标准技术,在此不再赘述)。 但是它仍然总是有点嘈杂,并且难以有效地预测超出单个图块的比例的数字。

为了解决这个问题,我们不仅需要随机移动,而且需要更智能地进行处理。 不同类型的运动可以产生非常不同的效果。 例如,当使用Perlin杂讯时,会得到有趣的弯曲瓷砖卡。 或者,您可以通过将生成点的第二行向左移动来将整个网格变成六边形图块:



当我们开始以某些方式移动生成点以创建圆角时,我们取得了真正的突破。 该过程的第一阶段已经在级别生成器内部执行。 识别不同类型的地球表面之间的角度,并用不同的数字标记边角瓷砖,以指示它们变形以生成更美丽环境的方式:


在这种情况下,高程水平的差异也会导致角度出现在图块地图上。 这就是为什么在草木的右上角和左下角会看到其他圆角的原因,这些地方是生成坡度的原因。

游戏使用此信息来移动Voronoi图的生成点。 每个圆角都会移动起点的位置(请参见下图)。 此外,它还会移动其四个正交邻居的生成点。 这个过程是累积的; 如果生成点接近多个角度,它们可以移动几次。 但是,在处理完所有偏移之后,生成点会稍微随机化(每个方向上大约为图块宽度的10%),并且最终偏移量最大不得超过图块宽度的40%。


结果已经获得了相当高的质量:



但是我们还没有完成...

明智地装饰


整体形状变好了,但是边缘仍然非常笔直,看上去有点锯齿。 我们将通过在颜色不同的边缘放置弯曲的资产来隐藏它。 但是,真正的技巧是一条曲线通常放置在两条边缘上,并且它们相对于彼此的角度用于确定曲线的方向。


结果看起来像这样:


接下来,我们使用3D资源添加纹理剪裁:


最后,我们添加另一个资产来填充级别。 这些资产的位置由先前生成的级别数据确定,并且通常遵循简单的原则。 我们使用大型资产周围的小型资产来创建自然而优美的过渡。 特别是,值得注意的是,在悬崖脚下添加了石头,从而创造了可变性并在视觉上软化了游戏玩法所需的垂直坡度:


局部变异


角度并不是我们使用的唯一位移类型。 特别是,我们希望在人造结构旁边使边缘更直(例如,如下所示的已破坏的墙):


在我们的系统中,这种效果很容易实现。 我们仅添加了另一个置换规则,该规则禁止人造结构瓷砖的置换。 生成器使用小方块标记此类图块,并且游戏确保所有偏移都被忽略:



如果看地面,您可以清楚地看到某些区域是笔直的,而其他区域则更自然地弯曲:


不漂亮吗

使用此技术可以轻松添加其他规则。 例如,有时我们强迫瓷砖创建六边形图案,以使狭窄的路径保持足够的宽度以在其周围移动。 我相信我们会为其他模式找到其他用途。

这是我喜欢Voronoi图的众多原因之一。 下次,我将介绍我们如何使用它们来生成和装饰Unexplored 2世界地图。

Source: https://habr.com/ru/post/zh-CN457766/


All Articles