话不多说,先上成品 Lotka Volterra
缘起:
最近在开启新的side project,要用"伪"粒子系统来优化粒子生命(particle life),简单来说就是做我最擅长的动画,不过从底层逻辑说,所谓直接操作的动画路径(位移),就是速度的积分,加速度的两次积分,本质上并没有不同就是了,但在视觉上有望解决glitch的问题。即粒子受到过多的引力拉扯,导致看起来像出错一般高频振动,且粒子间彼此牵引,使其效果越放越大,粒子数越多越严重,换句话说,粒子生命在相同的参数设定下,有其数量的上限。
然后在学习过程中,这个网站吸引了我的注意
于是乎,去了解了一下,其所谓的微分方程(Lotka-Volterra equation)别称掠食者—猎物方程,是用来描述族群繁衍时的壮大跟萎缩,想当然的,猎物被吃光的话,掠食者就会自然下降,接着猎物又慢慢增加,以此循环。透过这两个族群的关係,它产生了一张XY轴的图形,看起来酷似星空,我也产生了一种欲望:
让它动起来!
然后它就被我改的面目全非了哈哈哈
深入了解
在这个二元二次方程式中,有四个参数,分别为alpha、beta、gamma、delta,代表了族群的生育率及死亡率,通过调整参数,可以影响线段走向和中心点的位置。此外我也设计的一个更为直观的功能,利用滑鼠便能更方便的观察。
nullcline是什么呢
会把这拿出来说,是因为这是很重要的关键字,用这个来搜寻,能找到数学上有趣的图形方程。
可以把它理解为:Lotka Volterra的中心十字线(参考影片)
用术语描述,则是零斜线,在这条线上,物种的增减值恰好为0。并且我们通过方程式了解到,两条线分别为X=alpha/beta,Y=gamma/delta,我将其预设皆为1/2,也就是画面的正中心。
,
成品介绍
说了这么多,它其实很接近一种"纹理",在参数不变的情况下,我只有把粒子的相对位置改变,就能看到一种酷似旋转的效果,这既可以说是人眼的错觉,也可以说Lotka Volterra所添加的线段,赋予了粒子方向性。而粒子则代表了一种"光影"效果,只有粒子靠近的时候,才会照亮黑暗的画面,看见纹理。
参数调整
首先,可以尝试把Vector Size归零,你便会发现,由于线段长度归零,Lotka Volterra的效果消失了,此时可以很清楚看到粒子的运动方式,平常时,我则推荐调整至约15~30的範围。再来搭配滑鼠跟随的功能,可以观察纹理的改变,如果看不清楚的话,就按下停止动画,先让画面静止吧!
人眼错觉
因为人眼看物体有自动补祯的效果,简称脑补,才使得动画的製作有其庞大魅力,如果你认为自己被眼睛骗了,那么就将Transform Speed减少吧,透过速度的变慢,可以更清楚的看到在粒子运动时,线段是如何改变它的方向。要是还是看不清楚,就将它设为0!看哪,画面静止了,甚至,把它设定为负值,哎!时间倒退了,再也不用担心错过噜!
结语
做为开篇还是挺华丽的,很符合我的个性(XD?,后续还会出两三篇解释技术细节和系统设计,并且慢慢堆叠、构建出上述的伪粒子系统。
最后~Caco是我玩游戏用的暱称,这次的专案就像我的游乐场一样!
我是Caco,也是Jerry,下次见!