本节中的许多示例都基于 Dan Ebberts 提供的表达式。

表达式示例的在线资源

Dan Ebberts 在其 MotionScript 网站上提供了学习如何使用表达式的示例表达式和教程。例如,Dan 提供了一个有关冲突检测的精彩页面

Colin Braley 在其网站上提供了一个教程和示例项目,其中演示如何使用表达式以一种看似自然的方式让一个图层排斥其他图层。

AE Enhancers 论坛提供了有关表达式的多个示例和许多有用信息,以及脚本和动画预设。在 AE Enhancers 论坛上的这篇帖子中,Paul Tuersley 提供了一个演示如何使用表达式成群地为多个图层设置动画的教程和示例项目。

Rick Gerard 在其网站上提供了一个示例,其中演示沿底滚动方形对象以便边线与底平面保持接触。

Carl Larsen 在 Creative COW 网站上提供了一个视频教程,其中演示如何使用表达式以及进行父处理将一组轮的旋转与车辆的水平运动相关联。

Chris Zwar 在其网站上提供了一个有关将静止图像或视频自动排列到网格中(像视频墙一样)的示例项目。您可以使用连接到一系列表达式的滑块轻松调整位置和间距。项目中有三个合成,一个用于静止,一个用于视频,一个用于创建自动情节提要,其中,视频按用户定义的间隔进行采样并且对齐到网格中。

JJ Gifford 的网站提供了多个演示如何使用表达式的示例项目。

Maltaannon (Jerzy Drozda, Jr.) 在他的网站上提供了一个视频教程,其中演示了如何通过表达式使用“将音频转换为关键帧”命令的结果创建音量计。

Harry Frank 在其 graymachine 网站上提供了一个教程,演示如何使用表达式从外部文本文件读取数据。

表达式示例:使图层旋转一圈

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

  1. 选择图层,按 P 以在“时间轴”面板中显示其位置属性,并按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表。
  2. 在表达式字段中输入以下内容:
      [(thisComp.width/2), (thisComp.height/2)] + [Math.sin(time)*50, -Math.cos(time)*50]

表达式示例:旋转时钟的钟针

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

  1. 导入或创建两个长而窄的纯色图层:时针和分针。(请参阅纯色图层和纯色素材项目。)
  2. 在图层结尾设置锚点。(请参阅图层锚点。)
  3. 移动图层以便锚点位于合成的中心。(请参阅在空间中移动图层。)
  4. 设置时针的旋转关键帧。(请参阅设置或添加关键帧。)
  5. 选择分针的旋转属性并选择“动画”>“添加表达式”。
  6. 将关联器拖动到时针的旋转属性。将显示以下表达式:
      thisComp.layer("hour hand").rotation
  7. 要使分针以 12 倍于时针的速度旋转,请在表达式的结尾添加 *12,如下所示:
      thisComp.layer("hour hand").rotation*12

表达式示例:将一个图层放置在其他两个图层之间

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

  1. 从三个图层开始。(请参阅创建图层。)

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

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

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

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

  1. 从缩放到大约合成大小的 30% 的两个纯色图层开始。(请参阅纯色图层和纯色素材项目。)
  2. 为第一个图层的位置设置动画。(请参阅运动路径。)
  3. 选择第二个图层,按 P 以显示位置属性,并且按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表 按钮。
  4. 在表达式字段中输入以下内容:
      thisComp.layer(thisLayer, -1).position.valueAtTime(time - .5)
  5. 通过选择最后一个图层并按 Ctrl+D (Windows) 或 Command+D (Mac OS) 5 次,将最后一个图层复制 5 次。

所有图层使用同一路径,且每个比上一个延迟 0.5 秒。

Dan Ebberts 在其 MotionScript 网站上提供了用于创建图像追踪的更多示例和技术。

表达式示例:在两个图层之间创建凸出

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

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

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

表达式示例:基于与摄像机的距离淡化 3D 图层的不透明度

  1. 将以下表达式应用于 3D 图层的不透明度属性:
      startFade = 500; // Start fade 500 pixels from camera. 
      endFade = 1500;  // End fade 1500 pixels from camera. 
      try
      { // Check whether there's a camera
          C = thisComp.activeCamera.toWorld([0,0,0]); 
      }
      catch(err)
      { // No camera, so assume 50mm
          w = thisComp.width * thisComp.pixelAspect; 
          z = (w/2)/Math.tan(degreesToRadians(19.799)); 
          C = [0,0,-z]; 
      } 
      P = toWorld(anchorPoint); 
      d = length(C,P); 
      linear(d,startFade,endFade,100,0)

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

表达式示例:背对摄像机时使 3D 图层不可见

  1. 将以下表达式应用于 3D 图层的不透明度属性:
      if (toCompVec([0, 0, 1])[2] > 0 ) value else 0

Dan Ebberts 在其 MotionScript 网站上说明了此表达式。

表达式示例:背对摄像机时将图层水平翻转

  1. 将以下表达式应用于 3D 图层的缩放属性:
      if (toCompVec([0, 0, 1])[2] > 0 ) value else [-value[0], value[1], value[2]]

表达式示例:在每个图层标记对缩放进行动画制作

  1. 将以下表达式应用于缩放属性以在每个标记中摆动图层:
      n = 0; 
      t = 0; 
      if (marker.numKeys > 0){ 
          n = marker.nearestKey(time).index; 
          if (marker.key(n).time > time) n--; 
      } 
      if (n > 0) t = time - marker.key(n).time; 
        
      amp = 15; 
      freq = 5; 
      decay = 3.0; 
        
      angle = freq * 2 * Math.PI * t; 
      scaleFact = (100 + amp * Math.sin(angle) / Math.exp(decay * t)) / 100; 
      [value[0] * scaleFact, value[1] / scaleFact];

表达式示例:在特定时间开始或停止摆动

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

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

timeToStart = 2;
if (time > timeToStart)
{
  wiggle(3,25);
}
else
{
  value;
}

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

timeToStop = 4;
if (time > timeToStop)
{
  value;
}
else
{
  wiggle(3,25);
}

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

timeToStart = 2;
timeToStop = 4;
if ((time > timeToStart) && (time < timeToStop))
{
  wiggle(3,25);
}
else
{
  value;
}

表达式示例:将摄像机焦平面与另一图层匹配

  1. 将以下表达式应用于摄像机图层的焦距属性,以便其焦距与到名为“target”的图层的锚点的距离相匹配:
      target = thisComp.layer("target"); 
      V1 = target.toWorld(target.anchorPoint) - toWorld([0,0,0]); 
      V2 = toWorldVec([0,0,1]); 
      dot(V1,V2);

Dan Ebberts 在其 Motionscript 网站上详细说明了此表达式示例。

本产品经 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 许可  Twitter™ 与 Facebook 中的内容不在 Creative Commons 的条款约束之下。

法律声明   |   在线隐私策略