生命是什么

生命是什么

​ ——怀着敬畏之心对生命的一次探索,跟随前辈们的足迹,探索生命的奥秘。

查看源图像

八十年前,一个年轻人写下了《生命是什么》(本人非常喜欢的一本书,也是我非常喜欢的一个话题,故将此作为本文题目)。阐述了他对量子力学的探索,带领无数人进入量子力学的世界。他的宠物小猫则更为出名,在这百年来“引无数英雄竞折腰”。八十年后,我们生活在数字世界中,计算机也渗透到了我们生活的方方面面。不妨在这个时刻,借助现代先进的科技、伴随着前辈的足迹,让我们去探索——生命是什么?

从小到大,我无数次惊叹于生命的神奇瑰丽。无论是路边田野里的花花草草,还是驰骋在我电视屏幕上的凶猛猎兽,抑或是始终陪伴着我们的小猫小狗,每一个生命体对我来说,都是如此神奇美丽。我也买了很多生物相关的书籍,翻开这些书,仿佛在与自然对话……这也让我一直在思考——生命到底是什么?我一直在尝试回答这个问题,也请教了很多前辈,突然有一次得到了一个令我惊喜的答案——或许可以使用计算机模拟生命。毫无疑问这对我来说是一个非常好的办法,于是我便开始了在这个方向上的尝试与探索……

生命进化

我们都知道,世间万物起源于海洋,生命的进化过程,美丽又神秘。不过好在,我们从来都不孤独,我们始终站在巨人的肩膀上!所以,不妨让我们从此入手,尝试窥探生物进化的秘密。

在做准备工作的时候,我便遇到了第一个问题:如果仅仅是让我们创造的虚拟生物做一些特定的动作,很容易实现,但其并不符合生物和物理运动的规律;如果我们提供运动时的力和力矩,可以得到符合物理规律动作,但这样的话,却很难实现我们预期的行为。

我尝试寻求折中的办法,但显然对于生命来说,“中庸”之道并不合适,这样处理只会得到既不符合物理规律,也不能实现特定研究动作的“都不像”,显然对于严谨的生物学来说,这种方法并不合适。

令人惊喜的是,早在30年前,Karl Sims教授就已经发现,并提出了一种解决方案:Optimization techniques offer possibilities for the automatic
generation of complexity. The genetic algorithm is a form of artificial evolution, and is a commonly used method for optimization.

我们都知道:遗传学是生物学的基石。Sims教授跳过了模拟生命体表象的阶段,直接进入本质,用基因控制生命体的行为活动。这里构建了更为复杂的控制系统,但显然它所带来的回报也是惊人的。

image-20220916195750338

基因图与对应的生命形态

使用基因模拟生物还有另一个好处——生物体的各个性状可以独立突变。我们课本上也说:基因突变是随机的、不定向的。正因如此,使用基因映射生命形态和行为似乎成为了最合适的解决方案。

我们尝试借助虚拟的大脑来决定生命的行为。那么如何模拟大脑呢?

我们常听说,CPU是计算机的大脑。CPU的工作,简单来说就是处理存储器中的信息,并发送出去。但CPU与生物体大脑不同的是:不同的神经节点对同一输入可能执行不同的功能,正因如此,生物大脑可能更像数据流计算机程序,而不是典型的神经网络。

image-20220916201256252

​ 基因,大脑与身体的关系

截至到这里,系统的复杂度已经远远超乎想象,在我的能力范围内,我意识到这是不可能实现的事情。

让我们再次回顾Sims前辈的工作,他将神经元埋藏在生物体的特定部位中,用图来表示神经系统的基因型。分离神经系统与局部控制系统,并连接本地控制系统,得到了令人满意的协调效果。他也模拟了种群存活率与各种基因对环境的适应度,不断改变环境条件,通过不断竞争,引导生物进化。最终得到的结果显然是令人振奋的!

petal_20220916_190237(1)

一个更令人振奋的消息是:Unity自2016版本以来也引入了相关的内容,使得我们普通人对生命模拟的制作更加容易。例如IK插件,广泛被大家用于模拟蜘蛛。

image-20220916212122868

使用IK插件模拟蜘蛛行动。

看到这里,我们对生命进化也有了更多思考。开始了对其模拟的尝试

image-20220916210437379

安排生命体的组织结构

image-20220916210456091

尝试在Unity中实现(可以看到随机生成的两个生命体具有不同形态)

让我们把目光看向植物

我很喜欢植物,不仅仅是因为他们的美丽。

每一株植物的生长,似乎都是按照某种程序的设定,在特定的时间长成特定的形态。(你可能会反驳我:植物生长也受光照、土壤和水分影响,并非为程序所控制。但我在这里设想的环境是最适合植物生长的环境,并假定每一个植物环境一样,把这些当作无关变量似乎更适合我们思考植物生长的本质)。

正因为这个特点,我们可以用更简单的方法来模拟植物生长——程序动画。

