波函数坍缩算法:创造性地构建图形世界

波函数坍缩算法:创造性地构建图形世界

WaveFunctionCollapseBitmap & tilemap generation from a single example with the help of ideas from quantum mechanics项目地址:https://gitcode.com/gh_mirrors/wa/WaveFunctionCollapse

项目介绍

WaveFunctionCollapse(波函数坍缩)是一个令人着迷的开源程序,它能自动生成与输入图像局部相似的位图。利用一种启发于量子力学原理的算法,该程序可以构造出一系列独特的图案和结构,展现出惊人的多样性与一致性。从简单的像素块到复杂的建筑布局,只需提供一个初始模板,WaveFunctionCollapse就能扩展出无限可能。

主图展示

项目技术分析

WaveFunctionCollapse基于两个主要原则:

  1. 局域相似性(C1):输出应仅包含存在于输入中的所有NxN像素模式。
  2. 弱概率匹配(C2):在大量输出中,NxN模式分布应尽可能接近输入的分布,确保每个模式在输出中出现的概率接近其在输入中的密度。

通过不断迭代"观察-传播"过程,程序逐步确定输出图像的状态。一开始,每个像素处于"叠加态",随着算法进行,最终会"坍缩"为确定的颜色状态。由于问题本身的复杂性(NP难),可能存在无法继续的情况,但这在实际运行中并不常见。

应用场景

这项技术不仅限于理论研究,已广泛应用于以下领域:

  • 游戏关卡设计:例如在《坏北》、《洞穴群族》等游戏中创建随机但连贯的地图。
  • 城市规划模拟:如在《Townscaper》中自动生成美观的城市景观。
  • 数字艺术创作:用于生成独特的纹理和图案。
  • 研究与教育:启发新的研究方向,提供了实验和学习的平台。

项目特点

  1. 高灵活性WaveFunctionCollapse已被移植到多种编程语言,包括C++、Python、Kotlin、Rust等,适用于不同开发环境。
  2. 跨平台应用:支持Unity、Unreal Engine 5和Houdini等游戏引擎,便于将算法应用于实时交互场景。
  3. 直观易用:有官方Windows版可供下载,还有在线浏览器版本可直接体验。
  4. 创新性:其算法已催生了一系列衍生作品,并被用于解决约束合成问题,如纹理合成和地图自动生成。

结语

WaveFunctionCollapse以其独特的方式揭示了计算美学的魅力,它将抽象的数学概念转化为可视化的艺术创作。无论你是开发者、设计师还是对创意编码感兴趣的人,这个项目都值得你尝试,探索其中无穷的图形世界。现在就加入我们,一起感受波函数坍塌带来的惊喜吧!

观看算法演示视频

立即参与项目

更多资源与示例

WaveFunctionCollapseBitmap & tilemap generation from a single example with the help of ideas from quantum mechanics项目地址:https://gitcode.com/gh_mirrors/wa/WaveFunctionCollapse

在 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等辅助工具如何配合使用的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滑辰煦Marc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值