要实现文字闪烁,一个简单的办法就是给“缩放”scale写一个wiggle表达式。
但是这个效果有个问题,文字一直闪个不停,很难看清是哪几个字,那就失去了文字表意的初衷了。其实这里想要的是这种效果:
这个文字闪烁效果:一是随机闪烁,二是要留给观众时间看清是哪几个字。依然是wiggle的效果,但是需要改进表达式。
- //“可能性”表达式
- probability = 4;
- r = Math.round(random(-probability+2,1));
- v = clamp(r,0,1);
- wiggle(10,400*v)
这个表达式,向安宇称之为“可能性随机”表达式,这是一个可以简单变现可能概率的表达式,上面的这个表达式就是1/4的“可能性”,意思就是每4帧,有1帧可能会产生后面的wiggle的效果。
这个表达式很简单,只需要三个函数就可以实现。下面分开来讲:
Math.round()函数
这个函数的功能很简单,就是四舍五入取整。比如括号里的值是1.6,则返回的值是2;括号里的值是1.4,则返回的值是1 。
取整是AE表达式里很常用的函数,一般有三种方式:
- Math.round()//四舍五入取整
- Math.ceil()//向上取整
- Math.floor()//向下取整
向上取整的意思就是无论小数点后是多少,向上取最近的整数,比如值为1.2,返回值是2 ;
向下取整的意思就是无论小数点后是多少,向下取最近的整数,比如值是1.9,返回值是1 。
random()函数
这个函数的功能是在一定范围内取随机值,在Ae里,每一帧随机取一个值。
这个函数需要定义最大值和最小值,random(min,max),意思就是在min和max之间随机取一个值。
比如random(1,4)
其返回值是在1和4之间随机取一个值,可以是1,可以是1.442,可以是3.88,可以是4 。
和Math.round()结合起来使用:
- Math.round(random(-2,1))
其效果是在-2和1之间的随机值取整,其返回值是-2,-1,0,1中的一个。
clamp()函数
clamp是夹子的意思,这个函数写作Clamp(value,min,max)
其用处就是将数值限制在min和max之间,当value值小于min时候,返回值为min;当value值大于max的时候,返回值为max 。
结合上面讲到的函数,我们可以这样写:
- clamp(Math.round(random(-2,1)),0,1)
为了美观,引入变量,给Math.round(random(-2,1))赋值r,写作:
- r = Math.round(random(-2,1));
- clamp(r,0,1)
这里的r返回值有四个:-2,-1,0,1
r为-2时候,value小于0,返回值为0;
r为-1时候,value小于0,返回值为0;
r为0的时候,value等于0,返回值为0;
r为1的时候,value等于1,返回值为1。
也就是说,有1/4的机会返回值为1 。
那么,如果加上一个乘法运算,就可以有一个ture和flase的判断了。
比如,给clamp函数赋值为v,在加上一个乘法
- v = clamp(r,0,1)
- x = 400*v
那么这里的x有1/4的机会乘以1保持不变依然是400,其他时候乘以0等于0。
那么,一开始提到的文字闪烁效果,可以给scale加一个wiggle效果,让其每四帧,其中随机有一帧实现频率为10振幅为400的偏移,表达式写为:
- r = Math.round(random(-2,1));
- v = clamp(r,0,1);
- wiggle(10,400*v)
为了更好控制,引入另外一个变量probability,表达式改为:
- probability = 4;
- r = Math.round(random(-probability+2,1));
- v = clamp(r,0,1);
- wiggle(10,400*v)
这样可以直接改probability的值,值为4的时候,每4帧里随机一帧有wiggle效果,值为12时候,每12帧里随机一帧有wiggle效果。这样方便在AE里观察和控制效果,根据不同场景的应用可以改动。
这个表达式依然是为里实现随机效果,可以很简单表现随机的“可能性”,为了区分向安宇成其为“可能性随机”。命名只是为了好记忆,另外放到脚本预设里好区分,不必纠结,随便啥名字都可以。
请登录以参与评论
现在登录