WaveFunctionCollapse

2025-12-11 0 169

WaveFunctionCollapse

该程序生成与输入位图本地相似的位图。

当地的相似性意味着

  • (C1)输出应仅包含输入中存在的像素的那些NXN模式
  • (弱C2)输入中NXN模式的分布应类似于在足够数量的输出上NXN模式的分布。换句话说,满足输出中特定模式的概率应接近输入中此类模式的密度。

在示例中,典型的n为3。

WFC以完全未观察到的状态初始化输出位图,其中每个像素值都在输入位图的颜色叠加中(因此,如果输入是黑色和白色,则以不同的灰色阴影显示未观察到的状态)。这些叠加中的系数是实数,而不是复数,因此它不执行实际的量子力学,而是受QM的启发。然后该程序进入观察范围:

  • 在每个观察步骤中,选择了最低的香农熵的未观察到的NXN区域。然后,该区域的状态根据其系数和输入中NXN模式的分布崩溃。
  • 在每个传播步骤上,从上一步的崩溃中获得的新信息通过输出传播。

在每个步骤中,非零系数的数量减少,最后我们具有完全观察到的状态,波函数崩溃了。

在传播过程中,某个像素的所有系数都变为零。这意味着该算法已经陷入矛盾,无法继续。确定某个位图是否允许其他非平凡的位图满足条件(C1)的问题是NP-HARD,因此不可能创建一个始终完成的快速解决方案。但是,实际上,该算法遇到了矛盾,这很少。

波功能崩溃算法已在C ++,Python,Kotlin,Rust,Julia,Go,Haxe,Java,Clojure,Free Pascal,Dart,Dart,P5JS,JavaScript,Javascript,JavaScript,Javascript,javascript,javaScript,javaScript,javascript,javaScript,javascript,并适应Unity,Unity Engine 5和Houdini。您可以从源构建WFC,下载用于Windows的正式版本,从iTch.io下载交互式图形版本或在浏览器中运行。 WFC在Bad North,Qud洞穴,Dead Static Drive,Town -Eccaper,Matrix Aukens,几个较小的游戏和许多原型中产生水平。它导致了新的研究。有关更多相关工作,解释,交互式演示,指南,教程和示例,请参见端口,叉子和衍生部分。

观看YouTube上WFC算法的视频演示:https://youtu.be/doqtr2xmlz0

算法

  1. 读取输入位图并计算NXN模式。
    1. (可选)通过旋转和反射增强模式数据。
  2. 创建一个带有输出尺寸的数组(在源中称为“波”)。该数组的每个元素代表输出中NXN区域的状态。 NXN区域的状态是带有布尔系数的输入的NXN模式的叠加(因此,输出中像素的状态是具有实际系数的输入颜色的叠加)。错误的系数意味着相应的模式是禁止的,真实系数意味着尚未禁止相应的模式。
  3. 在完全未观察到的状态下初始化波的初始化,即所有布尔系数都是正确的。
  4. 重复以下步骤:
    1. 观察:
      1. 找到具有最小非零熵的波元件。如果没有此类元素(如果所有元素的熵为零或未定义的熵),请打破周期(4)并转到步骤(5)。
      2. 根据其系数和输入中NXN模式的分布,将此元素塌陷为确定的状态。
    2. 传播:在上一个观察步骤中获得的传播信息。
  5. 到目前为止,所有波元件都处于完全观察到的状态(除一个系数为零以外的所有系数)或矛盾状态(所有系数为零)。在第一种情况下,返回输出。在第二种情况下,完成工作而没有归还任何东西。

tilemap生成

该算法的最简单的非平凡情况是当nxn = 1×2(嗯,nxm)时。如果我们通过存储多对颜色的概率,而是颜色本身的概率来进一步简化它,我们会得到我们所谓的“简单瓷砖模型”。该模型中的传播阶段只是邻接约束的传播。用瓷砖列表及其邻接数据(可以将邻接数据视为大型样本集),而不是样本位图初始化简单的瓷砖模型,这很方便。

实际瓷砖中所有可能的相邻瓷砖对的列表可能很长,因此我实现了一个对称系统来缩短枚举。在此系统中,每个图块都应用其对称类型分配。