程序动画并非新鲜事物,但我非常喜欢它。它为程序和美术提供了一种折中的选择。可以像神奇的Processing那样绘制出美丽迷人的图案,并且在游戏与影视领域有更为广泛的用途。

image-20220916215146723

在背后花儿的衬托下,妮露显得更加迷人。(花儿也是这里解密的关键线索。)

在1990年,Hanan发表了一本书:《The Algorithmic Beauty of Plants》,很幸运,书中大部分办法如今仍然可以使用,当然,我们现在也有更好用的工具去实现那些效果。

Garden

程序动画生成花

Demo

程序动画生成树

这里就不展开更多细节了,因为你可以在不知道原理的情况下,通过一些插件在大部分三维软件实现类似的效果,不妨自己动手试试吧!

让我们进入微观世界

微观生物学的世界更加神奇美丽,这里也是计算生物学(Computational Biology)的天下。

微生物与细胞里面有数量众多的细小组成元素相互影响、作用。师哥告诉我,没有任何CPU能提供如此高性能的集群模拟,而计算能力更为强大的GPU毫无疑问可以解决这个问题。因此,对微生物的生命模拟与呈现,不仅仅是对分子生物学(很巧的是,《生命是什么》这本书主要内容与分子生物学有关)的一次探索,也是一次对GPU-Based Simulation的一次探索。

说到这里,我迫不及待地与你分享《参数生命》 https://www.bilibili.com/video/BV1Rb4y1h757?share_source=copy_web&vd_source=a575d24748d9d944eda0ed7e2d17a5b5

img

You can try it on https://store.steampowered.com/app/1813690/

这里暂时不阐述更多细节,你可以通过这个文章来了解更多(下文相关技术你也可以在这里找到更详细的答案):https://mp.weixin.qq.com/s/C-63dvgF56I-A1Pms3UAiQ

细胞模拟

查看源图像

大家应该都记得课本上的这个关于细胞的图片。

我并不打算模拟出具体的成分如细胞核等,而是去探索细胞的形态变换与细胞之间的相互作用,显然这是一个更有趣、更有艺术表现力的方向。

细胞有几个基本行为:

  • Growth
  • Repulsion
  • Division

image-20220916224119350

简单用矢量图绘制了一下

我们不妨用Particle来控制细胞的活动,用Edge来控制相互作用。

image-20220916232548289

Edge作用力将Particle连结在一起。

简述一些Particle的细节

我们可以将一些细胞特性写入Particle中,例如活性,繁衍量……这些是每一个细胞基本的特征。

Unity引擎的Compute Shader功能十分强大,这为我们扫清了一些潜在的障碍。我们把组成细胞的每一个“分子”传入GPU中,通过DirectX3D 11 利用GPU的LIFO不断添加和处理提取的数据。通过这样的流程也可以使对象池发挥作用。

如果你想了解更多为什么在这里使用Compute Shader, 为什么使用GPU来并行运算,十分欢迎你回到上文,仔细阅读师哥的文章。

image-20220916233720278

从poolBuffer中不断Pop未激活的Particle

传入GPU后,分配一个Kernel处理相关数据,对Particle初始化之后,接着就要让它出现在我们屏幕上了。同时为了避免运算时其他Kernel的干扰,我们用Atomic计算方法,在GPU上实现安全的循序处理。

这些流程是枯燥乏味的,不过它们呈现的效果是美丽震撼的!本文并非技术论文,因此,我将省略一些细节,向您呈现一些 Simulation效果

image-20220916234807697

生成Particle的场景

不过我们还没有实现Particle之间的作用力,分子之间的作用力与我们生活的宏观场景并不相同,相反,差异很大。

作用力不仅存在于细胞分裂、融合、成长之中,也存在于相距稍远仍相互吸引的Particle之中。

至于细胞分裂,我们采用了封闭网格结构的分制模式。

image-20220917001338085

这种模式的效果图

image-20220917001537831

一个Particle和另一个正在分裂的Particle形成的封闭三角形网格。

至于如何生成网格,我很高兴与你分享,你可以从CG13获取相关知识。

image-20220917001724348

稳定网格结构的维持

image-20220917001925137

反复分裂,网格分支便会不断成长

image-20220917133240122

封闭网格的成长

到这里,基本逻辑就说完啦!让我们看看炫酷的效果图吧!

image-20220917002158303

将所有Particle连在一起

image-20220917002222924

Particle发散

Intro

演示效果

由于一些原因,更多效果暂时不方便在此展示,不过我会持续在此方向努力,敬请期待!

当下生物多样性锐减,我们能做的不多,但好于什么都不做。

我们的目标是星辰大海!

你,愿意和我一起探索吗?

谢谢各位前辈的工作,你们的努力使得这个世界更加神奇美丽!

本文只是鄙人探索生命过程中的一些愚见。如果您对本文的言论有不同看法或者见解,抑或是一些相关的建议,欢迎与我联系(My email address : iceingmiao@gmail.com),感谢您对完善本文的一切贡献!

任何有关技术探讨的分享是欢迎的,但我不希望您在未经许可的情况下因为其他原因四处传播。