1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作( 二 )


1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
第二个规则 , 在第一个规则被“卡住” , 也就是没有符合条件的可选项时 , 自动执行将“红-绿-绿”色块随机重写为“白-白-红”色块 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
这样一来 , 算法就能通过第一个规则生成随机路径 , 并通过第二个规则回溯还没有经过的路径、生成岔路口 , 最终遍历整个黑色地图 , 生成一套“2D迷宫” 。
还有更简单的思路 , 将所有“白-黑-黑”替换成“白-A-白” , 其中A是一个中间态 , 不作为起点 , 在迷宫生成完成后被替换为白色 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
据作者表示 , 利用这个规则 , 1行代码就能随机生成2D或3D迷宫 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
△3D迷宫长这样
基于这样的思路 , 换套规则组合方法 , 还能生成随机地形图 。
例如 , 试图生成一块河流地形图 , 就只需要利用上面的生成模型方法 , 再添加一些其他的重写规则 , 就能搞出一个随机河流图来:
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
除了地形图、简单的2D/3D迷宫 , 更复杂的3D建筑也能搞定 , 只需要在两层2D“迷宫”之间的随机位置生成一批“楼梯”:
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
嗯 , 连电路图都能画……
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
据作者介绍 , 只要灵活运用这些规则 , 就能用MarkovJunior随机生成各种各样的建筑和图画 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
可以说是非常好用了 。
还是著名WFC算法的作者这个概率编程语言的作者MaximGumin , 是一名独立游戏开发者 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
他搞过最有名的项目 , 应该是一套叫做“波函数坍缩算法”(WaveFunctionCollapse , WFC)的东西 , 目前在GitHub上已经有18.7kStars 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
这套WFC算法是他受量子力学中“波函数坍缩”概念的启发自创出来的 , 目前已经被应用到一些游戏中 , 如《城镇叠叠乐》(Townscaper)等 。
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
△图源:Steam
MaximGumin并未透露更多自己的信息 , 但我们能在他的主页上看到 , 这位老哥自称“概率模型之王 , 程序化生成の弥赛亚 , 驯服马尔科夫链的人……”(手动狗头)
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作
文章图片
从GitHub来看 , 这些年他一直专注于将各种数学算法应用于程序化生成中 , 做出各种有意思的模型 。
说不定你玩过的游戏中 , 有一些已经用过他开发的算法了 。
项目地址:
https://github.com/mxgmn/MarkovJunior参考链接:
[1]https://twitter.com/ExUtumno[2]https://github.com/mxgmn/WaveFunctionCollapse[3]https://www.youtube.com/watch?v=DOQTr2Xmlz0[4]https://twitter.com/fchollet/status/1532019171038355456—完—
1行代码生成随机迷宫,概率编程语言登GitHub热榜,WFC作者新作】量子位QbitAI·头条号签约