请注意,瓷砖具有与分配的字母相同的对称类型(或者,换句话说,二面体组D4的动作是瓷砖及其相应字母的同构)。使用该系统,只需列举仅到对称性的相邻瓷砖对,这使得瓷砖集的邻接列表具有许多对称的瓷砖(甚至是夏季瓷砖,尽管图纸都不对称,但系统仍将这些瓷砖视为对称的瓷砖几次)。

请注意,对于WFC而言,不受约束的结瓷砖(允许所有5个瓷砖)并不有趣,因为您无法遇到无法放置瓷砖的情况。我们将带有此属性的瓷砖称为“简单”。如果没有特殊的启发式言语,轻松的瓷砖将不会产生有趣的全球布置,因为易于瓷砖的瓷砖的相关性很快就会随着距离而掉落。可以在Guy Walker的网站上找到许多简单的瓷砖。考虑那里的“双” 2边瓷砖。在变得容易的同时,它如何产生结(没有t缝线,并不容易)?答案是,它只能产生狭窄的结,它不能产生任意的结。

还请注意,电路,夏季和房间瓷砖是非瓦的。也就是说,它们的邻接数据不能从边缘标签中诱导。例如,在电路中,两个角不能相邻,但是它们可以与连接图块连接,并且对角线轨道无法改变方向。

较高的尺寸

较高维度中的WFC算法的工作方式与维度2中完全相同,尽管性能成为一个问题。这些体素模型是使用N = 2使用5x5x5和5x5x2块重叠的瓷砖模型生成的,以及附加的启发式方法(高度,密度,曲率,…)。

较高的分辨率屏幕截图:1、2、3。

Markovjunior存储库包含具有许多瓷砖和示例的3D简单瓷砖模型的实现。

约束合成

WFC算法支持约束。因此,它可以很容易地与其他生成算法或手动创建相结合。

这是WFC自动完成一个由人开始的水平:

Convchain算法满足条件的强大版本(C2):其产生的输出中NXN模式的极限分布与输入中模式的分布完全相同。但是,Convchain不满足(C1):它通常会产生明显的缺陷。首先运行刺激链以获得采样精良的配置,然后运行WFC以纠正本地缺陷是有意义的。这类似于优化的共同策略:首先运行一种蒙特卡洛方法,以找到接近全局最佳距离的点,然后从该点运行梯度下降以提高准确性。

PF Harrison的纹理合成算法的速度明显比WFC快得多,但是在长时间相关性方面存在麻烦(例如,该算法很难合成具有正确对齐的砖块的砖墙纹理)。但这正是WFC闪耀的地方,哈里森的算法支持约束。首先,使用WFC生成完美的砖墙蓝图,然后在该蓝图上运行约束纹理合成算法。

评论

为什么最小的熵启发式?我注意到,当人类绘制某些东西时,他们经常遵循最小的熵启发式启发式。这就是为什么算法如此有趣的原因。

重叠模型与简单的瓷砖模型相同的方式相同,高阶马尔可夫链与一个马尔可夫链有关。

WFC的传播阶段与循环信念传播算法非常相似。实际上,我首先对信仰传播进行了编程,但随后切换到保存的固定分布的约束繁殖,因为BP没有大规模并行化(在CPU上)明显较慢(在CPU上),并且在我的问题中没有明显更好地产生更好的结果。

请注意,“简单结”和“技巧结”样品具有3种颜色,而不是2种颜色。

维度之一可能是时间。特别是,D维WFC捕获了任何(D-1)维细胞自动机的行为。

