使用波函数折叠算法的提示

图片

最近,我已经对基于过程约束的生成进行了很多实验。特别是使用Wave函数折叠算法(WFC,wave function折叠)。我什至写了自己的开源库统一资产

WFC是一种非常灵活的算法,尤其是在我开发的改进中。但是与此同时,我发现很难借助它来创建适用于计算机游戏的实用关卡。主要困难在于WFC没有任何全局结构。他所做的只是使输出生成在本地看起来类似于输入,例如,通过查看输出的各个小矩形。

在本文中,我将告诉您我学到了什么,以及基于限制将其提高到一个新水平的能力。

基础


如果您不知道WFC的工作原理,则很难使用它。这是一种基于约束的过程生成算法,最近受到了极大的关注。实际上,它几乎与量子物理学概念无关

WFC很容易配置-你只需要给算法为例卡,在这之后产生的新卡,看起来像原来的卡,由于反复使用它的小片段。

它有两种类型-相邻排列或元素覆盖。它可以2D或3D 格式完成,甚至可以在六边形不规则网格上完成网格。无论您如何使用算法,我的大多数技巧都适用。如果您对技术细节感兴趣,

我建议您玩这个演示以了解有关算法的知识,并阅读此介绍 [ Habré上的翻译 ]。

平铺设计


WFC算法是基于图块的。从这个意义上讲,其质量取决于您转移到其上进行工作的图块。我不是艺术家,因此我在绘制漂亮的图块时几乎无济于事(尽管您可以在此处看到),但是好的图块也需要技术知识。

行进的多维数据集


行进多维数据集是一种算法,它根据图块的每个顶点是满还是空来选择要设置的图块。这是用于2D的图块列表。


如果您构建瓷砖以使黑白角始终匹配,则红线将始终正确连接。

这里我们不需要了解整个算法,但是应该注意的是,设计仅在角落具有行为的瓷砖的想法是一种非常强大的技术。它可用于许多最好的图块集,因为它可以确保图块始终保持良好的连接。

此技术对于WFC尤其强大。确实发生了,因为如果您错过了一些图块,那么WFC没关系。他将规避此问题,并且永远不会创建需要缺少图块的配置。这对于3D十分方便,因为存在许多潜在的图块,并且仅在非常困难的情况下才需要其中的一些图块。请参阅下面的“基础”部分,在该部分中,我将更广泛地使用此技巧。

知道其他平铺模式也可能会有所帮助,但是进行多维数据集是最好的。

房间


有时,使用简单的图块集最容易。4张瓷砖(其中一张瓷砖是空的)的这种组合很容易生成方形房间。



通过改变每个瓷砖的重量,可以轻松地改变房间的大小。添加门砖和走廊砖后,您可以创建人们平面布置图特有的多样性。

基础


使用WFC时,尝试磁贴集会很有趣。如果仅放一块瓷砖,WFC就会从剩余空间中挤出最大的空间。有时,这会导致截然不同的结果,如Maxim Gumin的图像所示:


我们可以使用这种行为来刺激WFC生成许多可识别的结构。

这是一座城堡的示例(受@greentecq启发):


在其中,我使用了以下图块集:


这些图块具有重要的属性-底部的所有图块的宽度均不小于顶部的宽度。这意味着不可能以不受支持的方式构建这些图块。WFC立即对此做出回应,并创建了具有良好基础的建筑物。

分形近似


通过选择适当的图块集来研究刺激某些行为的主题,我发现如果图块集由直的道路和分支组成,但是没有拐角,那么您可以很好地近似于递归拆分(没有“递归”部分)。这对于网格级别来说是相当不错的。

大瓷砖


您可以添加WFC来支持比常规图块大几倍的图块。例如,我的Tessera插件支持该功能

大瓷砖可以多种方式使用。由于它们超出了网格的边界,因此可以使用它们来添加比捕捉网格时通常更平滑和更宽的曲线。它们也适用于大量图块中的元素,或者只是掩盖了基于图块的生成。

