WFC-初识过程化生成

过程化生成(procedural generation)

是计算机科学中一种使计算机自动制造一类数据的算法。在电子游戏领域中用于自动制造大量游戏内容。过程化生成有着减小文件体积、扩大内容量、增强游戏随机性等优点。过程化生成的好处是仅要很小的函数和源数据,便可以制造出很多和源数据有关或类似但存在不同的新数据。电子游戏借助它可出现许多(接近无限)个关卡。这可以缩短开发时间,也可以减小软件的文件大小。

很多游戏中都使用了过程化生成算法:

  • Rogue(1980) Rouge-1980 Rouge-1980
  • 暗黑破坏神II(2000)DiabloII-2000

    Tiles, like “Splunky”

  • 我的世界(2011) Minecraft-2011

    generates their terrain

  • 无人深空(2016) NoMansSky

    generates all different things

  • Dwarf Fortress(2006) Dwarf Fortress

    generates the whole world

通过例子来引入

应用在《Bad North》和《Townscaper》中,用来实现程序自动生成的算法,Wave Function Collapse Algorithm.

collapse 坍缩的解释:

  • 波函数的坍缩
  • 量子力学

波函数解释:在量子力学中,量子系统的量子态可以用波函数来描述。波函数是复值函数$\Psi(r,t)$,表示粒子在位置$r$、时间$t$的概率幅,它的绝对值平方是在位置$r$、时间$t$找到粒子的概率密度。位置空间波函数、动量空间波函数互为傅里叶变换。

和项目对接(吹牛逼专用栏)

项目采用回合制战斗,系统组大部分开发工作是在 ugui 上。在主线界面中,及抽卡系统中,会有城市全景画面,目前来说这个场景是完全通过场景同学手工制作得到的。为了

并非从零开始生成一个每次都不尽相同的场景,类似《刺客信条》等大型开放世界中的各种互动元素,场景中的元素,通过自动生成算法可以在增加场景细节丰富度的同时降低成本。

技术难点(技术壁垒,你觉得主要的困难是,你觉得你做的工作里很牛逼的是)

  1. 如何避免重复感? - 自动生成的例子(No man’s sky)
  2. 如何针对不同情景设计合理的算法? - 并无通用方案。
  3. 如何与人工结合? - 算法不能破坏人工部分,GDC2018刺客信条分享测试团队如何用自动化思路发现自动生成和人工内容冲突(看游戏的bug数似乎说服力不强啊)

相关算法的文献综述

方法 描述 解决的问题 缺陷
WFC
ConvChain
DeadCell
Spelunky

分享一些资源

一些资源图:Oskar Stålberg(@OskSta)

https://twitter.com/i/status/1279107097108635649

https://twitter.com/OskSta/status/1246729301434798080

https://twitter.com/OskSta/status/1228331649060024325

https://twitter.com/OskSta/status/1227650434602610688

city generator:

http://oskarstalberg.com/game/CityGenerator/

wfc 可交互版本(Oskar Stalberg made an interactive version of the tiled model that runs in the browser.):

http://oskarstalberg.com/game/wave/wave.html

Nick Nenov made a visual guide to the tile symmetry system.

Marian Kleineberg created a city generator based on the tiled model for Procjam 2018. He wrote an article describing his approaches to setting adjacencies, backtracking and the online variation of WFC.

https://github.com/marian42/wavefunctioncollapse