无尽虚拟城市来了!Demo可走可飞,“波函数坍缩”开源算法蹿红

神说,要有光。

于是有了光。

神说,要有一座城。

于是有了一座城。

神说,这座城要无限大。

神啊你别再说了,那是另外的价钱。

不过,有种叫做波函数坍缩 (Wave Collapse Function) 的算法,可以让一座白茫茫的城,在虚拟世界里无限延伸。

你跑得再快,飞得再远,都到不了它的尽头。

因为,这座城可以实时扩张,你往哪里走,它就往哪里生成,不会让你跑出去的。

而它背后的波函数坍缩 (WFC) 算法自诞生以来,每隔一段时日,便会引起人类蜂拥而至的关注。

不管是因为这赏心悦目的应用:

还是因为有人做了完整而深刻的解读:

无限之城一日游

一位推特名Marian42_ (简称玛丽安) 的妹子,用WFC建造了无限之城。

这座城里没有街道,有的是各式各样的房屋,和房屋之间的走道与楼梯。

沿着它们,你可以登上高台俯视全城,也可以穿行在安静的小道。

不安分的你,还可以从栏杆上一跃而下,并不会受伤,可以继续往前跑。

当你以为快要走到城市的尽头,前面看不到建筑物了,只要再跑几步,眼前便又实时生出一片新城。

这里没有死胡同,只要你一直跑,城市就会在你前行的方向不断扩张。

除了跑跑跳跳,还可以用M键切换飞行模式,以上帝视角观察这座城,是如何流畅地向远方延伸:

当然,进城之后不要只顾着活动筋骨,偶尔也看看风景吧。

你会愉快地发现,中式的屋顶与罗马式的栏杆和石柱,在同一幢建筑里相敬如宾,丝毫不会忸怩。

有闲情的话,可以细数一下,把这89种元素集齐:

毕竟,除了标配的屋顶啦、回廊啦,幸运的人类还能在转角遇到优雅的喷泉 (Demo传送门见文底) 。

原理揭秘

无限城市一日游结束,是时候认真了解一下它背后的算法了:波函数坍缩,究竟是什么?

这个名字,来自量子力学中的一个概念,不过算法本身倒是比量子力学好理解得多,我们先从一个例子开始科普。

婚礼座次问题

想象一下你正在计划一场婚礼。问题来了,办几桌宴席、嘉宾坐哪里都需要考虑。不巧的是,为了照顾大家的情绪和满足各种条条框框的习俗,你需要调节几个问题:

  • 老爹不能坐在老妈两张桌子以内的距离
  • 老妹如果不能和其他兄弟姐妹坐一桌,会开启可怕的狂暴模式
  • 最好不要让叔叔和环保主义者挨在一起坐

不好,离婚礼只有五个小时了。此情此景下,你可以选择波函数坍缩来解决这个看似棘手的问题。

先画一张空白的座位表,记录下规则。

我们可以构建一张每个座位对应一个人的一一对应图,每个座位都可以对应任何人,也就是我们的初始波函数。

你的座位计划波函数就从这种变化万千的情况下开始了,开始的座次就是就是每个座位有效布局的完全叠加。

“叠加”的概念用薛定谔的猫来理解最好不过,在未查看猫的状态前,这就是一种叠加态,猫死猫活都可能存在。打开盒子后猫的叠加态小时,坍缩成确定态。

先选择一个位置,随机安排名单中一个人进去,此时座位波函数开始坍缩。

随后,确定下的每个人都影响后面人员的排布。如果Michele不想坐在2号桌,那他的妹妹Barack也肯定不在这一桌。通过不断更新可以坐在2号桌的人员名单,调整座位计划的波函数。

不断重复这个过程,直到每个座位的波函数都坍缩了或者遇到了矛盾无法安排。举个例子,如果遇到无法将剩余任何人安排到这个空位的情况,那这就是一种矛盾状态,最好的解决方法就是:重新开始。

再尝试几次,能按规则安排下每个人就算大功告成了。

位图(Bitmap)同理

婚礼排座位如此,波函数生成无限城市,将几十种不同的建筑元素拼接组合也是如此。

这个过程非常相似,只是改变了规则。台阶可以直接和平地连接,但无法和屋顶元素相连,波函数不断坍缩直到矛盾出现或全部坍缩。

两种情况也有不同,婚礼座次问题的规则是提前写好的,但无限城市的规则是用示例图像形式呈现的:

算法自己剖析示例,分析模式,自己推断出像素或者图块的规则如何。

那无限城市到底是如何将建筑元素拼接到一起的?我们先考虑一种简单的特殊情况,一种称为更简单的平铺模型(Even Simpler Tiled Model)的方法。

在这个模型中,可以将每种元素用像素形式呈现,并赋予一种单独的颜色。举个例子,下图陆地、海岸、海洋和山川四种地形图块都用了不同的颜色来表示。

更简单的平铺模型的规则指定了哪些图块可以彼此相邻放置,也规定了放置方向。每个规则都对应一个坐标,内含两个相邻的图块和一个方向,比如(海洋,海岸,左边)代表一个海洋图块可以放置在一个海岸图块的左边。

除了明确规则,还需要明确每种图块出现的频率,在生成时这些频率将作为权重,决定最终生成的画风。

前面看到的无限城市,生成过程也和这个“比简单还简单的平铺模型”类似,只是涉及的元素、规则更多。

坍缩

规则权重设置好,波函数坍缩可以开始了。

在无限城市问题中,最先确定的建筑元素是随机的,但算法会按照熵值最小排列方法不断扩充,也就是按系统的混乱程度最小排列。

一般来说,一个低熵的图块集合中,波函数坍缩时能选择的图块类型相对较少,最终图块遇到矛盾的可能性就会小一些了。

遵循单个图块的权重的同时,还要考虑整张图的全局权重。

比如,一个图块周围,台阶和平地图块出现的概率各占0.5时,在全局权重的指导下,不会出现一块台阶一块平地的尴尬情境,而可能直接用10块平地拼接成“大平地”。

此时,波函数坍缩持续进行中。目之所及,无限城市中的地平线在不断快速向远处延伸。

所有输出的波函数,要么完全坍缩,支撑不断建起的亭台楼阁,要么出现了矛盾情况返回到某个节点重新不断生成。

最终,我们创造出一个虚拟的无尽头世界。

玩法还可以很花

想用波函数坍缩 (WFC) 来创造世界的,不止玛丽安。

2016年,两位美国少年发表了一个都市场景的滑板游戏,叫Proc Skater 2016。

他们说,这是世界上第一个用WFC来生成关卡的游戏。

只不过,这个游戏里的空间,并非实时生成,也不是没有尽头。

在那之前,少年们还用同样的方法,建起过一座属于自己的城,有限的城。

当然,除了大兴土木之外,WFC还有其他功能。

比如,有人就用它来写十四行诗:

爱丽丝还不知道自己的路该往哪走,就已经不在这里了。(她来到了一个陌生的地方。)那里有座厅堂,周围排满了门。每一扇门都在说着一些友好的话。(仿佛在请她进去。)

后面几句有点恐怖:

Down down down down.Let me see that would be of very like a candle.I wish you were down here with me.

大概,走进一扇门,便是不停地降落,降落。停下之后,周围已不是人间。

底下是清冷幽暗的世界,如果有人陪就好了。

句子再不通顺,也不妨碍人类的想象。反而越不通顺,越有梦境的错觉。

原文地址:https://www.cnblogs.com/chuangye95/p/10180249.html

时间: 2024-10-10 12:35:07

无尽虚拟城市来了!Demo可走可飞,“波函数坍缩”开源算法蹿红的相关文章

使用Three.js绘制一个虚拟城市

这篇文章解释了如何使用代码来编写一座3D立体“城市”.这个代码是由@ mrdoob最新发布的演示Demo.我发现这个演示的算法很优雅,是一个简单而有效的解决方案,所以我发了一个帖子解释它. 关于算法的一些评论 在我们将关注焦点置于问题的细节之前,把握下问题的整体和全局是很有帮助的.这个3D虚拟城市所使用的算法是完全由程序所生成的,这意味着整个城市 是动态建立,而不参考任何模板.这个算法相当优雅,且不超过100行javascript代码.这个算法的原理是怎么样的呢?简而言之,每一个建筑是一个 立方

喵呜的虚拟城市(最短路)

Problem C: 虚拟城市 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 5  Solved: 2 [Submit][Status][Web Board] Description 虚拟城市是一个基于Windows平台的2D经营策略游戏.你可以在游戏中建造各种各样的建筑(公园.雕塑.喷泉.小屋.公寓.办公区.商场写字楼.综合办公楼.办公大楼.现代化摩天大楼等).道路,也可以销毁他们, 当然建造.销毁它们都要花费资金,你可以通过每月的税收赚钱,就

SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu

%SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题--Jason niu X = [16.4700 96.1000 16.4700 94.4400 20.0900 92.5400 22.3900 93.3700 25.2300 97.2400 22.0000 96.0500 20.4700 97.0200 17.2000 96.2900 16.3000 97.3800 14.0500 98.1200 16.5300 97.3800 21.5200 95.5900 19.4100

城市平乱(南阳oj115)(迪杰斯特拉算法)

城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M. 现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱. 现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间. 注意,两个城市之间可能不只一条路.

360虚拟场景展示 让异域他乡之美浮现眼前

虚拟全景又称三维全景虚拟现实(也称实景虚拟)是基于全景图像的真实场景虚拟现实技术.全景(英文名称是 Panorama)是把相机环360 度拍摄的一组或多组照片拼接成一个全景图像,通过计算机技术实现全方位互动式观看的真实场景还原展示方式. 应用领域方面可广泛应用于房地产三维电子楼书设计.宾馆酒店展示.旅游景点展示.城市景观展现,也可以应用于电子商务网上的虚拟展厅制作.网上虚拟博物馆的展示.政府虚拟城市项目建设以及包括建筑设计和施工单位在内的各大中型企业的企业形象宣传和项目记录与汇报等方面. 酷雷曼

Unity3D制作3D虚拟漫游场景(一)

开始前先说一些题外话,本来这个工程是已经完成了超过一半了,然而由于手残重装了系统不小心删除了,现在只好再做一遍了.顺便写一下博供今后写代码参考. 这是一款使用unity3D开发的虚拟城市漫游游戏,实际上博主是非常喜欢这类游戏的,在城市里面自由地去浪是多么随意的一件事(雾). 最近VR和AR莫名火起来了,然而穷到吃土,入手了Google cardboard,店家顺便附赠了蓝牙游戏遥控器,这款游戏我会在完成之后移植到VR上面进行测试. 博主家在新乡,是的没错,前几天发洪水能划船的新乡,耽误了一些时间

开源的毕业设计—3D虚拟社区

楼主今年刚毕业本着开源的精神把我的毕业设计开放源码,提供源码和设计文档的免费下载,算是这么多年对开发社区的一个回馈. 3D虚拟社区是我很多年以前的一个想法,类似美国的第二人生.一开始有这个想法的时候是在小学看科教栏目(可能大家要笑了),那个项目就是一个人带着虚拟眼镜然后在一个球里面走,用技术模拟现实的世界.其实那个东西和现在一些硬件创业公司做的是一样的,但是那是在十年前美国的一个研发项目,现在想想就知道美国的思想有多前卫了. 但是到了大学学了编程,我才记起这件事情,我原来是可以去做的,那时候的心

【与奥斯丁的二十种邂逅】-- 得克萨斯首府的小情调城市游 (介绍你在奥斯丁必须做的,推荐做的,和做了你就牛掰了的20件事)

明年1月底应该会去奥斯丁参加AAAI会议,偶尔看看攻略.嗨森~ 原文转自: http://blog.renren.com/share/28765132/15631046000 作者 :  张诺娅 (图片来自 @走遍美国(601684562) ) 开篇要感谢一下 @走遍美国(601684562) 小组,小站,和公共主页的老大,美国旅游达人 @朱周明相(245804183) 船长童鞋在奥斯丁的盛情款待.初到奥斯丁的时候,船长语重心长地说:我接待过这么多的人来玩奥斯丁,为神马就没有人写一篇关于奥斯丁的

调查显示:海归不再扎堆一线城市 5大行业需求大j

他们卖的这些液化气气罐上,大多不会标明生产厂家.她说:"席尔瓦有时候对他态度不好,但我从来没见过他生气.英达表示,"<我爱我家>的剧情和演绎都很符合20年前观众的需求,但如果放到现在来播,未必能取得那么好的成绩.他希望苏警方对此予以高度重视,尽快将犯罪分子绳之以法.二是加强部门联动,打击通过邮寄方式非法进口.虽然如此,很多塞浦路斯人认为最艰难的时候已经过去.刘晓宇因膝伤作壁上观,陈江华表现低迷,怀亚特在第4节还有不到4分钟时6犯离场,这让大鹏被动地被推到了1号位上.今年就算