这是从Bad North 游戏中向Oscar Stalberg学习的示例。奥斯卡(Oscar)展示了他是如何使用大瓷砖来增加平滑弯曲的海岸,大房子和悬崖易变性的。


局限性


WFC的核心是基于约束的算法。这意味着他寻求生成与一组特定标准相对应的级别。在纯WFC中,只有一个标准-水平在本地看起来像样本输入。下面,我将讨论WFC增强功能以​​添加新类型的限制。

固定瓷砖


在WFC中生成关卡之前,很容易修复单个图块。后来,它们与生成的级别无缝集成。


生成之前


生成后

可以多种不同方式使用此技术。这里有一些想法:

  • - , WFC .
  • ,
  • / WFC



限制路径(路径约束)-这是我对WFC的贡献。这是一项非常强大的技术,但是完整的文章很可能需要单独的文章。

此限制会全局扫描所有生成的输出,并强制指示在标记的图块之间必须经过路径。换句话说,它告诉瓦片的一个子集形成图的单个组件。由于其全球性,它补充了通常只考虑本地图块的WFC行为。

我发现添加此限制会严重影响生成级别的外观。没有它,WFC经常会生成几个看起来不切实际并且不是人为创造的分隔房间或区域。





. .


限制路径的另一种情况是绘制路径。默认情况下,路径限制仅确保图块之间存在路由。它不能保证路径尽可能的简单。因此,在河流和道路的情况下,他经常在可选位置绘制T形接头。诀窍是要么简单地移除所有T型接头的瓷砖,要么给它们一个很轻的重量,以便仅在紧急情况下才选择它们。

我喜欢使用固定的图块来固定路径的端点。因此,需要路径限制来插入使其余路径连接的图块。


通过固定四角为路径的终点产生的路径,

如果你想与路径进行实验,然后我有一个设计了一个小型的JavaScript演示这里

多元化


替代瓷砖


向WFC算法添加平铺选项非常容易。只需将图块添加到可能的图块列表中,使其与替换的图块具有相同的连接即可。或者也可以在后处理阶段完成,就像通常在其他样式的过程生成中一样。


两块墙面瓷砖,其中一个带有窗户。它们是完全可互换的,并且仅增加设计的可变性。

平铺瓷砖的可变性


如果您花很多精力来创建拼贴设置设计,您会发现WFC的随机性开始伤害他。它使用了整个图块,也就是说,您可以获得混合了熔岩,雪和沙漠的关卡。通常,这看起来完全不合逻辑。

您可以通过一种简单的方法恢复完整性:预先确定级别属于哪个生物群落,然后禁用所有不适合该生物群落的图块。

Bad North(再次)是一个很好的例子。在某些层次上,岩石是完全被禁止的,在另一些层次上,则有很多植被,在第三处遗址中增加了墓地。这为每个级别提供了独特的样式,而无需对生成样式进行重大更改。


在右上角可见的岛屿中,只有约10%具有洞穴元素。

地图中图块的变异性


混合磁贴甚至可以走得更远。

如果使用WFC生成大卡,则它看起来非常统一。这是该算法是局部约束的求解器这一事实的另一个结果

我在《凯夫的洞穴》游戏中看到了解决此问题的最佳方法在开发者的关于代(故事12),他们说他们的地图划分成不同的区域,然后与用于地图的子集独立参数开始WFC。这意味着在地图上可能存在一片废墟区域和一个城市区域,在其中使用了完全不同的模板和图块。


游戏开发人员的数学 示例:使用“ Qud of Cad”中的波动函数折叠生成基于图块的地图

结论


与所有基于约束的生成技术一样,WFC算法的原理是谨慎满足您的需求易于自定义并获得漂亮的结果,但是要实现游戏所需的特定细节可能非常困难。

我希望我介绍的技术可以帮助您驯服这个怪物,但最后,最好是基于程序生成的优势来创建游戏设计,而不是试图迫使它为您创建太多游戏。

我建议您扮演Bad NorthCaves of Qud两种游戏都是在真实条件下使用WFC的绝佳示例,并且开发人员已经深思熟虑了在其游戏中算法的最佳使用。

All Articles