您当前的位置:首页 > 计算机 > 软件应用 > 音像剪辑

AE用表达式制作病毒落水弹跳动画

时间:01-15来源:作者:点击数:

效果图:

AE用表达式制作病毒落水弹跳动画

函数释义

numKeys:关键帧的数量,返回值是一个整数,比如在某属性上打了两个关键帧,该属性下的numKeys=2。

AE用表达式制作病毒落水弹跳动画(1)

离时间线指针最近的关键帧的的索引(序号),返回值是一个整数。

AE用表达式制作病毒落水弹跳动画(2)

第n个关键帧所在的时间,输入n的值,输出时间的值,单位默认是秒。比如在一个属性中,打下两个关键帧,第2个关键帧所在的时间是3秒,key(2).time=3。

AE用表达式制作病毒落水弹跳动画(3)

表达式:

amp = .1; //定义一个叫amp(振幅)的变量,赋值0.1。

freq = 2.0; //定义一个叫freq(频率)的变量,赋值2.0。

decay = 2.0; //定义一个叫decay(衰减)的变量,赋值2.0。

n = 0; //定义一个叫n的变量,初始值为0。

n = nearestKey(time).index; //,n默认表示离时间线最近的关键帧的序号,本质是一个数字。

t = time – key(n).time;//t是时间线与某个关键帧所在时间的差值。

thisComp.frameDuration/10 //此合成帧时长的十分之一,如果一个合成共100帧,时长5秒,则thisComp.frameDuration/10=5/100/10=0.005。

v = velocityAtTime(key(n).time – thisComp.frameDuration/10); //v就表示在某序号为n的关键帧前0.005秒时的速度。

value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t); //属性值+弹性表达式运算生成曲线所对应的值。

其中v、amp与弹跳的幅度(波浪线波峰波谷的高度差)正相关,v、amp值越大,波浪线浪越高,弹跳幅度越大;freq与波浪线的频率(两个波峰的间距)正相关,freq值越大,出现波峰的频率越高,波峰间的间距越小,浪越急,弹跳速度越快;PI就是那个π,换个别的数也行,decay值越大,衰减速度越快,也就是波越快变平,弹性越容易消失。

AE用表达式制作病毒落水弹跳动画(4)
AE用表达式制作病毒落水弹跳动画(5)

1. 当无关键帧时,numKeys=0,开始判断n是否为0,在一开始的定义中,n=0,故最后t=0,n当然也不大于0,最后执行value值,也就是属性本身的值。

AE用表达式制作病毒落水弹跳动画(6)

2.1 当numKey=1的时候,有一个关键帧,时间线在关键帧之前或者之后。当时间线在关键帧之前时,key(1).time>time,n—(即n=n-1),n=1-1=0,所以t=0…最后执行value。

AE用表达式制作病毒落水弹跳动画(7)
AE用表达式制作病毒落水弹跳动画(8)

2.2 当时间线在关键帧之后时,key(1).time

“v = velocityAtTime(key(1).time – thisComp.frameDuration/10);

value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);“

关键帧前的瞬时速度v为0,因为关键帧前的value值并没有产生变化,所以不会有速度,因此“value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);“等价于”value+0“,最后执行的仍然是value值。

AE用表达式制作病毒落水弹跳动画(9)

3. 关键帧数量为2,即numKey=2,时间线的位置

A.位于第一个关键帧之前(key(1).time>time,n=n-1)

B.位于两个关键帧之间但离第一个更近(key(1).time

C.位于两个关键帧之间但离第二个更近(key(2).time>time,n=n-1)

D.位于第二个关键帧后面(key(2).time

AE用表达式制作病毒落水弹跳动画(10)

C情形下得到的t值是时间线与关键帧a所在时间的时间差,D情形下得到的t值是时间线与关键帧b所在时间的时间差。并且最后都参与弹性曲线部分的运算,D情形下弹性曲线以b为起点,C情形下弹性曲线以a为起点。

AE用表达式制作病毒落水弹跳动画(11)
AE用表达式制作病毒落水弹跳动画(12)

关键帧a作为第一个关键帧,帧前的瞬时速度v同样是0,弹性曲线“value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t)”得到的值同样等价于value,所以表达式在第一个关键帧后面注定不会产生曲线。

当关键帧有三个甚至更多时,也会在除第一个关键帧之后的全部关键帧后面产生曲线。

AE用表达式制作病毒落水弹跳动画(13)

不需要在对多个关键帧之间产生弹性曲线来做弹跳补间,只需把弹性加在某个属性运动的末尾。

AE用表达式制作病毒落水弹跳动画(14)

不管你n是否大于0,只要小于或等于0,即说明当前离时间线最近的关键帧是第一个关键帧,且时间线在它前面。

如果其他情形下,不管时间线在两个关键帧之间还是之后,通通都会参与弹性曲线运算,区别只在于,时间线在头两个关键帧之间时,也就是第一个关键帧之后,第二个关键帧之前时,n到最后都等于1,t都是时间线与第一个关键帧所在时间的差值,但都因为第一个关键帧前的瞬时速度v为0,导致最后的运算结果依然只是value。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门