After Effects 中文帮助文档

表达式示例


表达式示例:使图层旋转一圈
您可以创建表达式,而不使用其他图层中的属性。例如,您可以使图层完美地旋转一圈。

一、选择图层,按 P 以在“时间轴”面板中显示其位置属性,并按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表。

二、在表达式字段中输入以下内容:

1 [(thisComp.width/2), (thisComp.height/2)] + [Math.sin(time)*50, -Math.cos(time)*50]


表达式示例:旋转时钟的钟针
您可以使用关联器关联图层之间的旋转值以便对钟针进行动画制作,当时针逐小时移动时,分针会旋转钟面的整个圆周。如果您必须为两个钟针图层设置每个关键帧,则创建此类动画将需要很长时间,但使用关联器,只需几分钟即可完成。

一、导入或创建两个长而窄的纯色图层:时针和分针。(请参阅纯色图层和纯色素材项目。)
二、在图层结尾设置锚点。(请参阅图层锚点。)
三、移动图层以便锚点位于合成的中心。(请参阅在空间中移动图层。)
四、设置时针的旋转关键帧。(请参阅设置或添加关键帧。)
五、选择分针的旋转属性并选择“动画”>“添加表达式”。
六、将关联器拖动到时针的旋转属性。将显示以下表达式:

1 thisComp.layer(“hour hand”).rotation

七、要使分针以 12 倍于时针的速度旋转,请在表达式的结尾添加 *12,如下所示:

1 thisComp.layer(“hour hand”).rotation*12


表达式示例:将一个图层放置在其他两个图层之间
此示例表达式将一个图层放置在其他两个图层之间并使其保持在其间的平衡距离处。

一、从三个图层开始。(请参阅创建图层。)

二、为“时间轴”面板中前两个图层的位置设置动画。(请参阅运动路径。)

三、选择第三个图层,按 P 以显示位置属性,并且按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表 按钮。
四、在表达式字段中输入以下内容:

1 (thisComp.layer(1).position + thisComp.layer(2).position)/2


表达式示例:创建一系列图像

此示例指示图层位于与“时间轴”面板中下一个更高图层相同的位置,但延迟了指定时间量(在此情况下为 0.5 秒)。您可以为其他几何属性设置类似表达式。

一、从缩放到大约合成大小的 30% 的两个纯色图层开始。(请参阅纯色图层和纯色素材项目。)
二、为第一个图层的位置设置动画。(请参阅运动路径。)
三、选择第二个图层,按 P 以显示位置属性,并且按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表 按钮。
四、在表达式字段中输入以下内容:

1 thisComp.layer(thisLayer, -1).position.valueAtTime(time – .5)

通过选择最后一个图层并按 Ctrl+D (Windows) 或 Command+D (Mac OS) 5 次,将最后一个图层复制 5 次。
五、所有图层使用同一路径,且每个比上一个延迟 0.5 秒。


表达式示例:在两个图层之间创建凸出
此示例表达式将一个图层中凸出效果的 Bulge Center 参数与另一图层的位置同步。例如,您可以创建看来像在图层上方移动的放大镜的效果,当镜头(即覆盖层)移动时内容在放大镜下凸出。此表达式使用 fromWorld 方法,该方法使表达式正确运行,而无论您是否移动放大镜图层或者底层图层。您可以旋转或缩放底层图层,表达式会保持不变。

您还可以将其他效果(例如波纹)与此表达式结合使用。

一、从两个图层开始。使一个图层成为放大镜或中间有孔的类似对象并将其命名为放大镜。(请参阅创建图层。)
二、为放大镜图层的位置设置动画。(请参阅运动路径。)
三、将凸出效果应用于其他图层。(请参阅应用效果或动画预设。)
四、在“时间轴”面板中选择凸出效果的凸出中心属性,并选择“动画”>“添加表达式”,或者按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性的秒表 按钮。
五、选择默认表达式文本并键入以下内容:

1 fromWorld(thisComp.layer(“Magnifier”).position)


表达式示例:基于与摄像机的距离淡化 3D 图层的不透明度
一、将以下表达式应用于 3D 图层的不透明度属性:

1startFade = 500; // Start fade 500 pixels from camera.
2 endFade = 1500; // End fade 1500 pixels from camera.
3 try
4 { // Check whether there’s a camera
5 C = thisComp.activeCamera.toWorld([0,0,0]);
6 }
7 catch(err)
8 { // No camera, so assume 50mm
9 w = thisComp.width * thisComp.pixelAspect;
10 z = (w/2)/Math.tan(degreesToRadians(19.799));
11 C = [0,0,-z];
12 }
13 P = toWorld(anchorPoint);
14 d = length(C,P);
15 linear(d,startFade,endFade,100,0)

淡化从距摄像机 500 像素处开始,在距摄像机 1500 像素处完成。linear 插值方法用于将距离值映射到不透明度值。


表达式示例:背对摄像机时使 3D 图层不可见
一、将以下表达式应用于 3D 图层的不透明度属性:

1 if (toCompVec([0, 0, 1])[2] > 0 ) value else 0


表达式示例:背对摄像机时将图层水平翻转
一、将以下表达式应用于 3D 图层的缩放属性:

1 if (toCompVec([0, 0, 1])[2] > 0 ) value else [-value[0], value[1], value[2]]


表达式示例:在每个图层标记对缩放进行动画制作
一、将以下表达式应用于缩放属性以在每个标记中摆动图层:

1 n = 0;
2 t = 0;
3 if (marker.numKeys > 0){
4 n = marker.nearestKey(time).index;
5 if (marker.key(n).time > time) n–;
6 }
7 if (n > 0) t = time – marker.key(n).time;
8
9 amp = 15;
10 freq = 5;
11 decay = 3.0;
12
13 angle = freq * 2 * Math.PI * t;
14 scaleFact = (100 + amp * Math.sin(angle) / Math.exp(decay * t)) / 100;
15 [value[0] * scaleFact, value[1] / scaleFact];


表达式示例:在特定时间开始或停止摆动
您可以使用任何表达式代替此处所用的 wiggle 表达式,以便在特定时间开始和结束任何表达式的影响。

将以下表达式应用于属性以使其在 2 秒时开始摆动:

1timeToStart = 2;
2if (time > timeToStart)
3{
4 wiggle(3,25);
5}
6else
7{
8 value;
9}

将以下表达式应用于属性以使其在 4 秒时停止摆动:

1timeToStop = 4;
2if (time > timeToStop)
3{
4 value;
5}
6else
7{
8 wiggle(3,25);
9}

将以下表达式应用于属性以使其在 2 秒时开始摆动并在 4 秒时停止摆动:

1timeToStart = 2;
2timeToStop = 4;
3if ((time > timeToStart) && (time < timeToStop))
4{
5 wiggle(3,25);
6}
7else
8{
9 value;
10}


表达式示例:将摄像机焦平面与另一图层匹配
将以下表达式应用于摄像机图层的焦距属性,以便其焦距与到名为“target”的图层的锚点的距离相匹配:

1 target = thisComp.layer(“target”);
2 V1 = target.toWorld(target.anchorPoint) – toWorld([0,0,0]);
3 V2 = toWorldVec([0,0,1]);
4 dot(V1,V2);


点击分享到: