ae教程 (四)运动控制 (三)

示例3:蝴蝶飞舞

应用关键帧控制物体的运动,在很多简单的情况下还是很高效的,但是针对一些包含位置,旋转,缩放组合变换的复杂运动时,可以使用表达式,如循环运动。配合音乐节奏等

这次以控制蝴蝶飞舞作为示例,主要应用wiggle函数

导入蝴蝶图片以及背景图片

新建合成,把蝴蝶图片拖入时间线,用钢笔工具勾画出蝴蝶的翅膀以及身体,如下图所示

激活图片的3D属性

把蝴蝶图片复制五次,分别命名为 左上 左下 右上 右下 身体 每一个图片只保留一个蒙版,按照命名保存蒙版,蒙版模式为 相加

 左上 左下 右上 右下 的父级设为身体,使其成为一个整体

选中左上 按R键 展开旋转属性,单击y轴旋转 选择动画 添加表达式

wigfreq=2;

wigangle=75;

wignoise=2;

Math.abs(rotation.wiggle(wigfreq,wigangle,wignoise));

点击播放就可以看到效果,为右上添加表达式,选中图层按R,单击y轴旋转 选择动画 添加表达式,将属性链接至左上 y轴旋转属性

这里可以鼠标拖拽然后修改反向,也可以用表达式

-thisComp.layer("左上").transform.yRotation

左下,将链接左上的旋转属性

右下,将链接左下的旋转属性的反向  现在可以播放观看一下效果

为了改善效果,修改左上的表达式 ,这里的数值可以进行微调

Math.abs(rotation.wiggle(wigfreq,wigangle,wignoise))-50;

为了使左侧上下翅膀扇动有些区别,改变表达式 thisComp.layer("左上").transform.yRotation*1.2+10

 

创建一个28mm的摄像机,调整一下角度,使蝴蝶的角度看起来更自然

把背景图片拖到底层

现在开始绘制

1.可以激活位置,调整坐标,通过改变不同的视图观察位置

2.用钢笔工具绘制路径  复制蒙版形状 粘贴至 位置 再根据需求进行调整

点击播放观看状态,根据背景,调整蝴蝶的方向,使其飞行时看起来更加合理

 

最后调整蝴蝶的色相,使其融入背景 添加效果 颜色平衡(HLS)调整色相

这组动效就结束了

最后附上一般常用的表达式

附录:

1.wiggle 抖动
wiggle(freq频率, amp振幅, octaves = 1细节, amp_mult = .5乘赋值, t = time)
用法wiggle(5,200)


2.random 随机

random(数值x,数值y)是在数值x到数值y之间进行随机值的抽取,随机抽取的最小值是x,最大值是y
用法:random(1,10)


3.loopOut 循环
loopOut(type="循环类型",numkeyframes=0从最后一个关键帧往前走开始循环,0代表无限)
循环类型四种:pingpong 如乒乓球一样来回运动
cycle 周而复始的来回运动
offset 叠加之前关键帧数值循环
continue延续属性变化的最后速度
用法:loopOut(type = "cycle", numKeyframes = 0)


4.time 时间 这个不解释了


5.timeRemap 抽帧
timeRemap*数值,这里数值以帧为单位
用法:在素材上鼠标右键时间重映射上输入timeRemap*10


6.index 图层序号

说不清,还是上图吧
这个红框内就是图层序号
index可以代表当前图层的数值
常见的就是把index丢到位置上做立体字,如

[transform.position[0],transform.position[1],index],复制很多层就是立体字了
丢到缩放上,如
[transform.scale[0]+index,transform.scale[1]+index],复制很多层文字就慢慢变大了
其他参数可以自己尝试


7.在文字上的源文本上打下面的表达式
倒计时表达式:
a=linear(time, 4, 6, 1000, 0);
Math.floor(a)


公式
a=linear(time, 开始变化的时间, 结束变化的时间, 开始变化时的数字, 结束变化的数字);
//将a复制linear变化的结果Math.floor(a) // 向下取整(a)




8.弹性表达式
其实不想发,分享脚本里motion脚本自带有弹性功能
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){n--;}}
if (n == 0){t = 0;}else{
t = time - key(n).time;}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
amp = .03;
freq = 2.5;
decay = 4.0;
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value;}
这里要更改的就三个后面的数值
amp=振幅
freq=频率
decay=衰减或者叫阻力


9.线性表达式
linear(t, value1, value2) {t 是一个数, value1 和 value2 是一个数或数组}当t的范围从0到1时,返回一个从value1到value2的线性插值。当 t <= 0时返回value1,当 t >= 1时返回 value2 

linear(t, tMin, tMax, value1, value2) {t, tMin和 tMax are 数, value1和value2 是数或数组} 当 t <= tmin时返回value1;当t >= tMax时,返回value2 ;当tMin < t < tMax 时, 返回 value1和value2 的线性联合


10.数字递增表达式
StartNumber=1;
EndNumber=1000;
StartTime=1;
EndTime=3;
t=linear(time,StartTime,EndTime,StartNumber,EndNumber);
Math.floor(t)
用法:输入到文字图层的源文本


10.反弹表达式
k=100; // 反弹最终结果
a=5; // 反弹阻力
b=50; //反弹变化时间
x=k*(1-Math.exp(-a*time)*Math.cos(b*time));
[x,x] 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值