用户指南 取消(C)

表达式示例

  1. After Effects 用户指南
  2. Beta 版
    1. Beta 版项目概述
    2. After Effects Beta 版主页
    3. Beta 版中的功能
      1. “属性”面板(Beta 版)
  3. 快速入门
    1. After Effects 快速入门
    2. After Effects 的新增功能 
    3. 发行说明 | After Effects
    4. After Effects 系统要求
    5. After Effects 中的键盘快捷键
    6. 支持的文件格式 | After Effects
    7. 硬件建议
    8. 适用于 Apple Silicon 的 After Effects
    9. 规划和设置
    10. 设置和安装
  4. 工作区
    1. 常规用户界面项
    2. 了解 After Effects 界面
    3. 工作流程
    4. 工作区、面板和查看器
  5. 项目与合成
    1. 项目
    2. 合成基础知识
    3. 预合成、嵌套和预渲染
    4. 使用合成分析器查看详细的性能信息
    5. CINEMA 4D 合成渲染器
  6. 导入素材
    1. 准备并导入静止图像
    2. 从 After Effects 和 Adobe Premiere Pro 导入
    3. 导入和解释视频与音频
    4. 准备和导入 3D 图像文件
    5. 导入和解释素材项目
    6. 使用素材项目
    7. 使用“场景编辑检测”检测编辑点
    8. XMP 元数据
  7. 文本和图形
    1. 文本
      1. 设置字符格式和“字符”面板
      2. 文本效果
      3. 创建和编辑文本图层
      4. 设置段落格式和“段落”面板
      5. 凸出文本和形状图层
      6. 为文本设置动画
      7. 文本动画的示例和资源
      8. 实时文本模板
    2. 动态图形
      1. 在 After Effects 中使用动态图形模板
      2. 使用表达式在动态图形模板中创建下拉列表
      3. 使用“基本属性”创建动态图形模板
      4. 替换动态图形模板和基本属性中的图像和视频
  8. 绘图、绘画和路径
    1. 形状图层、路径和矢量图形的概述
    2. 绘画工具:笔刷、仿制图章和橡皮擦
    3. 将形状描边椎体化的方法
    4. 形状图层的形状属性、绘画操作和路径操作
    5. 使用“位移路径”形状效果更改形状
    6. 创建形状
    7. 创建蒙版
    8. 使用内容识别填充面板,移除视频中的对象
    9. Roto 笔刷和调整遮罩
  9. 图层、标记和摄像机
    1. 选择和排列图层
    2. 混合模式和图层样式
    3. 3D 图层
    4. 图层属性
    5. 创建图层
    6. 管理图层
    7. 图层标记和合成标记
    8. 摄像机、光和目标点
  10. 动画、关键帧、运动跟踪和抠像
    1. 动画
      1. 动画基础知识
      2. 使用人偶工具制作动画
      3. 管理形状路径和蒙版并对其进行动画制作
      4. 使用 After Effects 为 Sketch 和 Capture 形状制作动画
      5. 分类动画工具
      6. 使用数据驱动的动画
    2. 关键帧
      1. 关键帧插值
      2. 设置、选择和删除关键帧
      3. 编辑、移动和复制关键帧
    3. 运动跟踪
      1. 跟踪和稳定运动
      2. 人脸跟踪
      3. 蒙版跟踪
      4. 蒙版引用
      5. 速度
      6. 时间拉伸和时间重映射
      7. 时间码和时间显示单位
    4. 抠像
      1. 抠像
      2. 抠像效果
  11. 透明度与合成
    1. 合成和透明度概述及资源
    2. Alpha 通道、蒙版和遮罩
  12. 调整颜色
    1. 颜色基础知识
    2. 使用 Adobe Color Themes 扩展
    3. 色彩管理
    4. 颜色校正效果
  13. 效果和动画预设
    1. 效果和动画预设概述
    2. 效果列表
    3. 模拟效果
    4. 风格化效果
    5. 音频效果
    6. 扭曲效果
    7. 透视效果
    8. 通道效果
    9. 生成效果
    10. 过渡效果
    11. 果冻效应修复效果
    12. 模糊和锐化效果
    13. 3D 通道效果
    14. 实用效果
    15. 遮罩效果
    16. 杂色和颗粒效果
    17. 保留细节放大效果
    18. 旧版效果
  14. 表达式和自动化
    1. 表达式
      1. 表达式基础知识
      2. 了解表达式语言
      3. 使用表达式控件
      4. JavaScript 与旧版 ExtendScript 表达式引擎之间的语法差别
      5. 正在编辑表达式
      6. 表达式错误
      7. 使用表达式编辑器
      8. 使用表达式编辑和访问文本属性
      9. 表达式语言引用
      10. 表达式示例
    2. 自动化
      1. 自动化
      2. 脚本
  15. 沉浸式视频、VR 和 3D
    1. 在 After Effects 中构造 VR 环境
    2. 应用沉浸式视频效果
    3. 用于 VR/360 视频的合成工具
    4. 跟踪 3D 摄像机运动
    5. 使用 3D 设计空间
    6. 3D 变换 Gizmo
    7. 使用 3D 动画执行更多操作
    8. 使用实时引擎实时预览对 3D 设计的更改
    9. 向图形添加响应式设计 
  16. 视图和预览
    1. 预览
    2. 使用 Mercury Transmit 进行视频预览
    3. 修改和使用视图
  17. 渲染和导出
    1. 渲染和导出基础知识
    2. 将 After Effects 项目导出为 Adobe Premiere Pro 项目
    3. 转换影片
    4. 多帧渲染
    5. 自动渲染和网络渲染
    6. 渲染和导出静止图像及静止图像序列
    7. 在 After Effects 中使用 GoPro CineForm 编解码器
  18. 使用其他应用程序
    1. Dynamic Link 和 After Effects
    2. 使用 After Effects 和其他应用程序
    3. After Effects 中的同步设置
    4. After Effects 中的 Creative Cloud Libraries
    5. 增效工具
    6. CINEMA 4D 和 Cineware
  19. 协作:Frame.io 和团队项目
    1. 在 Premiere Pro 和 After Effects 中协作
    2. Frame.io
      1. 安装和激活 Frame.io
      2. 将 Frame.io 与 Premiere Pro 和 After Effects 配合使用
      3. 常见问题解答
    3. 团队项目
      1. 开始使用团队项目
      2. 创建团队项目
      3. 使用团队项目进行协作
  20. 内存、存储、性能
    1. 内存和存储
    2. 提高性能
    3. 首选项
    4. After Effects 的 GPU 和 GPU 驱动程序要求

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

下载示例项目

下载

使图层做圆周运动

您可以创建表达式,而不使用其他图层中的属性。例如,您可以使图层围绕合成的中心旋转。

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

在表达式字段中输入以下代码片段:

var centerOfComp = [ ( thisComp.width / 2 ), ( thisComp.height / 2) ]; var circleOverTime = [ Math.sin( time ) * 50, -Math.cos( time ) * 50 ]; centerOfComp + circleOverTime;

随机摆动

“摆动”表达式是最常见的 After Effects 表达式之一。将在随机值之间摆动对象。此表达式可使您的场景看起来更加自然。将此表达式添加到图层的位置属性。

例如,摆动(频率,数量),频率是每秒摆动的次数,数量是摆动的值。因此,wiggle(2,30)表示,在任意方向,图层每秒摆动次数为 2,摆动的值为 30 像素。

使用“滑块”控件控制摆动

用滑块控制摆动

可以通过将值替换为表达式控件的链接(如滑块控件)来为表达式设置关键帧。通过将 wiggle() 表达式的第二个参数替换为滑块控件的链接,可以对行为设置关键帧以在特定时间开始和停止。

  1. 向任何图层添加滑块控制效果并将其命名为“摆动量”
  2. 将以下表达式应用于同一图层的位置:
// 使用关联器创建到滑块的“effect(...)”链接 var wiggleAmount = effect(“Wiggle Amount”)(“Slider”); // 按照滑块设置的数量每秒摆动 4 次 wiggle( 4, wiggleAmount );

抖动

通常称为惯性回弹,该表达式使用图层自身关键帧的动画来创建自然抖动。将根据其速度创建从一个关键帧到下一个关键帧的任何参数的回弹运动。回弹可发生在对象移动的任何方向。要实现此动画:请在 After Effects 中创建或导入图形。

将关键帧添加到要设置动画的图层的“位置”属性。将以下表达式添加到图层的“位置”属性:

// 设置值以控制抖动。// 将这些值链接到滑块表达式控件以快速预览不同的设置。var amp = 40; var freq = 30; var decay = 50; // 查找最新的关键帧 var nK = nearestKey(time); var n = (nK.time <= time) ?nK.index : --nK.index; var t = (n === 0) ?0 : time - key(n).time; // 如果当前时间晚于一个关键帧,则计算抖动。// 反之,则使用原始值。if ( n > 0 && t < 1 ) { var v = velocityAtTime( key( n ).time - thisComp.frameDuration /10 ); value + v * amp * .001 * Math.sin(freq * .1 * t * 2 * Math.PI) / Math.exp(decay * .1 * t); } else { value; }

随时间旋转

您可以使用关联器将图层之间的旋转值关联起来,从而为对象设置动画。时钟的工作方式,将这三个圆圈视为时钟的三个指针 - 时针一小时一个小时地移动,分针在钟面的整个圆周上旋转。

  1. 导入或创建三个圆形纯色图层。让我们假设其中一个像时针一样工作,另一个像分针一样工作,第三个像秒针一样工作。(请参阅纯色图层和纯色素材项目。)
  2. 在图层结尾设置锚点。(请参阅图层锚点。)
  3. 移动图层以便锚点位于合成的中心。(请参阅移动空间中的图层。)
  4. 设置时针的旋转关键帧。(请参阅设置或添加关键帧。)选择分针的旋转属性并选择“动画”>“添加表达式”。
  5. 将关联器拖动到最大圆的旋转属性。出现以下表达式:thisComp.layer("circle").rotation。
  6. 要使第二个圆的旋转速度是第一个圆的 12 倍,请在表达式末尾添加“*12”,如下所示:thisComp.layer("circle").rotation*12。
  7. 对第三个圆重复相同的操作,并在表达式末尾添加“*24”:thisComp.layer("circle").rotation*24。

Loop

该表达式允许您循环动画,而无需不断添加关键帧。例如,多个形状旋转直到合成结束。在这里,您可以为开始旋转设置一个初始关键帧,为结束旋转设置另一个关键帧。然后,当您将 loopOut 表达式添加到旋转参数时,旋转将继续。

下面表达式中的变量用于设置循环类型以及循环中包含的关键帧数。

让我们先讨论循环的类型。在下面的表达式中,我们将类型设置为“循环”。

//loopOut 设置为循环所有关键帧 loopOut(“cycle”, 0);

类型可以与 loopOut 表达式一起使用。Cycle、Continue、Offset 和 Ping Pong 这种类型的循环在最后一个关键帧处结束,然后在选定范围内的第一个关键帧处再次开始。第二个变量是要包含的关键帧数。loopOut 基于向后移动的最后一个关键帧。默认情况下,0 表示集合中从头到尾的所有关键帧。如果您不想将所有关键帧用于循环,请设置一个从末尾开始倒数的数字。将变量设置为 1 会包括在最后一个关键帧之前的 1 个关键帧,设置为 2 则会向后移动 2 个关键帧,依此类推。

获取父图层的真实“位置”

当图层有父图层时,其“位置”属性中显示的值不是其在合成中的“真实”位置,而是相对于其父图层的位置。要找到有父图层的图层的真实位置,必须使用表达式将父图层的坐标空间转化为合成的坐标空间。将以下表达式应用于无父图层的图层的“位置”以将其链接到父图层的位置:

// 定义有父图层的图层 var targetLayer = thisComp.layer(“Parented Layer”); // 在合成中查找父图层的“锚点” targetLayer.toComp( targetLayer.anchorPoint );

从父图层延迟层的位置

延迟和偏移是使动画更具动感且更自然的好方法。您可以将多个图层关联到一个父图层,然后将表达式应用于每个子图层的“位置”以延迟从父级继承的运动来创建和控制这些类型的偏移。

注意:这仅适用于父图层

// 以帧为单位设置延迟量 var delay = 5; // 根据延迟在时间上偏移图层的位置 parent.fromComp( toComp( anchorPoint, time - framesToTime( delay ) ) );

还可以根据子图层相对于父图层的索引来驱动延迟量。这样,您可以通过在父级下方的时间轴中重新排列子图层的动画来轻松重排它们的顺序(如果您希望子图层的动画出现在父级之前,则在时间轴上方):

// 以帧为单位设置延迟量 var delay = 5; // 根据该图层相对于其父图层的索引乘以延迟 var multiplyDelay = delay * ( index - parent.index ) // 基于延迟在时间上偏移图层的位置 parent.fromComp( toComp( anchorPoint, time - framesToTime( multiplyDelay ) ) );

创建图像轨迹

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

  1. 从缩放到合成大小约 30% 的形状图层开始。(请参阅纯色图层和纯色素材项目。)
  2. 打开“位置”属性并添加关键帧。选择图层。按 P 键显示“位置”属性。按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (macOS) 属性名称左侧的秒表按钮。(请参阅设置、选择和删除关键帧。)
  3. 在表达式字段中输入以下内容:
    thisComp.layer(thisLayer, -1).position.valueAtTime(time - .5)
  4. 通过选择最后一个图层并按 Ctrl+D (Windows) 或 Command+D (macOS) 5 次,将最后一个图层复制 5 次。所有图层使用同一路径,且每个比上一个延迟 0.5 秒。
if ( toCompVec([0, 0, 1])[2] > 0 ) { value; } else { 0; }

更多表达式资源

当您领会了表达式背后的一些概念之后,请前往社区观看一些真实案例并分享您的作品。

您还可通过 MotionScript 网站查看 Dan Ebberts 宝贵收藏,其中包含了相关的表达式示例和教程。

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

更多表达式示例

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

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

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

Adobe 徽标

登录到您的帐户

[Feedback V2 Badge]