欢迎光临散文网 会员登陆 & 注册

【Aegisub】仿一些AE的分形杂色效果

2023-07-10 15:51 作者:多华宫与火火里  | 我要投稿


        分形噪声有着相当多的应用,所以用aegisub做特效时实现一些分形杂色效果也有很多用,就算是像素特效在现在也能更舒服的做出来(尤其是这一点在以后的专栏会有更具体的介绍,就算每一帧"像素"随便动也不必用成千上万行就能实现),当然本文就大概提一些分形杂色效果即可。

        首先AE的分形杂色可以设定分形类型杂色类型对比度亮度溢出变换复杂度子设置演化,所以现在也设定这些东西。现在设定4种分形类型(fractal type):基本(basic)、湍流平滑(turbulent smooth)、湍流基本(turbulent basic)、湍流锐化(turbulent sharp),设定4种杂色类型(noise type):块(block)、线性(linear)、柔和线性(soft linear)、样条(spline),设定4种溢出(overflow):剪切(clip)、柔和固定(soft clamp)、反绕(wrap back)、允许HDR结果(allow hdr results),设定子设置(sub settings):子影响(sub influence)、子缩放(sub scaling)、子旋转(sub rotation)、子位移(sub offset)、中心缩放比例(center subscale),当然其他对比度、亮度、变换、复杂度、演化也给出设置。

        当然扯这么多设置很烦,不如直接来一点点地看。先设定分形类型都是基本(basic),然后比如块状的噪声就大概是这样的:

那么这是怎么得到的呢。首先要生成噪声当然需要每个坐标是整数的点都对应一个确定的数值,那么就可以用一个哈希函数了,关于这一点之前讲柏林噪声时已经讲过了,哈希函数当然从理念上讲就是传入相同的参数就得到相同的返回值,传入不同的参数就得到不同的返回值,实际上只需要尽量做到这个即可。然后块状噪声就是一层层叠加起来的,假设只有一层的话、意味着复杂度(complexity)为1,比如样子是这样的:

比如现在每个方块内的像素都是同样的颜色(对应同样的噪声值),还是和之前讲的噪声一样,因为这是二维噪声,所以是平面上每一个点都对应一个噪声值,所以上面这张图也是由一堆像素组成,只不过在"每个方块"内的像素所对应的噪声值都一样。现在为了更方便观察和理解,将"块"调大一点:

这样就是一层了,那么当然可以继续一层层的叠加,而叠加的就是子噪声了,子噪声当然需要缩放了(不然有什么意义,就像之前叠加柏林噪声一样,每一层都要在之前的基础上缩放一下),设定子缩放是0.57(那么就会有错开的效果):

这样就是两层叠加的结果,所以现在的复杂度就是2。当然如果设定子缩放是0.5的话,当然第二层的"方块"就会刚好是第一层的一半了:

这样就没有错开的效果了,所以一般当然要设定子缩放不为0.5,就默认0.57,那如果叠加多一层,那么第三层的"方块"的就是在第二层的基础上缩放0.57了:

这样现在的复杂度就是3了,当然就算是复杂度设定为一个小数也可以,比如2.3,那怎么一层层叠加还可以有小数呢,当然就只不过是改变每一层叠加的比例了。就比如2.3的复杂度,那说明是三层的叠加,只不过这三层是按照1:1:0.3叠加的,所以第三层就占得比较少,复杂度2.3就是这样的:

而复杂度是2.7的话,就是

可以看出来第三层占了更重的份量,而如果复杂度是2.16就是:

显然第三层叠加的效果就不怎么看得见了。然后这样就能知道了,子位移和子旋转就是对叠加的噪声进行平移和旋转,比如如果子平移设定为0、复杂度为2当然就是刚才那样的:

而给子位移设定一些y的平移的话,就有:

再设定一点x的偏移的话:

显然第二层的噪声就在x、y方向上都进行了一定的平移、然后再和第一层叠加的,这很好理解。所以子旋转也一样,如果设定子平移为0、复杂度为2、然后设定一点子旋转就有:

当然因为是设定的子旋转,所以很明显第一层是没有旋转的。而现在如果复杂度设为3就有:

第三层的旋转是在第二层的基础上的,所以是错开的,每一层旋转角度都是在上一层的基础上的。然后子影响当然也是设定叠加的权重的,比如如果子影响设定是0.9、复杂度是3的话,那么叠加的时候是按照1:0.9:(0.9*0.9) 即1:0.9:0.81叠加的,而如果子影响设定是0.9、复杂度是2.6的话,叠加时就是按照1:0.9:(0.9*0.9*0.6) 即1:0.9:0.486叠加的,因为设定子影响是0.9的话,那么第i+1层就是第i层的0.9。这样就有了块状的噪声了,每一个点都对应一个噪声值,所以每个像素点都可以上色,然后就有了这样的噪声了。然后就可以设定演化了,也就是让噪声动起来,由于需要平滑自然的过渡,所以当然还是用插值就可以了,用双三次插值即可。就能做出刚刚的效果了

复杂度为5、第一层"块"设定比较小

        当然还有比如对比度、亮度可以设定。比如原本是这样的图

把对比度设为1.6就有:

用肉眼对比一下两个图就知道(那么不用肉眼要用啥??),"黑的"地方更黑了、"白的"地方更白了。这很简单,黑色是0白色是1然后0.5是中灰,假设现在每个像素对应的0到1的数值名叫做val,那现在添加对比度的计算,也就可以用(val-0.5)*contrast+0.5,其中contrast就是对比度的数值,显然这样算,小于0.5的部分经过计算以后就会更小、大于0.5的部分经过计算以后会更大,也就让"黑的"地方更黑、"白的"地方更白了。当然由于这样计算以后有些点对应的数值就不会在0到1这个范围内了,所以需要给出一个溢出设定,也就是将溢出0到1范围的数字重新映射回0到1,设定4种溢出(overflow):剪切(clip)、柔和固定(soft clamp)、反绕(wrap back)、允许HDR结果(allow hdr results),比如剪切(clip)就是clamp而已,也就是小于0的数直接取0、而超过1的数就直接取1即可。

        然后亮度也可以设定,首先是对比度为1(默认)、亮度为0(默认)的图:

现在设定对比度为1,亮度为0.2就有:

那么这个亮度是怎么算的呢,很简单直接val+brightness即可,假设val在0到1,而你再加一个brightness的话,最多最多也就让brightness等于1吧,因为0+1就已经等于1了、也就是如果你加1其实所有的点都会变成白色了,也就是:

看见了吗,这张全白的图啊啊啊啊啊啊

当然亮度也可以是个负的,也就是val减掉一个数,那么val在0到1的话brightness最少最少就等于-1吧,因为1-1已经等于0了,也就是只要你brightness等于-1,图里所有的点都会是黑色的了。

        OK,块状的噪声差不多就这样吧。现在继续,还是设定分形类型是基本(basic),然后设定噪声类型是线性,为了方便对比,设定复杂度是1, 对比看看块状和线性的区别:

块状
线性

显然,线性就是线性插值而已,这个之前讲过的。如果还是看不太清楚,可以把噪声缩放一下

然后噪声类型设定为柔和线性的话,就有:

可以看到,噪声图就更加平滑了。而噪声类型设定为样条就会有更加平滑的结果:

不如直接对比一下块状的和样条的区别:

当然还是用双三次插值即可。所以很显然了,AE中的噪声是基于值噪声,就算利用值噪声,也可以做出十分平滑的噪声,以至于看起来和之前讲过的柏林噪声区别不大。

        这样分形类型为基础(basic)的噪声大概就介绍了。因为刚刚讲的都是基于分形类型为基础(basic)的噪声,现在设定分形类型为湍流锐化,并将基本与湍流锐化进行对比:

如何把原本的噪声变为AE湍流的样子呢,这个也很简单,对于湍流基本(turbulent basic)来说,假设原本的噪声值是val,那么用math.abs(val-0.5)*2即可得到湍流基本(turbulent basic)的效果,也就是:

这很好理解,因为math.abs(val-0.5)*2就能让0.5附近的数值发生突变。然后比如再在此基础上开方,就可以得到湍流锐化(turbulent sharp)效果了,即用( math.abs(val-0.5)*2 ) ^ 0.5就有:

这很简单,零点几的数开方以后会变大,所以噪声图变白了(像素点对应的数值更接近于1了)

        那当然现在就可以用不同的噪声类型了,就像刚刚固定分形类型是basic、改变噪声类型一样。现在有了湍流的分形类型,也可以改变噪声类型来得到各种各样的分形杂色效果,比如用线性就有:

        除此之外,还可以设定反色、也就是反转(invert)

这还不简单?之前也讲过啊,用"1-"啊、一减啊、1-val啊,不就反过来了。当然这样不用线性好看一些,用样条吧:

        总的来说,设定这么多东西已经能做出相当多的杂色效果了。你想想,分形类型4种、杂色类型4种、溢出4种,光是这些随便也有一堆效果了,更别说变换(缩放平移旋转)、复杂度(最少1到5都有相当明显的不同)、对比度、亮度、子设置(一堆设置)、演化、反色、循环演化,这不是有千变万化的效果了吗?

【Aegisub】仿一些AE的分形杂色效果的评论 (共 条)

分享到微博请遵守国家法律