【AE表达式】基于不规则形状生成点线动画

/*表达式文末自取*/
另外贴一个官网表达式解释:
https://helpx.adobe.com/cn/after-effects/using/expression-language-reference.html
思路
通过读取源路径上的点,再进行连线

实现
准备工作
新建形状图层,用钢笔随便画一个路径

再建一个形状图层,用于表达式生成路径
并为内容添加路径和描边

再给这个图层的添加两个滑块控制//之后要用

建议用表达式把两个图层的PSR锁好,以免鼠标误操作

给路径图层下的路径添加表达式

先定义一些变量并赋值
从这里开始需要一些基本代码知识了
首先需要把取到的点的位置放在一个数组里
以便之后给createPath使用
于是先定义一个数组
再用for循环+pointOnPath取所有点
关于pointOnPath用法的官网解释

简单说就是
路径.pointOnPath(百分数,time)
返回路径上一点的位置//起点百分数为0,终点为1
取得点后用createPath描点连线
createPath用法详见

或者看我上篇文章

也可以看官网解释

回到取点过程,因为pointOnPath是通过百分数i/n进行点的定位
那么需要i/n+c就能实现相位变化
但i/n+c为百分数,只取0到1的数
则进行模运算,改为(i/n+c)%1
这样无论c如何增加,(i/n+c)%1都不会超过1

但目前只生成了路径,还需要画点
创建点
动画中的点实际上就是正圆形
新建形状图层,添加椭圆路径及填充

用P键打开图层位置属性,添加之前的变量

再添加
如果想要很多点,Ctrl+DDDD……就好了
后记
前天在群里看到这个表情包,就想模仿一下

不知道有什么用,说不定就可以用在视频里呢
之前两篇感觉讲得太麻烦了,这次就讲得更简单了些,有不懂的地方欢迎私信

路径
path_=thisComp.layer("源路径").content("形状 1").content("路径 1").path;
n=effect("点数")("滑块");
n=clamp(n,20,1);
c=effect("相位")("滑块")/100;
c=clamp(c,50,0);
pos=[path_.pointOnPath((0/n+c)%1,time)];
for(i=1;i<=n;i+=1){
p=path_.pointOnPath((i/n+c)%1,time);
pos.push(p);
}
createPath(pos,[],[],1)
点
path_=thisComp.layer("源路径").content("形状 1").content("路径 1").path;
n=thisComp.layer("路径动画").effect("点数")("滑块");
n=clamp(n,20,1);
c=thisComp.layer("路径动画").effect("相位")("滑块")/100;
c=clamp(c,50,0);
o=index-1;
if(o>n){
o=0;
}
path_.pointOnPath((o/n+c)%1,time)+value