【AE】透明过渡表达式
transition = 20;
if (marker.numKeys<2){
tSecs = transition / ( 1 / thisComp.frameDuration);
linear(time, inPoint, inPoint + tSecs, 0, 100) - linear(time, outPoint - tSecs, outPoint, 0, 100)
}else{
linear(time, inPoint, marker.key(1).time, 0, 100) - linear(time, marker.key(2).time, outPoint, 0, 100)
}
一句一句来:
transition = 20;
这里定义的是帧数,也就是多少帧完成这个渐变过渡。呵呵,很帅吧,别人都是用秒。
if (marker.numKeys<2){}
判断标记点数量,如果小于2执行大括号里的内容。为什么这么做呢?其实这个表达式可以用于两种情况:当默认时,没有标记点,表达式会在图层的最前20帧和最后20帧添加过渡动画;如果图层有标记,那么表达式会在图层开始到第一个标记和第二个标记到图层结束添加过渡效果。
tSecs = transition / ( 1 / thisComp.frameDuration);
把帧数转换成秒,这个表达式很新,可以用在很多精确控制的地方。thisComp.frameDuration 很多地方都解释为“返回画面的持续时间”,这个比较容易让人误解,我们连起来看 1 / thisComp.frameDuration 就当帧率好了,
当你的对象图层设置为25帧每秒的时候,1 / thisComp.frameDuration=25,那前面定义的帧数除以这个帧率就得到秒了。
linear(time, inPoint, inPoint + tSecs, 0, 100) - linear(time, outPoint - tSecs, outPoint, 0, 100);
这句涉及到linear()函数,它的解释如下:
Number or Array linear(t, tMin, tMax, value1, value2) {t, tMin和 tMax are 数, value1和value2 是数或数组} 当 t <= tmin时返回value1;当t >= tMax时,返回value2 ;当tMin < t < tMax 时, 返回 value1和value2 的线性联合。
那我们根据上面那个函数的解释,看看linear(time, inPoint, inPoint + tSecs, 0, 100)这句。
inPoint 其实就是对象图层的进入点时间,整句的意思就是,时间线在对象图层的入点时间前,函数返回值为0,在入点时间与入点时间加定义帧数时间中间时,函数返回值在0到100之间线性增长,在入点时间加定义帧数时间之后为100,这个表达式是放到透明度属性中的,所以函数返回值就是透明度值。
linear(time, outPoint - tSecs, outPoint, 0, 100)
这句和上句差不多,就是outPoint为对象图层的结束点。
linear(time, inPoint, inPoint + tSecs, 0, 100) - linear(time, outPoint - tSecs, outPoint, 0, 100);
这句中间的那个“-”要注意,当时间线经过 inPoint+tSecs 后前面那个linear()返回值已经是100了,所以当时间线在 outPoint-tSecs 后要减去第二个linear()返回值,这样才能让整体值回到0。
else{}
与上个IF连用,当IF条件不成立的时候执行大括号里的内容,也就是说当有标记的时候执行。
linear(time, inPoint, marker.key(1).time, 0, 100) - linear(time, marker.key(2).time, outPoint, 0, 100)
和上面介绍的那句差不多,只不过 marker.key(1).time 取的是第一个标记点时间, marker.key(2).time 取的是第二个标记点时间。
似乎看懂了
不错
表达式估计没多少人喜欢
原谅我看不懂哈
要图文并茂,最好有个相关的应用案例po上来