按教程做AE动画,表达式输入进去就会导致图形ae位移表达式,但检查了和教程没有差别,求助是哪里出错了,谢谢!

AE表达式教程Lesson 2_土豆_高清视频在线观看AE教程After Effects特效合成教程-表达式学习AE特效基础AE动画制作教程-学习考试视频-搜狐视频
AE教程After Effects特效合成教程-表达式学习AE特效基础AE动画制作教程
视频介绍:
AE教程AfterEffects特效合成教程-表达式4ae特效片头制作
推荐出品人
学习考试热播榜登录后才能保存观看记录哦^-^
用表达式做真实的时钟转动
&&AE教程(二)
下载至手机×
复制视频地址
复制flash地址
复制HTML代码<input type="text" class="share_input" id="playUrl_3" type="text" value=''>
复制通用代码<input type="text" class="share_input" id="playUrl_4" type="text" value=''>
分享到微信
用表达式做真实的时钟转动
将视频分享给微信好友或微信好友圈。
扫描二维码 随心看视频:
手机瞄准我,惊喜不间断,您可以:
1.在手机或平板上继续观看本视频
2.发送给您的好友或分享到朋友圈
正在观看:AE教程
用表达式做真实的时钟转动
更新时间:
用表达式做真实的时钟转动
大家都在看【教程】暑期和我学表达式系列汇总教程 只此一贴_ae吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:404,510贴子:
【教程】暑期和我学表达式系列汇总教程 只此一贴收藏
暑期和我学表达式系列教程从0开始,让小白分分钟搞定复杂难懂的AE表达式。让大家对表达式有一个全面的认识;暑期过后,回到学校你就可以教你的同学使用表达式喽。表达式没有那么难,通过系统的学习,哪怕你写不出高深的表达式,但是至少能读懂别人的作品,看懂那些复杂的模板。第一章 - 表达式的语言1.1表达式控制面板学习表达式需要从表达式的操作界面开始,在AE里新建一个合成你就能看到如下界面:按住Alt同时点击Position左边的码表你可以得到如下结果:仔细观察你会发现,Position属性(665.5,441.0)由之前的黄色变成了红色,如果你在AE里面看到这种情况,说明这个属性被赋予了一个表达式。同时,我们还可以看到数字下面还多了四个按钮。第一个“=”是表达式的开关,可以打开和关闭表达式;第二个看似是曲线编辑器,这个按钮可以查看添加表达式后动画曲线的变化;第三个叫“橡皮筋”,用橡皮筋可以拾取属性帮你完成你的表达式;第四个是表达式语言按钮,有点像特效菜单,会把AE所有的表达式列出来。最后我们看到的就是表达式,默认AE会填写transform.position。transform是&变形&,后面我们还会看到transform.opacity,transform.scale。position的意思是位置,transform这个单词记住是非常简单的,看下图:transformers大家肯定都知道,变形金刚。通过联想法我们就可以记住这个单词。或者你这么记,form是AE的一个插件,trans是一个词缀,意思是移动,trans+form就是变形的意思了,是不是很容易啊。我们在看看position:记这个词大家就记住前缀即可,pos这个前缀是位置的意思,我们拍照经常说摆个Pose,就这个意思。大家再看到这个词记住摆Pose,就记住是位置的意思了。在这里我想尝试分享大家一些记单词的方法,提高大家AE的使用效率,继续说面板。现在大家可以尝试一下关闭表达式,点击那个“=”号,就变成了如下的效果,这样你的表达式就被关闭了。同时Position的数字变成了黄色,再次点击会从新开启表达式。OK,咱们继续往下看,现在让我们创建一个新的红色固态层,给这个固态层的Position添加一个动画,然后拉动刚刚添加表达式的那一层(浅蓝色层)的橡皮筋至新层的Position,这样我们就可以用红色层的动画,控制浅蓝色层的位移了,同时我们会得到这样一个表达式。thisComp.layer(&Red Solid 1&).transform.position后面我会给大家解释这个语法的意思,现在大家只要知道,目前的浅蓝色层的Position和红色层一致就可以了,这两个层的位移是完全一致的。好,下面我们可以点击一下这个表达式,在后面添加一个*0.5,下一节我会仔细为大家介绍一下AE表达式的运算规则,目前的意思是浅蓝色层的位移值是红色的一半。thisComp.layer(&Red Solid 1&).transform.position*0.5这样我们就会的得到如下小动画:表达式的修改也非常简单,我们只需要点击需要修改的表达式就可以进行修改了。如果希望添加多行表达式,我们可以按回车键(不是小键盘的回车),添加多行表达式后,再点击小键盘的回车即可确认。表达式在AE中的控制面板就这么简单,下面我们进入下一个更具挑战的话题,表达式所使用的计算机语言。如果你希望获得更多高质量教程,可以加关注哦哦哦。
CGWANG学生作品:死亡猎手手游,虫族之心等领先行业作品,选学校,先对比作品
1.2表达式使用的计算机语言AE Javas cript 简介:讨论表达式问题,不可能避免讨论一些编程技术;AE的表达式采用的是Javas cript(后面简称为JS)作为基础程序,所以如果希望学习表达式,编程这一关是怎么也躲不开的。不过还好,大部分JS语言是为了制作网页而设计的,我们只需要学习其中的一部分就可以了。不过,再简单的编程也需要大家有意愿去学习,这一节我不会把所有的JS都写出来,这样会累死我,也会吓到你们。在本节我只介绍一些基础,让大家有一个简单的认识。Javas cript的暗语:首先我们需要学习一些JS的暗语,JS语言里面包括Objects(对象),methods(方法),properties(属性)。我们可以把Objects(对象)理解为AE中的图层,合成,和特效;methods(方法)我们可以理解为动作(也可以把它理解为一个动词);properties(属性)可以理解为物体的参数了(比如一个图层的宽度,或者一个合成的帧数)。运算数字和运算符:JS作为一种语言,和其它的语言一样具有运算能力。其实就是加(+)减(-)乘(*)除(/),乘除运算应该优先与加减运算。例如,3+2*5=13。也可以用括号改变运算顺序(3+2)*5=25,简单的数学运算我就不多写了。还有一个%,叫取模运算,这个算法计算两个数相除的余数。比如5%3=2,其实就是5/3=1,余数为2。变量:在较长的表达式中,使用变量可以大大提高我们的效率。我们来算一道数学题,如果y=x+4,x=6,问y=?。如果你没上过小学,那你就惨了。如果我还没记错,这里面的y和x就是变量。另一个认识变量的方式是,变量是“需要被定义的名称”。或者这么理解,变量是一个根据指定参数变化的数字。声明:许多AE表达式由很多的声明组成,通常每一个声明由“;”隔开。许多声明是为变量赋值的声明,这种声明类似这样 rotation=180。由左侧的变量名,中间的“=”,和右侧的变量组成。当然也有很多特殊情况,当我们遇到这种情况时,我会给大家解释一下。当然有一个特例,如果是一段表达式的最后一行,我们可以不加变量名称,等于号以及分号,比如给Rotation的表达式添加一个180,这个Rotation就是180,不过你也可以写成 rotation=180。我们看一个例子:大家注意上下两个表达式的结果是一样的。Rotation是旋转的意思,大家可以尝试用这种图形的方法记住这个单词。再记住一个词,Opacity,透明。这个词我们只要记住O就可以了,把O想成一个洞,可以看透的洞。以后在AE中再看到这个带O的词,就是透明的意思啦。最后还有重要的一点:如果我们这样写:大家看到我在Rotation里面写了一个表达式 Opacity = 50;我们看一下Opacity这个选项还是100%。所以大家记住,Opacity在这里只是一个变量的名称,它不会影响到真实的Opacity这个透明属性。好了,今天就介绍到这里了,下一遍文章我们继续介绍一些基础知识,数组及if/else条件语。
1.3 数组 Arrays数组 Arrays 简介:数组是具有相同的数据类型且按一定次序排列的一组变量的集合体,构成一个数组的这些变量称为数组元素。AE的表达式大量的使用了JS的数组,我也不太希望让大家学习这么复杂的数学知识,但是没办法,想了解表达式就要了解数组。不过,我尽量以最简单的方式给大家描述。最简单的数组就是一维数字,你可以把它想成一列数据;下一个就是二维数组,你可以把他它理解为像Excel表格的数据,有横有竖。数组可以有无限的维度,但是到了三维数组就变得比较难形象化了,你可以把他们想成一个立体的正方体的数据。不过,比较幸运的是,AE中我们大部分面对的是一维数组。如何获取数组中的数据:JS通过Index(索引)获取数组中的数据,索引从0开始。所以对于一维数组索引从0开始至数组中一共有多少数据。例如,如果我们的数组是上图的一维数组,通过索引0我们可以获得123.9这个数据,通过5我们可以获得498.2。多维数组通过多维索引获得其中的数据,但是我们不会涉及到那么复杂的问题。这里有一个比较值得注意的地方,AE中有很多属性是二维数组(位置,缩放),但是这些数据以一维数组的形式存储。比如,一个图层的位移是(124.9,235.8),我们通过0可以获得X的数据是124.9,通过1可以获得Y的数据235.8。数组的语法:当我们需要从数组中获取数据的时候,我们把索引放在方括号里面“[ ]”。所以如果希望获得一个图层的X位置的数据,我们可以通过position[0]获得,当然Y的位置是通过position[1]获得。这里大家可以记住在AE中所有的X的索引都是0,Y的所有都是1,对于3D层Z轴就是2。这里有一点要注意一下,定义一个数组也是用方括号“[ ]”,我们下面看一个例子:myArray = [5,6,7,8];通过上面这行代码我们定义了一个叫“myArray”的数组,里面有四个数据,5,6,7,8。如果希望调取这个数组中的第一个数据,我们可以这样获得myArray[0],我们可以获得5。定义和获取都使用大括号,可能会有一些混淆,但是稍加留心我们应该可以很容易区分开,我们看一个例子:newX = position[0] + 10;newY = position[1] + 25;[newX,newY]我来为大家解读一下上面的这个例子。第一行,我们通过position[0]获得了X轴的位置,并给X轴加10,然后我们将这个结果存储在了一个叫“newX”的变量中。第二行以此类推,newY变量里面存储了加了25的Y值。最后一行我们定义了一个新的数组,将新的X值和Y值赋予这个数组,然后这个数组将新的X和Y赋予Position。大家可以看下图,通过这个表达式我们将这个固态层的X移动了10,Y移动了25。上面这个例子,还引出了一个比较重要的问题(与数组无关),大家可以思考一下,如果我预览上面这个动画,这个蓝色的图层会每一帧都被表达式驱动吗(每一帧位移都发生变化)?为了解释方便我们看一下如下这行例子:opacity = opacity + 1;好,如果我们把这个表达式赋予给这个图层的透明属性,那么每一帧透明度会增加1吗?答案是不会的,上面的位移也不会发生变化。因为,表达式没有缓存机制。AE的表达式没有办法知道上一帧它做了什么(只能说是99%正确,通过程序表达式可以知道它上一帧做了什么,但是这没多大意义,而且比较浪费渲染资源),同时表达式也不能知道它下一帧的信息。还有一点需要大家知道的是,表达式没有全局变量。在编程中,全局变量被声明后,可以在任何时候调用,就好像我们在Position里面定义了一个变量,应该在其它的参数的表达式中也可以调用,但是AE的表达式是不能这样做的。表达式与表达式之间沟通的唯一方式是通过他们赋予的那个参数,比如位移,透明,缩放。关于表达式的一些“限制”我们会在其它篇章进行阐述,这里大家记住这个原理就可以了。数组的计算:现在我们看一下简单的数组数学,AE中的大部分数组计算都很简单,咱们看一个例子:a = [100,150];b = [200,250];a + b这个计算的结果是[300,400],非常简单。如果我们把这个表达式赋予位移,那么我们得到的就是X=300,Y=400,这个表达式我们还可以这样写:a = [100,150];b = [200,250];[a[0] + b[0],a[1] + b[1]]这么写看起来很复杂,但是结果是一样的。如果我们将两个不同产长度的数组相加我们会获得什么结果呢?比如:a = [1,2,3];b = [4,5];a + b这个表达式我们会获得这样的结果:[5,7,3]数组的减法基本也是差不多,看下面例子,不再过多赘述,大家应该可以猜到结果。a = [500,400];b = [200,300];a-b但是乘法和除法就不一样了,其实AE的表达式是不能做这种运算的,也用不到这么复杂。但是它知道如何将一个数组乘以一个数字,看下面的例子:a = [100,150];a*10这个计算的结果是[],除法的结果以此类推应该是[10,15]。还有一个要注意的地方,AE知道10*[100,100]与[100,100]*10的结果是一样的。但是你不能写10/[100,100],AE不知道如何计算一个数字除以一个数组。好了今天就为大家介绍到这里,下次话题将会非常有意思,if/else条件语句。
1.4 if/else 条件语句if/else条件函数当我们编写表达式的时候,我们经常会遇到根据一些条件判断情况的需求。我们看一个简单的例子,比如我们有一个旋转的表针,我们希望当这个表针指向右边的时候,它的透明度是100%的;指向左边的时候,它的透明度是50%。这里我们假设当旋转至0度的时候它是指向上方的,这个表达式我们就可以使用JS的if/else条件语句来完成,这个表达式如下:if (rotation & 180) 100 else 50咱们分析一下这个表达式:“if”大家都应该知道这个英文单词的意思,“if”也是JS语言中条件函数的声明,紧跟着括号里面就是条件,在我们这句表达式中就是(rotation & 180) ,它的意思是把if函数的条件设置为旋转小于180。接下来的100告诉表达式,当旋转小于180的时候透明度为100,接着我们写了一个 else 50, 意思就是如果旋转大于180的时候,透明度是50。这个表达式还有很多书写的方式,我来给大家展示几种方式,有很多简化的写法我们甚至可以省略else。t = 50;if (rotation & 180) t = 100;t有一点需要注意一下,如下的这种写法是有问题的:if (rotation & 180) 100这种写法会报错,因为AE不知道当Rotation大于180的结果,AE会自动屏蔽这个表达式。好,下面我们在看另一个稍微复杂一点的版本:if (rotation & 180){100}else{50}这也是一种写法,得到的结果是一样的,但是我们为什么要写的这么复杂呢?对于这种就一行的表达式我们可以尽量简单的写,大家注意一下这种写法里面的大括号“{}”,因为利用这种嵌套的方式我们可以写出更加复杂的表达式,甚至在{}之间我们还可以添加if/else条件语句,在后面的章节中我会给大家展示更多复杂的嵌套方式。对比及等于运算符:到这里我觉得有必要介绍一下JS里面的对比符。刚刚我们用过的“&”,小于号,相反我们有“&”,大于号。“&=”,&&=&,大于等于以及小于等于。还有两个是不等于&!=&以及等于“==”。这里提个醒&=&和“==”的区别,第一个符号式给变量赋予值,第二个才是等于号。逻辑运算:接下来我们需要记住的是逻辑运算符,一共有三个:“&&”这个符号为和,就是要同时满足两个条件;“||”为或者,就是满足任何一种条件;“!”为不,就是当不等于这个条件的时候,。例如:if (rotation&90 || rotation&270) 100 else 50,这句表达式的意思就是当旋转小于90或者大于270的时候透明的值设置为100,否则是50。又如:if (! (rotation==180)) 100 else 50,这里的意思是当旋转不等于180的时候将透明度设置为100,否则为50,大家可以先不看下面的视频,然后想想是什么样子的。好,我们再看一个更加复杂的写法,假设我们希望当旋转在0至90之间或者180至270的时候,透明度为100,其它的情况透明度为50。if (rotation&90 || rotation&180 && rotation&270)100 else 50最后大家需要注意一下,运算符计算优先于逻辑符号,逻辑符号的&&优先于||,大家注意不要添加过多的括号。截止到这里,我们完成了第一部分的对于表达式基础的介绍,主要为大家介绍了一下JS的函数和语法,但是都比较基础。如果大家对这门语言有更多的兴趣,大家可以登录这个网址,这个网站的JS专区有非常详细的JS语言介绍。下一篇推送我将开始为大家介绍一些仿真运算,我们下期再见
第二章 物理运动模拟 Physical Simulation2.1 Sine 正弦和 Cosine 余弦物理运动模拟是AE表达式中很有意思的几个课题之一,掌握起来比较有挑战,需要大家了解一些简单的数学和物理知识。当然,我会以最简单的方式把问题表述给大家。Sine 正弦和 Cosine 余弦关于正弦和余弦我们上初中的时候应该是学过的,不过推演我自己都忘记的差不多了,大家只要记住是两条相反的波浪线就好了。AE的表达式中有一种我们经常用到的数学功能(JS里面叫函数)是正弦和余弦曲线,在JS中这个函数是Math.sin(),我们先来看看正弦。如上图正弦提供一条规律的周期震荡波浪线,这种曲线适合非常多的运动模拟。如果希望看到这条曲线,我们可以新建一个固态层,为它添加一个“Slider Control”,再为这个“Slider Control”添加表达式:Math.sin(time)完成后,我们就可以看到这条波浪线了。注意:添加表达式后如果希望看到这条美丽的波浪,我们需要如下三步:1.打开曲线编辑器;2.点击此图的第二个图标,预览表达式效果。3.将曲线编辑器按照下图设置。通过如上操作,我们看到了将这个函数赋予时间参数的效果,Math.sine(time),在时间是0的时候,曲线值为0,然后逐渐趋向1,一个周期需要6秒多一点的时间。我们再来看看正弦的好朋友余弦,在JS中的函数是Math.cos(),余弦的曲线和它的兄弟一样,只是反过来了,下面就是余弦的截图:选择用正弦或者余弦根据大家的喜好,基本上都一样。但是,如果你希望数值从1开始你可以选择余弦曲线,如果你希望数值从0开始则可以使用正弦,sin(0)=0,cos(0) = 1。下面我们来看一个例子,比如我希望我的物体从左至右震荡移动,我们来看一下表达式(//在JS中的作用是注释,它后面的注释不起作用,但是在英文AE中用中文注释显示的是?):veloc = 170; //平行移动速度 (170像素/秒)amp = 48; //正弦曲线振幅(像素)freq = 4.8;//震荡次数/秒x = time*y = amp*time*Math.sin(freq*time*2*Math.PI) + thisComp.height/2;[x,y] 看效果之前我们还需要学习几个非常重要的单词:Velocity(速度),Amplitute(振幅),Frequency(频率),Wave(波动)。Amplitute是振幅,就是震动的幅度,按照我这个象形的记法如图,振幅有高有低。还有一种联想法,记住前面的AM,电台信号的波形也是有不同振幅的,这样在看到这个词的时候可以联想一下。Frequency是频率,这是一个使用率排前三的一个词,所有跟运动有关的插件都有这个词,所以大家一定要记住。暂时还没有很好的联想法,大家可以先努力记下来。Velocity这个词最常见的地方是粒子发射器,粒子发射出来是需要速度的,所以这个词非常有用,记住的方法可以记住后面的city,city是城市的意思,我们可以想象为城市发展速度是非常快的,所以在看到这个词的时候你就可以联想到速度了。Wave是波浪,记住前面的W是个波浪形状的就好记住了。
下面是这个表达式的效果动画:上图是这个小球的运动轨迹,下面我们来解答一下这个表达式。首先,这个表达式形成了一个从左至右震荡前进的动作(Math.PI是JS的一个属性得出的结果就是趋近于3.1415的一个数值,π就是上学时都学过的圆周率),thisComp.height/2,thisComp是调取当前合成,height就是合成的高度,这句的意思是调取合成的高度并除以2,加上这句的意思是让Y轴的位置位于合成的中间。Y做的几次乘法,在这里我就不过多解释了,根据英文的意思大家应该可以看懂,最简单的方法就是将表达式粘贴到AE中,自己试验一下。对于表达式,我们还可以给X轴添加从左至右移动的关键帧,Y轴运用表达式驱动,同样可以达到相同的效果。表达式如下:veloc = 170; //平行移动加速度 (40像素/秒)amp = 48; //正弦曲线振幅(像素)freq = 4.8;//震荡次数/秒y = amp*time*Math.sin(freq*time*2*Math.PI);position + [0,y]注意这里我们去掉了驱动X轴运动的 x = veloc * time,增加了一句 position + [0,y] ,意思就是用物体本身的位置加上表达式计算出来的位置。下面我们在来说说弧度,JS的三角函数的单位是弧度,不是度。这样,一个完整的震荡周期就是π值的两倍。所以,如果希望我们的频率是每秒一个完整的振幅(我们上面的例子里面也乘以2了)我们就需要将π值乘以2,后面大家会大量看到我们“2*Math.PI”。我们再看一个例子,如果我们希望刚才的动画改为震动向上移动,我们看看表达式是如何写的:veloc = 170; //平行移动加速度 (40像素/秒)amp = 48; //正弦曲线振幅(像素)freq = 4.8;//震荡次数/秒x = time*y = amp*time*Math.sin(freq*time*2*Math.PI - 1) /2+ thisComp.height/2;[x,y]这里我们做了一点点小的调整,首先我们让Math.sin()函数减1,这样我们得到的曲线就从-1 至 1,变成了-2 至 0。然后我们有除以2,这样这个范围就变成了-1 至 0。为什么要是-1 至 0呢?我们不是要向上的运动吗?因为AE向上是在负Y轴的方向。好,下面我们再做一些调整,让这个运动的振幅恒定,不要随着时间震动增大。veloc = 180; //平行移动加速度 (180 像素/秒)amp =48; //正弦曲线振幅(像素)freq = 4.8; //震荡次数/秒rise = 20; // 正弦曲线向上移动的速度 (像素/秒)x = time*y = amp*Math.sin(freq*time*2*Math.PI) - rise*time + .6*thisComp.[x,y]咱们在看看这样的运动是如何达成的,首先我们新增了一个“rise”参数,这个rise定义了我们正弦曲线向上移动的速度。Rise乘以time用来计算Y轴的移动。Math.sin()这个参数没有乘以时间,所以我们的移动没有随着时间而变化。最后.6*thisComp.height可以让位移运动在合适的位置。下面,我们再看一种变化,我们让物体随着从左至右移动的同时频率逐渐增加。veloc = 180; //平行移动加速度 (180 像素/秒)amp = 32; //正弦曲线振幅(像素)freq = 1; //震荡次数/秒x = time*y = amp*Math.sin(freq*time*time*2*Math.PI) + thisComp.height/2;[x,y]达到这种效果是因为我们在Math.sin()这个函数中写了两次“time”,大家可以自己在AE中实验一下。我们最后再看一种比较有用的变化,如果我们将两个正弦曲线相乘,我们会得到什么结果呢?如果其中一个波浪的频率比另一个小一点,我们下面的是freq1小于freq2,这样我们会的得到一个忽快忽慢的运动,我们看看下面的表达式。veloc = 170; //平行移动加速度 (170 像素/秒)amp = 32; //正弦曲线振幅(像素)freq1 = 0.5; //震荡次数/秒freq2 = 7.0;x = time*wave1 = Math.sin(freq1*time*2*Math.PI);wave2 = Math.sin(freq2*time*2*Math.PI)y = amp*wave1*wave2 + thisComp.height/2;[x,y]好了,本次我给大家演示了几种sin()和cos()的用法,在后面的课程中我们还会大量用到这两个函数,工程文件大家可以点击链接下载,今天的内容相对复杂很多了,希望大家可以自己上机试一下,你会觉得非常有意思的,我们下期继续。
第二章 物理运动模拟 Physical Simulation2.2 指数曲线 Exponential Curves指数曲线本节我们来看一下指数曲线(往后看你就明白了),这个方法在JS中是Math.exp()。我们可以将一个变量x赋予这个方法Math.exp(x),返回e 的 x 次幂。e 代表自然对数的底数,其值近似为 2.71828(背后的数学了解就好,无需深究)。从这个方法得到的结果根据你赋予的变量x来判断。比如Math.exp(time),我们将会得到一个变化的曲线,这个曲线当时间是0的时候,它的值是1,但是随着时间变化会迅速指数级上升,说多了没用,咱们看看这个曲线。大家可以注意一下,基本时间到7秒的时候,结果数值已经1000多了。指数衰减指数曲线有一定的用处,但其实我们更多用到的是他的双胞胎兄弟指数衰减曲线。指数衰减曲线非常适合制作弹力小球或者弹簧等动画。有两种方法生成这种曲线,结果都是一样的。第一种方法你应该想的到,就是把指数曲线计算成付值,表达式如下:Math.exp(-time)看上面的曲线,在时间为0的时候,输出值是1,当时间增加时,输出值逐渐趋向0。另一种方式也很简单,是让将指数曲线除以1,如下:1/Math.exp(time)这里我就不拍屏了,大家可以亲自尝试一下。合体的力量在我们进入下一个话题之前,我们还需要了解一个非常有用的组合,Math.sin() + Math.exp()。当我们将这二位结合到一起的时候,我们可以得到一个逐渐衰减的正弦曲线,这种曲线非常适合模拟弹簧,钟摆等物体。基本的表达式如下:Math.sin(time)/Math.exp(time) 或者 Math.sin(time)*Mathi.epx(-time)好了,到这里指数曲线就介绍完成了,之前很多朋友希望我可以留个作业,大家练习一下。没问题,结合前几章的知识,你可以通过表达式做出如下动画吗?如果你做出来了可以回复我,我会给大家点评,这个题的答案我会在下一期给大介绍。
正好我对表达式一头雾水~我要认认真真看完
好帖!!楼主
ae,签约好莱坞特效公司,接轨国际资源,完美动力自主研发教材,引领潮流,ae,多种班型量身定制,高压实训,精品课程!完美动力免费热线400-
非常难得的营养贴。收藏了
你一定要继续出哦,要养成填坑的好习惯哈,我还在认真的跟着你的教程学呢。
我又来了昨天我把这个参数“veloc = 170; //平行移动加速度 (40像素/秒)amp = 48; //正弦曲线振幅(像素)freq = 4.8;//震荡次数/秒x = time*y = amp*time*Math.sin(freq*time*2*Math.PI - 1) /2+ thisComp.height/2;[x,y]”复制进去之后得到的是下面这个图:而我看您发的结果图是这个:今天早上我又自己乱写了一下,把Y轴改成这样:y = amp*time*(Math.sin(freq*time*2*Math.PI)-1) /2+ thisComp.height/2;才勉强得到了一个看起来差不多的图:楼主,我数学函数实在不行。数学不好也是种病啊,要温柔对待病人。看在我这么认真学习的份上,一定要教会我呀。
楼主,你留的作业我做了哦,可是好像不太一样,又感觉有点类似的错觉。veloc = 170;amp =70;freq =3.8; x = time*y = amp* Math.sin(freq*time*2*Math.PI)*Math.exp(-time)+thisComp.height/2;[x,y]
楼主您好,我想请问一个问题~,我给一个文字层的缩放写了一个弹性的表达式,然后K了从0-100的2个关键帧,我在这个层上添了2个表达式控制滑块,分别关联上了他的第一帧和第二帧。
您幸苦了,那么用心的写,我前面部分还认真的看完,后面确实是自己的原因和JS不会,不过收藏了,我以后肯定用得着
好贴 有帮助
我可以转发吗
这个太有帮助了,我能转发回我的空间吗,可以随时看,先收藏了
留爪。回去看。
From Nokia Lumia 1020———蛋黄夹心奥利奥&_&饿了就扭一扭、泡一泡、舔一舔!
虽然我是门外汉,但我会认真看你写的内容,偶的哥!
第二章 物理运动模拟 Physical Simulation2.3 综合练习一些实用小技巧好了,让我们把最近学过的一些技巧整合一下。首先,让我们看一下下面这个例子,这个例子里面我为这个钟摆添的旋转参数添加了正玹曲线。freq = 1.0;amplitude = 50;decay = 0;amplitude*Math.sin(freq*time*2*Math.PI)/Math.exp(decay*time)我们将amplitude(振幅)设置成了50,所以钟摆的摆动幅度是在50至-50之间,我们将frequency(频率)设置为1,就形成了这个漂亮的钟摆匀速的动画。这个例子中还有一个参数是decay(衰减),下面我们就给衰减一个参数看看效果是怎样的。freq = 1.0;amplitude = 50;decay = 0.7;amplitude*Math.sin(freq*time*2*Math.PI)/Math.exp(decay*time)小丑来了好的,我们刚刚为旋转参数添加了表达式,下面我们将这个表达式添加到Y轴上面,我们可以得到一个非常漂亮的弹性动画,下面就是这个动画的表达式:freq = 1.0;amplitude = 50;decay = 0.7;amplitude*Math.cos(freq*time*2*Math.PI)/Math.exp(decay*time)根据我们前面学到的知识,在这个表达式中我们为Y轴添加了新的曲线动画,X轴没有变化,得出了如上动画效果。Bouncing Ball 弹力小球Bouncing Ball是所有学习动画的同学们第一课要学习的知识,下面我们就来看一下用表达式如何实现这个动画。这里大家可以注意一下下面的表达式我采用了Cosine曲线(这样我们就能保证我们的曲线从0开始)。这个小球的X轴运动是我自己手动添加的关键帧。freq = 0.9375amplitude = 130;decay = 0.5;posCos = Math.abs(Math.cos(freq*time*2*Math.PI));y = amplitude*posCos/Math.exp(decay*time);position - [0,y]在这个表达式中我们调用了一个新的方法Math.abs,这个方法可以帮助我们返回数字的绝对值,比如。Math.abs(-90) 返回的结果是90Math.abs(7.25-10) 返回的结果是2.75在这里面采用这个方法的目的是,去掉我们曲线里面的负值。大家可以看一下这个动画的曲线。有一点需要特别注意的,就是合成每秒的帧数,以及我们表达式中的freq,这两个数字会影像小球落地的位置。如果我们的合成是30帧的,我们要是将freq设置为2.0,小球的第一次弹跳就会发生在第三帧和第四帧之间,这样我们的小球看起开好像永远也不会落在地上。如果我们希望小球可以每一帧都落在地上,就需要将freq设置为2.5,如果希望第四帧落在地上就是1.875。我的合成石15帧的所以我设置为了0.9375,大家亲自尝试一下就理解了。Stretch(拉伸)刚刚我们尝试了“摇摆”动画,&弹跳&动画,下面我们看看将表达式添加到Scale(缩放)参数中的时候,我们会得到怎么样的结果。freq =3;amplitude = 55;decay = 1.0;s = amplitude*Math.sin(freq*time*2*Math.PI)/Math.exp(decay*time);scale + [s,s]这个表达式与上面我们所使用的所有的表达式差不多。我们将一个一维的数值赋予了变量S,通过Scale + [s,s]控制小球的拉伸动画。Amplititude可以将小球的弹性动画控制在原有参数的45%至155%之前。Squash(挤压) 和 Stretch(拉伸)我们的拉伸动画目前看起来还不是那么完美,让我们再为它添加一些挤压效果。在真实的世界中,当物体被挤压时,他的体积是保持不变的。所以,如果我们的物体被纵向挤压,它在横向会被挤扁。如果我们的图形是正方形,这个方形的体积我们可以通过宽乘高获得,那么我们看看如下的推导:挤压前的宽 X 挤压前的高 = 挤压后的宽 X 挤压后的高或者这么理解,“被挤压后的宽度” 等于 “被挤压前的宽度”
乘以 “新X缩放值”。挤压前的宽 X 挤压前的高 = 挤压前的宽 X (新X轴缩放/100) X 挤压前的高 X (新Y轴缩放/100)如上公式可以简化为:新Y轴缩放 = (1/新X轴缩放)X 10000好的,上面的推导如果你没看懂就算了,直接记住结果即可。我们看看将这个表达式运用的效果。freq = 5;amplitude = 25;decay = 1.0;t = time - inPx = scale[0] + amplitude*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);y = (1/x)*10000;[x,y]这里我们来理解一下inPoint,它的意思是素材的第一帧,还有就是outPoint,这么理解的话就是素材的最后一帧了。在这个表达式中我们将X轴和Y轴分开对待,我们增加了一个时间变量t,time减去inPoint,可以让我们的动画不是一定要从合成的第一帧开始,而且随着素材的第一帧才开始。然后我们通过公推导出来的Y值获得了Y的参数。让弹力小球更加逼真学习了挤压和拉伸后,让我们把这两项技能添加到我们的弹力小球动画中,让小球的动作看起来更加逼真吧。下面是这个小球位置的表达式,和我们之前的表达式一样:freq = 0.9375amplitude = 130;decay = 0.5;posCos = Math.abs(Math.cos(freq*time*2*Math.PI));y = amplitude*posCos/Math.exp(decay*time);position - [0,y]然后我们再添加如下的缩放表达式:freq = 0.9375;
//小球挤压次数频率squashFreq = 4.0;
//小球每一次挤压的频率decay = 5.0;
//小球每一次挤压的衰减masterDecay = 0.4;
//小球总体动画的衰减amplitude = 25;delay = 1/(freq*4);
//这个参数会保证和位置动画吻合if (time & delay){
//这个条件保证小球只有在弹跳的过程中才会有挤压动画 bounce = Math.sin(squashFreq*time*2*Math.PI);
//计算弹跳曲线 bounceDecay = Math.exp(decay*((time - delay)%(freq/2))); //每一次弹跳衰减 overallDecay = Math.exp(masterDecay*(time - delay));
//总体衰减 x = scale[0] + amplitude*bounce/bounceDecay/overallD y = scale[0]*scale[1]/x; [x,y]}else{ scale
//保持原有缩放不变}动画效果如下:非常感谢大家对我的支持,还有AE吧各位吧主对我的包容,我会继续为大家带来更多更好的内容。
天呢,楼主无敌了,果断收藏
坐等下一章
楼主出来我们一起玩耍吧
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 ae位移表达式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信