如何制作动态的波浪效果呢。

创建图层

首先用右键单击图层区域创建一个形状图层。

形状图层

然后我们需要用钢笔工具画一条直线。方法就是先选择钢笔工具,然后在起点点击一下,然后再在终点点击一下。

钢笔工具

直线

我们可以点击上方的颜色调整,注意我们调整边框而不是填充色。

颜色

添加摆动

我们给形状添加“摆动路径”

摆动

然后摆动就添加好了,我们可以看到很多参数我们都可以调节。点我们可以调整为“平滑”

平滑

所有属性的介绍如下:

1. 大小 (Size)

控制路径偏移的幅度,也就是每个点能在原始位置周围摆动的最大距离。数值越大,形状轮廓的抖动越明显。

2. 详细信息 (Detail)

决定路径抖动的复杂程度。低数值时抖动比较大块、平滑;高数值时就会出现更精细的“锯齿感”,类似增加了噪声的频率。

3. 点 (Points)

设定路径上是由“角点”还是“平滑点”来组成:

  • **角点 (Corner)**:产生尖锐的折角,抖动后更像碎裂的边缘。
  • **平滑点 (Smooth)**:产生圆润的曲线,形状的变动更柔和。

4. 摆动/秒 (Wiggles/Second)

就是频率,每秒路径抖动多少次。数值越高,动画越快。

5. 关联 (Correlation)

决定路径上各点之间的相关性:

  • 高相关(接近 100%):点们一起动,路径变形比较整体化。
  • 低相关(接近 0%):点们各自乱动,效果更混乱。

6. 时间相位 (Temporal Phase)

控制时间维度上的偏移,可以理解为“在时间轴上把噪声整体往前/往后推”。改变这个值会让动画从不同的时间点开始。

7. 空间相位 (Spatial Phase)

控制空间上的偏移,把路径抖动的噪声图案在空间上进行偏移。多个图层使用同样参数但不同空间相位时,可以得到类似“同频不同步”的效果。

8. 随机植入 (Random Seed)

控制噪声的随机性。改变这个值不会影响频率或幅度,但会得到完全不同的抖动方式,相当于“重新抽一张随机数”。

两侧收束

如果你想要两侧收束的效果,而不是起点和终点不停变化,可以尝试使用液化效果,将两侧向中心点挤一下就好了。

给所有的曲线合并到一个预合成,然后再合成上添加

创建预合成

液化

更高自由度的曲线

如果你需要精细曲线或者更加高自由度的曲线,可以使用Tilda脚本来实现。

下载好Tilda之后,复制jsxbin文件到AE脚本目录

Win:...Adobe After Effects CC\Support Files\Scripts\ScriptUI Panels\

Mac:应用程序\Adobe After Effects CC\Scripts\ScriptUI Panels\

打开AE软件设置,勾选上*允许脚本读写和访问网络

允许脚本

窗口菜单中我们就能看到他了。

Tilda jsxbin

选择需要添加波纹的图层,点击Wave即可。

效果

Direction → 方向

Wave Length → 波长

Wave Height → 波高

Wave Roundness → 波形圆度

Speed → 速度

Phase → 相位

Trim → 修剪/裁剪

  • Show Trimmed → 显示裁剪部分
  • Start → 起点
  • End → 终点
  • Offset → 偏移
  • Trim By Points → 按点裁剪

Choke → 收缩

  • On Start → 起点收缩
  • On End → 终点收缩
  • On Sharp Points → 锐角点收缩
  • On All Points → 所有点收缩

Settings → 设置

Ease → 缓动

Random → 随机

  • Seed → 随机种子
  • Random Length → 随机长度
  • Random Height → 随机高度
  • Random Roundness → 随机圆度

像是前面提到的固定开头和结尾在脚本也是有选项的。

起点终点收缩

纯表达式控制

如果这个脚本还无法完成,就可以自己纯手搓一个表达式来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// ===================
// 参数配置
// ===================
startPt = [0, 300]; // 贝塞尔曲线起点(x, y)
endPt = [800, 300]; // 贝塞尔曲线终点(x, y)
numPtsBase = 10; // 基础中间点数量(控制曲线细分程度)
detailLevel = 1.2; // 细分等级(越大曲线越平滑,最终点数=base*level)
ampMax = 50; // y方向最大摆动幅度(像素)
freq = 0.5; // y方向摆动频率(每秒摆动次数)
seedRandom(3, true); // 设置随机种子(保证每次运行结果一致,可选)

// ===================
// 生成对称随机浮动点
// ===================
newPts = []; // 存储最终点的数组
for (i = 0; i <= numPtsBase * detailLevel; i++) {
t = i / (numPtsBase * detailLevel); // 当前点在曲线上的归一化位置(0~1)

// ===== x方向:对称随机偏移(核心修改) =====
// 方法1:使用Math.random()生成[-1,1]区间随机数,缩放至[-3,3]
xRandom = (Math.random() * 2 - 1) * 3;
// 方法2:直接使用random(-3,3)(若环境支持此函数)
// xRandom = random(-3, 3);
x = startPt[0] + t * (endPt[0] - startPt[0]) + xRandom;

// ===== y方向:周期性波动+对称随机波动 =====
localAmp = ampMax * Math.sin(Math.PI * t); // 周期性波动幅度(随t增大而减小)
timePhase = Math.random() * Math.PI * 2; // 时间相位(每个点不同,避免同步波动)
spacePhase = Math.random() * Math.PI * 2; // 空间相位(每个点不同,增加随机性)
yWave = Math.sin(time * freq * 2 * Math.PI + spacePhase + t * Math.PI) * localAmp;
yRandom = Math.random() * 10 - 5; // 静态随机偏移(-5~5像素)
y = startPt[1] + yWave + yRandom;

// 将生成的点存入数组
newPts.push([x, y]);
}

// ===================
// 自动生成平滑贝塞尔切线
// ===================
inTans = []; // 存储每个点的入切线
outTans = []; // 存储每个点的出切线
for (i = 0; i <= newPts.length - 1; i++) {
if (i == 0 || i == newPts.length - 1) {
// 首尾点:固定切线(无波动)
inTans.push([0, 0]);
outTans.push([0, 0]);
} else {
// 中间点:用相邻点计算平滑切线
prev = newPts[i - 1]; // 前一个点
next = newPts[i + 1]; // 后一个点
// 切线方向为前后点差值的1/3(控制曲线平滑度)
tangent = [(next[0] - prev[0]) / 3, (next[1] - prev[1]) / 3];
inTans.push([-tangent[0], -tangent[1]]); // 入切线(反向)
outTans.push([tangent[0], tangent[1]]); // 出切线(正向)
}
}

// ===================
// 输出最终路径
// ===================
createPath(newPts, inTans, outTans, false); // 调用路径创建函数(假设已定义)

湍流效果

如果还是不满意,其实用湍流+液化也可以实现。这样不只是上下的震动摆动,还可以实现流动效果。

湍流置换

我们可以给偏移和演化K帧来实现。

湍流