有时候有这样的需求:先以表达式A进行运算,然后转由表达式B进行运算。
那么,如何让同一个图层的运算在两个表达式之间转换?
方法是利用linear()
上图的例子中,画笔先是以wiggle做随机运动,然后无缝转接到圆周运动,怎样做到的?
先把绘制圆圈的动画做出来:
1、新建合成,新建solid,添加效果write-on,设置好画笔的粗细、硬度、持续时间等。
2、新建空对象,命名为“circle”,将Anchor Point的x轴改为300,给Rotation添加表达式“time*360”,这样就得到一个每秒让画面中心点旋转一周的空对象。
3、“option/alt + left-click”点开效果write-on的画笔的表达式面板,利用拾取器拾取空对象circle。这时候画面并没有绘画动作,因为circle虽然在旋转,但是其锚点和位置值都没有变化,我们实际上需要的是空对象circle的世界空间位置,所以在表达式后面写上“.toWorld([0,0,0])”,这时候的表达式为:
thisComp.layer("circle").toWorld([0,0,0])
预览,可以看到一个绘制圆圈的动画。接下来添加wiggle表达式,并让画笔从随机运动转化到绘制圆圈上来,我们需要一个滑块控制。
4、添加空对象,命名为“control”,添加效果slider control。更改Brush Position下的表达式:
scr = thisComp.layer("control").effect("Slider Control")("Slider"); a = wiggle(5,300); b = thisComp.layer("circle").toWorld([0,0,0]); linear(scr, 0, 100, a, b)
这个表达式意味着:
当slider control的值为0的时候,表达式a在起作用;
当slider control的值为100的时候,表达式b在起作用;
通过给slider control添加关键值,让其值从0到100变化,就实现了表达式a到表达式b之间的转换。
通过给slide control添加关键帧,可以在两个表达式之间来回转换:
还可以通过给slider control一个0~100之间的中间值,让画笔同时受到两个表达式的影响,并且可以通过这个数字的大小,决定在两个表达式之间哪个表达式影响大一些,比如给slider control一个80的值,得到这样的效果:
请登录以参与评论
现在登录