二手工作

  1. Alexei A. Efros和Thomas K. Leung,非参数采样的纹理综合,1999年。 WaveFunctionCollapse是一种纹理综合算法。与早期的纹理合成算法相比,WFC保证输出仅包含输入中存在的那些NXN模式。这使得WFC非常适合游戏和像素艺术的水平发电,并且不适合大型全彩色纹理。
  2. Paul C. Merrell,模型合成,2009。Merrell从示例模型中得出瓷砖之间的邻接约束,并使用AC-3算法生成新的较大模型。我们概括了他与NXN合作的方法,而不是单个瓷砖重叠的模式。这允许将单个图像用作算法的输入。通过改变n,我们可以使输出看起来更像输入或更少。我们介绍了最低的熵启发式启发式启发式,该启发式启发术,它定义为不规则的网格定义,并且更适合于预先约束的问题。我们实施一个瓷砖对称系统,以减少输入的大小。我们以颜色平均或人均投票来形象化部分观察到的状态。梅雷尔还引入了一种逐步修改模型以降低故障率的方法(我们在这里不使用)。最近,作者创建了一个用于模型合成和已发布代码的页面。
  3. 艾伦·麦克沃思(Alan K.目前,它使用了Roger Mohr和Thomas C. Henderson的AC-4算法,1986年。
  4. 保罗·哈里森(Paul F.作者通过标记其边界并使用回溯搜索来填充TileMap来定义瓷砖的邻接数据。该算法的演示在网络上可用。

如何构建

WFC是仅取决于标准库的控制台应用程序。获取Windows,Linux或MacOS的.NET核心并运行

 dotnet run --configuration Release WaveFunctionCollapse .csproj

生成的结果将保存到output文件夹中。编辑samples.xml以更改模型参数。

另外,将社区的构建说明用于相关问题的各个平台。凯西·马歇尔(Casey Marshall)提出了一个拉动请求,该请求使使用该程序更方便,并包括SNAP包装。

著名的端口,叉子和衍生

  • Emil Ernerfeldt制作了C ++端口。
  • 麦克斯·艾勒(Max Aller)制作了kotlin(JVM)图书馆,Kollapse。约瑟夫·罗斯科普夫(Joseph Roskopf)在优化的2018年版本中逐行乘线kotlin端口。埃德温·雅各布斯(Edwin Jakobs)制作了一个支持3D示例的Kotlin库。
  • 凯文·教堂(Kevin Chapelier)建立了一个JavaScript端口。
  • OskarStålberg编程了3D瓷砖模型,这是一个2D瓷砖模型,用于在球体上的不规则网格,并为它们构建美丽的3D瓷砖:1,2,2,3,4,4,5,6,7,7,8,9,9,11,11,11,11,12,12,13,13,14,15。
  • 约瑟夫·帕克(Joseph Parker)将WFC改编成Unity,并使用它在Proc Skater 2016游戏中产生滑板场,2017年游戏Swapland中的出色高原和平台水平在2018年游戏中使用枪支。
  • 马丁·奥利里(Martin O\’Leary)将类似WFC的算法应用于诗歌一代:1,2,3,4。
  • 尼克·内诺夫(Nick Nenov)根据我的城堡瓷砖制作了一个3D素瓦片。尼克在瓷砖模型中使用文本输出选项重建了Cinema 4D中的3D模型。
  • 肖恩·莱夫勒(Sean Leffler)在Rust中实现了重叠的模型。
  • RID5X正在制作OCAML版本的WFC。
  • 我制作了重叠模型的交互式版本,您可以从wfc itch.io页面下载GUI可执行文件。
  • Brian Bucklew建立了一条水平的生成管道,该管道将WFC应用于Qud游戏的多个通行证:1、2、3、4、5、6、7、8、9、10、11、11、11、12、12、12、13、14、15、16、17、18、19、19、20、21、2222。
  • 丹尼·温恩(Danny Wynne)实施了3D瓷砖模型。
  • Arvi Teikari用LUA的熵启发式编程了一种纹理合成算法。母学位将其移植到与Löve一起工作。
  • 艾萨克·卡斯(Isaac Karth)成为重叠模型的Python端口。
  • OskarStålberg制作了在浏览器中运行的瓷砖模型的交互式版本。
  • 马特·里克斯(Matt Rix)实施了3D瓷砖模型(1、2、3、4),并制作了一个3维瓷砖模型,其中之一是时间(1、2、3、4、5)。
  • 尼克·内诺夫(Nick Nenov)对瓷砖对称系统进行了视觉指南。
  • 艾萨克·卡斯(Isaac Karth)和亚当·史密斯(Adam M. Smith)撰写了一篇论文(开放访问链接),其中他们研究了回溯和不同可能的启发式方法在WFC中的作用,对全球约束进行了实验,并将WFC与VQ-VAE结合在一起。在2017年初,作者写了一篇研讨会论文,在其中将WFC作为ASP问题,使用一般约束求解器克林戈生成位图,跟踪WFC的历史记录并对算法提供详细的解释。
  • Sylvain Lefebvre进行了3D模型合成的C ++实现,描述了设计样本的思维过程,并提供了一个示例,其中相邻约束确保连接输出(可步行)。
  • 我将3D WFC概括为与立方体对称组合作,并制作了一个生成Escheresque场景的瓷砖。
  • 有许多方法可以看到部分观察到的波状态。在代码中,将可能选项的颜色值进行平均以产生产生的颜色。 OskarStålberg显示了部分观察到的状态是半透明的盒子,其中该盒子对于具有更多选择的状态更大。在体素设置中,我以人均投票可视化波状态。
  • 雷米·德沃(Remy Devaux)在PICO-8中实现了瓷砖模型,并写了一篇有关WFC解释的相干数据的文章。
  • 对于即将到来的游戏,Bad North OskarStålberg使用了一种启发式方法,该启发式试图选择这样的瓷砖,以使所得观察到的区域在每个步骤中都是可导航的。
  • 威廉·曼宁(William Manning)在C#中实施了重叠模型,其主要目标是使代码可读,并提供了WPF GUI。
  • 约瑟夫·帕克(Joseph Parker)为Procjam 2017撰写了WFC教程。
  • 阿曼·蒂瓦里(Aman Tiwari)将连通性约束作为克林戈(Clingo)的ASP问题。
  • Matvey Khokhlov编程了3D重叠模型。
  • Sylvain Lefebvre,Li-Yi Wei和Connelly Barnes正在调查将信息隐藏在纹理内部的可能性。他们制作了一个工具,可以将文本消息编码为WFC瓷砖并将其解码。该技术允许将WFC瓷砖用作QR码。
  • Mathieu Fehr和Nathanael Courant通过重叠模型的数量级大大改善了WFC的运行时间。我将他们的改进整合到了代码中。
  • 瓦苏·马赫什(Vasu Mahesh)将3D瓷砖模型移植到打字稿中,制作了一个新的瓷砖,并在WebGL中可视化了生成过程。
  • Hwanhee Kim对3D WFC进行了实验,并创建/改编了许多Voxel瓷砖:1、2、3、4、5、6、7、8。
  • 奥斯卡·斯托尔伯格(OskarStålberg)在2018年的“一切程序”会议上发表了关于Bad North的水平发电的演讲。
  • 我写了有关如何使用WFC和其他算法在2分之间生成(大约)公正的路径的文章。我在Markovjunior中实现了这种方法。
  • Isaac Karth和Adam M. Smith发表了预印本,他们描述了一个基于WFC的系统,该系统从正面和负面示例中学习,并在与示例驱动的发电机的对话的一般环境中进行讨论。
  • 布伦丹·安东尼(Brendan Anthony)使用WFC在游戏Rodina中生成墙壁装饰。
  • 蒂姆·孔(Tim Kong)在HAXE中实施了重叠模型。
  • 为了生成连接的结构,鲍里斯勇敢地将凿子方法应用于WFC。他出版了一个支持十六进制网格,其他约束和回溯的图书馆。
  • Marian Kleineberg根据Procjam 2018的瓷砖模型创建了一个无限的城市发电机。他撰写了一篇文章,描述了他的邻接,回溯和WFC在线变化的方法。
  • Sol Bekic编程了使用Pyopencl在GPU上运行的瓷砖模型。它没有让节点的队列从并行地传播到网格上的每个节点。
  • Wouter Van Oortmerssen在单个C ++函数中实现了瓷砖模型,其结构类似于优先队列,以更快地观察。
  • 罗伯特·霍尼格(Robert Hoenig)在朱莉娅(Julia)中实施了重叠的模型,只能在本地传播约束。
  • Edwin Jakobs将WFC应用于样式转移和抖动。
  • Breanna Baltaxe-Admony将WFC应用于音乐发电。
  • 肖恩·里奇韦(Shawn Ridgeway)成为了港口。
  • 对于2019年全球游戏JAM,安迪·华莱士(Andy Wallace)制作了一款游戏,其中玩家可以通过使用各种武器重置水平的部分来与基于WFC的水平发电机进行互动。
  • 斯蒂芬·谢拉特(Stephen Sherratt)对重叠模型写了详细的解释,并制作了一个锈库。对于2019年7DRL挑战赛,他使Roguelike变得越来越好,它使用WFC产生了水平。
  • Florian Drux创建了一个概括,可在具有任意局部结构的图表上起作用,并在Python中实施。
  • 鲍勃·伯劳(Bob Burrough)在其中一个瓷砖中发现了一种渗透样相变,表现为尖峰矛盾速率。
  • 奥斯卡·斯托尔伯格(OskarStålberg)将WFC与不规则网格上的行进立方体结合在一起,并基于它制作了一个城镇建筑的Toy Town -scaper:1、2、3、4、5、6。奥斯卡(Oskar)进行了许多关于Town -scaper的倡议镇的演讲和访谈,并采访了EPC2021,SGC21,SGC21,KONSOLL 20221,AI和GAMES。
  • 赫伯特·沃尔弗森(Herbert Wolverson)在他的Rust Roguelike教程中写了一章,内容涉及从头开始实施WFC算法。
  • 在2019年游戏开发人员会议和2019年Roguelike Celebration庆祝活动中,Brian Bucklew就WFC进行了讨论,以及Freehold Games如何使用它来在QUD洞穴中产生水平。谈判讨论了过度拟合和同质,级别连接性以及将WFC与建设性Procgen方法相结合的问题。
  • 勇敢的鲍里斯(Boris)根据瓷砖模型出版了商业统一资产。
  • 史蒂文·凯西(Steven Casey)将WFC移植到Java和Clojure。
  • NuñoDela Serna在一个没有对称性的瓷砖的OpenFrameworks插件中实现了3D瓷砖模型。
  • 保罗·安布罗森森(Paul Ambrosiussen)将重叠的模型纳入了霍迪尼(Houdini),并就算法及其在Houdini Hive 2020的实施进行了讨论。
  • keijiro takahashi实施了一个3D瓷砖模型,并与之生成了Escheresque场景:1、2、3、4、5。
  • Simon Verstraete发布了一个有关使用Houdini WFC工具为虚幻引擎4生成游戏级别的教程:0、1、2、3、4。
  • ÉlieMichel发布了一个Twitter线程,该线程解释了重叠和瓷砖模型之间的关系。
  • Lionel Radisson发表了一本可观察的笔记本,该笔记本可以通过重叠模型生成Mario和类似Zelda的水平:1,2,3,4。
  • lukasz jakubowski,Maciej Kaszlewicz,PawełKroll和Stefan Radziuk在C中实施了瓷砖模型。
  • 伊万·多切维斯基(Ivan Donchevskii)根据瓷砖型号发布了一个商业化的虚幻引擎插件。
  • JánPernecký和JánTóth发表了一个扩展瓷砖模型的蚱hopper插件。
  • Krystian Samp在C中制作了一个单文件重叠的WFC库。
  • 杰拉尔德·克里斯蒂安(Gerald Krystian)制作了一种交互式工具,该工具探索了瓷砖模型,其中瓷砖邻接是由边缘标签诱导的。
  • DeepMind开放式学习团队使用WFC为加强学习者生成了竞技场。
  • 奥斯卡·斯托尔伯格(OskarStålberg)制造了一个结合三角形和四边形瓷砖的岛屿发电机,并使用了一种自定义的观察启发式,而不会产生当地的最低限度。
  • 鲍里斯(Boris)勇敢地将保罗·梅雷尔(Paul Merrell)用块技术修改为懒惰的无限瓷砖配置。玛丽安·克莱内伯格(Marian Kleineberg)已将这种方法实施到他的无限城市发电机中。
  • VladimirPleskonjić在C中创建了一个单头WFC库,并配有CLI工具和基本的GUI工具。
  • 里克·达利(Rick Dalley)将WFC移植到飞镖。

学分

圆形瓷砖是从马里奥·克林曼(Mario Klingemann)取的。地板瓷砖是从Lingdong Huang取的。夏季瓷砖由赫尔曼·希尔曼(Hermann Hillmann)绘制。 Cat overlapping sample is taken from the Nyan Cat video, Water + Forest + Mountains samples are taken from Ultima IV, 3Bricks sample is taken from Dungeon Crawl Stone Soup, Qud sample was made by Brian Bucklew, MagicOffice + Spirals samples – by rid5x, ColoredCity + Link + Link 2 + Mazelike + RedDot + SmileCity samples – by Arvi Teikari, Wall sample – by Arcaniax,Notknot + Sand +皱纹样品 – 由Krystian Samp,Circle Sample -circle Sample -by Noah Buddy制作。其余的例子和瓷砖是由我制作的。 Moonasaur向我提出了产生综合电路的想法,它们的风格取自Zachtronics的Ruckingenur II。体素模型是在MagicAvoxel中渲染的。

下载源码

通过命令行克隆项目:

git clone https://github.com/mxgmn/WaveFunctionCollapse.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 WaveFunctionCollapse https://www.zuozi.net/34317.html

Avalonia
上一篇: Avalonia
pulumi
下一篇: pulumi
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务