无边无际的虚拟城市来了!能走能飞的Demo,一火再火的“波函数坍缩”开源算法...

本文介绍了使用波函数坍缩(Wave Collapse Function)算法创建的无限虚拟城市,玩家可以在其中自由奔跑飞翔,城市会根据玩家的行动实时扩展。文章通过婚礼座次问题解释了算法原理,并展示了其在游戏、城市生成和文本创作中的应用。这种算法源自量子力学概念,通过不断迭代和更新规则,实现无缝拼接的各种元素组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安妮 栗子 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

640?wx_fmt=gif

神说,要有光。

于是有了光。

神说,要有一座城。

于是有了一座城。

神说,这座城要无限大。

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

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

640?wx_fmt=gif

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

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

640?wx_fmt=gif

而它背后的波函数坍缩 (

在 Unity 中使用波函数坍缩 (Wave Function Collapse, WFC) 算法可以实现复杂的、规则化随机地图生成。这个算法的核心思想是从组给定的模式中选择合适的片段,并逐步构建出完整的地图。 ### 波函数坍缩的基本原理 1. **初始化**:设定初始条件和约束(如种子图块及其相邻规则)。 2. **观察与坍缩**:从所有未确定状态的位置开始,找到最不可能满足所有邻接约束的状态并将其“观测”到种确切的状态。 3. **传播影响**:更新周围单元格的可能性分布以保证致性。 4. **循环直到完成**:重复上述过程直至整个网格都填充完毕。 下面是个简化版的WFC代码框架,在Unity C#环境中运行: ```csharp using System.Collections.Generic; using UnityEngine; public class WFCTileGenerator : MonoBehaviour { // 定义些常量 private const int MAP_WIDTH = 60; // 地图宽度 private const int MAP_HEIGHT = 60; // 地图高度 public Texture2D seedImage; // 种子图片用于定义图案库 private bool[,] observedMap; // 记录每个位置是否已被坍缩过 private List<int>[] waveFunction; // 每个元素表示该处可能出现的所有瓦片索引列表 ... void Start() { Initialize(); Generate(); Render(); // 渲染结果至游戏场景内可视化显示出来 } /// <summary> /// 初始化参数设置以及读取输入图像作为样本集 /// </summary> private void Initialize(){ ... } /// <summary> /// 实际执行地图生成功能入口 /// </summary> private void Generate(){ while (!IsFullyCollapsed()){ var collapsedPos = GetMinEntropyPosition(); if(collapsedPos == null){ Debug.LogError("No valid position found for collapse."); return ; } ApplyObservation((int)collapsedPos.x,(int)collapsedPos.y); PropagateEffects((int)collapsedPos.x,(int)collapsedPos.y); } } } ``` 请注意这只是个非常简化的示例,实际应用需要更复杂的数据结构处理边界情况及更多细节优化。 为了更好地理解和掌握此技术,建议进步探索具体的数学理论基础以及现有开源项目资源;此外也可以参考官方文档了解有关于Tilemap API等辅助工具如何配合使用的信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值