【Aegisub】粒子系统之简单烟花效果

本来是没打算讲这的,看到有一些人不知道怎么做烟花效果,不过烟花有很多种,不知道大家想做哪样的,就挑一钟常见的,随便乱做一下就是了

比方说要做一个烟花,那么显然可以将整个过程分成两个部分,第一是发射阶段第二是爆炸阶段。就先看爆开的阶段怎么做,首先设定比如有多少束粒子、每一束粒子总共有多少个。可以随机设定粒子束在35条到40条,然后比如设定每一条都有160个粒子,那么接下来随便算一算每一条粒子束的每一个粒子的坐标即可。所以可以外层for遍历烟花条数内层for遍历每条的粒子个数,然后计算一个个粒子的坐标。对于每一条粒子束,假设一开始粒子从(0,0)飞出来的,可以设定它以一个随机的速度飞出去,比如你设定一个最大的vx、vy,然后随机出的vx和vy就在0到最大值之间、方向也是随机的正负

然后比如再设定一下衰减就可以算算每个粒子的坐标了,比方说每个粒子的速度vx是上一个粒子的0.975,这样x方向最后就几乎没有速度了

当然这些数值你可以自己调节。然后每次的坐标就累积起来就行了

每条粒子束,粒子一开始从x=0,y=0开始飞出去,下一个粒子的坐标就可以这样随便的算一下
然后每一条粒子束的颜色都可以有一定程度的随机,比如

所以现在烟花爆炸部分的所有曲线不就有了吗,对于每一条,设定local x,y=0,0、设定local vx,vy随机速度、设定local c随机颜色,然后再对于每一条的每一个粒子,衰减vx,vy并累加出x,y,并将坐标信息和颜色信息放进表里,这样就有了所有需要的粒子了:


有了所有粒子以后,就可以通过调节retime来设定每个粒子的开始时间结束时间。比如你可以设定整个爆炸部分的持续时间是2.5秒即2500ms,那如果每个粒子开始时间的间隔是一样的话,那第 i 个粒子的开始时间可以是(i-1)/(n-1)*2500(假设一条有n个粒子),当然也可以设定一定的加速度,比如第 i 个粒子的开始时间可以是((i-1)/(n-1))^1.3*2500这样粒子开始出现得就更快后面的粒子就出现的越来越慢。那结束的时间也一样的随便调节一下就行了,比如开始时间是(i-1)/(n-1)*2500、结束时间是(i+30)/(n-1)*2500这之类的

那现在很明显粒子的大小可以调节一下,因为现在的每个粒子都一样大看起来不太可爱,所以可以随便调一下大小,比如让每个粒子在持续时间内从原本的大小变成原来的一半,比如\fsc200\t(,\fsc100)或者直接利用fad淡出效果,因为每个粒子的开始时间是不同的而fad效果会错开淡出的时间,所以每个粒子的显示当然也错开了。当然fad也随便设定一下就行,如\fad(0,1111)

唉反正随便瞎做嘛。这样视觉上不仅有了粒子大小的不同还有了一点淡出的效果。然后可以在前面加个头头,就再加一行模板行,然后控制每个粒子的开始时间和结束时间,当然下一个粒子的开始时间就是此时粒子的结束时间,那么就可以有头头了:

然后比如可以让这些星星在是最后一个粒子的时候持续时间长一点,让它们随机的闪烁一下,比如可以用之前我讲过的随机autotag函数让透明度随机的变化就行了

然后其实你想控制一下烟花的半径也行,比如你可以改变你设定的vx,vy最大值,也可以直接大概计算一下烟花此时的半径,然后缩放一下得到相应的半径,比如x和y都乘以2半径就扩大了一倍。算半径的话,比如就看在x方向最多能走多少,根据你设定的vx最大值来,每个粒子的vx都是上一个的0.975倍,那一条一共有n个粒子,到最后第n个粒子时x方向走了多少用等比数列求一下和就行了,随便估计一下半径就行了

那一个烟花除了爆炸阶段还有发射阶段,发射阶段随便算一算就行了嘛,设定个发射速度设定个加速度之类的。唉反正随便瞎做嘛。就一条竖线而已

当然比如你也可以对坐标加一些随机,那么就会得到这样的效果

反正大家可以发挥自己的想象力做各种效果嘛
然后有了一个烟花以后,就可以做很多个烟花放来放去的效果。比如瞎写个函数,让隔一定时间就有一定的概率发射一个烟花,或者每隔一定范围的随机时间就放一个烟花之类的。
其它代码啥的就在相应的视频里讲
这篇专栏对比其它专栏看起来也太短了吧