效果图
正文
这个小练习演示了如何让一串对象遵循由四个空(Null)层组成的伪(模拟)贝塞尔曲线。首先创建四个空层。“Null 1” 和 “Null 4” 将是锚点,“Null 2” 是 “Null 1” 的句柄,“Null 3” 是 “Null 4” 的句柄。让 “Null 1” 成为 “Null 2” 的父结点(parent),让 “Null 4” 成为 “Null 3” 的父结点(parent)。创建一个小的纯色层(我用 25x25 大小),并给纯色层应用了一个圆形蒙版(它增强了“珍珠串”的效果)。将这个表达式应用于位置属性:
N1 = thisComp.layer("Null 1");
N2 = thisComp.layer("Null 2");
N3 = thisComp.layer("Null 3");
N4 = thisComp.layer("Null 4");
p0 = N1.position;
p1 = N2.toWorld(N2.anchorPoint);
p2 = N3.toWorld(N3.anchorPoint);
p3 = N4.position;
c = 3*(p1 - p0);
b = 3*(p2 - p1) - c;
a = p3 - p0 - c - b;
t = index/(thisComp.numLayers - 3);
((a*t +b )*t + c)*t + p0
纯色层将移动到伪贝塞尔曲线的中间。复制纯色层若干次,使得纯色层(小圆)将沿着曲线展开。移动锚点和手柄,观察曲线如何变化。你甚至可以旋转锚点。关于这个公式 t 表示曲线上的位置,它的取值范围是 0 到 1 。在 t = 0 时,位置是 “Null 1”,在 t = 1 时位置是 “Null 4” 。所以如果你想让某个东西沿着曲线移动,你只需将这行从层索引派生出来 t 的代码,用某个生成范围从 0 到 1 的值的函数来替换它。
你也可以修改代码,使用滑块控件,它已经被添加到 “Null 1” 来控制压缩/展开。设置滑块的范围从 -1 到 1,并替换
t = index/(thisComp.numLayers - 3);
为以下代码
t0 = index/(thisComp.numLayers - 3);
s = N1.effect("Slider Control").param("Slider");
if(s < 0){
s += 1;
t = t0*s;
}else{
t = s + t0 - s*t0;
}
你可以在滑块上添加一个这样的振荡表达式,以使纯色层(小圆)来回波动:
amplitude = .5;
period = 1.0 //seconds
amplitude*Math.sin(time*Math.PI*2/period);
必要时调整振幅和周期。
(完)