Skip to main content
AR论坛
 首页 » 资源教程

如何用shader模拟细胞自动机(Cellular automata)【含源码】

2016年11月30日 18:13:43580蛮牛网

本篇文章介绍怎么用着色器模拟细胞自动机。一个很著名的细胞模拟机叫《Game of the Life》由John Conway制作的,将会作为范例在这个教程中。要想知道怎样建立你的工程,查看这两个教程的第一部分:怎样用着色器做模拟效果和怎样用着色器来模拟烟雾

如何用shader模拟细胞自动机(Cellular automata)【含源码】 资源教程 第1张

·介绍

·第一部分:Conway的game of life

·第二部分:实施

·第三部分:优化

·第四部分:提升

·总结和文件下载

介绍

如果你看过教程如何用着色器模拟烟雾,你也许会发现相似的限定关于介绍着色器在模拟方面的内容。第一个最明显的事实是你不能改变任何其他的像素,尽管有一个正在迭代上但是你不能改变任何其他的像素。使用着色器有点像做一个循环,他只允许你编辑现在的项目,这确使我们写出所有的方程式使我们的模拟以一个明确的形式。这可能不永远是有效的和可行的。

如何用shader模拟细胞自动机(Cellular automata)【含源码】 资源教程 第2张

 

如果我们用着色器做模拟,这是必须的去发现问题,来是它们更完美对于这些模拟器。非常幸运的是,有这样一类问题非常符合这个定义,术语细胞自动机是一个具体等级的模拟是指一个松散进化的生物过程。细胞自动机可以很好的概括为一个很好的质感基于网格的工艺。这背后的概念是每一个像素(或细胞)的状态取决于隔壁像素的状态,一些类似的事发生在细胞或者细菌上,它们通常根据周围的环境来改变自己,它们自己不会改变。

第一部分:Conway的game of the life

最著名的细胞自动机是game of life,由John Conway编写于1970年。它是基于一个网格,每一个细胞的死或者活,随着时间离散间隔,都根据这些简单的规则:

·种群数量之下 任何活着的细胞都有少许两个隔壁活细胞死了

·种群数量之上 任何活着的细胞有超过三个隔壁细胞死了

·繁殖  任何与三个活的邻居的死亡细胞都变成活的细胞。

·持续性  有两个或三个住在隔壁的活细胞,产生下一代。

这四个简单的规则被设计出来模拟一个繁殖过程,引入种群数量过少和种群数量过多的直接概念。Game of the life 不能复制一个现实中的繁殖过程,但是,它有难以置信的复杂程度,首先它已被证明图灵完成(turing-complete)。这意味着如果它能在网格网格中被正确编码,它能够运行任何程序和算法。Game of the life 是如此强大,没错,就是这么酷炫,你可以模拟真正的生命游戏在game of the life中。

如何用shader模拟细胞自动机(Cellular automata)【含源码】 资源教程 第3张

 

第二部分:实施

如果我们想在着色器中重现Game of the life ,我们首先需要一种在纹理上创建网格状表示的方法这已经在本系列的第二部分中讨论,如何使用着色器模拟烟雾,该技术应用于片段着色器对单元相邻的细胞进行采样,需要在红色通道内进行编辑。

如何用shader模拟细胞自动机(Cellular automata)【含源码】 资源教程 第4张


 

第二部分是四个规则的实现:

白色和黑色分别指示活的细胞和死的细胞

The game of life 通常可以在环形网络上实现,这意味着上下和左右两边都是连同的,如果你想要它作为一个事件,请确保正在使用的渲染纹理是将Warp Mode设置为Repeat的情况下导入。在概念上,这几何的世界中可以表示为一个个体,连续的3d物体像下列的图片一样

为了避免任何问题,Filter mode设置为点也很重要

第三部分:改进

这个技术在我们之前描述的段落中有两个明显的缺点,第一个是改变规则需要实际改变着色器的代码。第二个是if语句在着色器使用时运行特缓慢,在个别情况下,可以用替代方法来表达规则,因为每一个细胞可以有任何数字的活的邻居从0到8,我们可以使用九个要素的数组来指示下一个状态:

每一个元素有两个部分,第一个指示当前细胞是否存留到下一个阶段。第二个是否创建一个新的细胞。这个规则现在可以表示为:

重要的是要注意,为了使规则数值保持其值,关键字static是必要的

第四部分:提升

一个有趣的图像提升可以实现通过改变细胞的颜色来决定它已经活多久。这是可以实现的因为我们只使用我们纹理的红色通道来进行计算,其他通道可以填充其他颜色,在本教程的开头示例中,细胞变得越红,他们住的时间越长。

如何用shader模拟细胞自动机(Cellular automata)【含源码】 资源教程 第5张


总结

细胞自动机是一个非常酷炫的工具,其在游戏开发中已经有很多实际的案例,Sebastain Lauge正在使用类似的技术来程序似的产生洞状结构。

细胞自动机可以模拟很多自然行为,包括水流动的方式。

阅读延展
评论列表暂无评论
发表评论