表达式学习法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
How-To Expression?表达式学习法
[教学资源]
本文只探讨表达式学习法,不主要讲解各个表达式命令功能,如想了解具体参数功能请上淘宝购买相关书籍(比如AECS3完全手册,或者按F1打开帮助)
首先让我们清楚一下表达式能干什么,不能干神马。表达式唯一的一个作用就是连接数值,所有的表达式都是以数为核心的,输入的必须是数值,(包括有数字角度百分比,还有一种下拉菜单用得极少极少也是数值。)
中间是加入运算的地方,为什么要加入运算?因为要大部分情况下加入一定的逻辑运算以便将不相干的数值变成同等数值进行运算,就好比货币兑换一样,人民币换算成美元,就可以直接消费了,是一个道理。中间的运算有时候也可能会隐藏起来。而你无法发现。
输出的也是数值,这个数值将会被添加表达式的该属性读取做为一个参数使用。
大部分时候输出是隐藏在运算中的,在复杂表达式中大大增加中国人学习难度。
表达式不能帮你提高AE水平,事实上即使你精通表达式你也不能使用AE做好作品,设计和美工的能力决定大部分。表达式仅为辅助,和众多AE插件一样,都不能帮助你瞬间提高作品水平,追求实力长进的,应该粗略了解表达式,没事看着玩和不知道自己干嘛的可以深入研究。
表达式没有神奇的效果,任何能用表达式做的效果都可以不用表达式完成。
表达式绝对需要英语大学4级以上,否则不可能学牢固。
每个AE版本的表达式都有细小修改,时刻关注Help文档,当伸手已经成为习惯,你就永远学不会了。
刚才已经探讨过了表达式的基本结构了。所以你现在知道表达式的基本结构了,
输入
运算
输出
这就是最基本的结构。
举例子:
a = yer("input").transform.scale; \\\\\\\\\输入
a*10; \\\\\\\\运算
等于(yer("input").transform.scale)*10\\\\\\\输出(隐藏结果/答案)
那么,问题来了,上面的表达式完全可以用(yer("input").transform.scale)*10代替,而且效果又是一模一样的。这个问题给我们带来了第一个学习表达式的方法,结构法。
1。结构法,总结输入运算和输出,运算和输出有可能隐藏起来,使你摸不清方向,没关系,表达式的规律,是输入永远都会在,只要找到输入,就能挖出运算,挖出运算,就能挖到输出。
常见与头痛的几何数**算,比如说:
transform.position+150*Math.floor(10*time)/Math.exp(time);//////
在这样一句表达式中寻找加减乘除是最明知的办法,不要被可恶的几何运算蒙倒,现在基本的加减乘除找出来,
transform.position+150*Math.floor(10*time)/Math.exp(time);//////
结构法在拆这些表达式的时候,一定要从运算着手,心里要想着输入永远都是清楚的。这里transform.position是输入,一整句都是运算同时又是输出和结果。
这种解法通常带有复杂的逻辑关系和数学几何运算,这里就带来了另外一个问题,加减乘除我们会算,Math.**之类的运算我们怎么知道是什么阿?
同样的,这个问题又到给我们反求法和百度法
2。反求法
反求法是非常实用的一种学习表达式并且理解之的方法,不但要求得真实数据,并且要观察细微效果,有一定数量得表达式作用非常微妙,如果不认真观察之很有可能误解其中含义。
举例子:
transform.position+150*Math.floor(10*time)/Math.exp(time)等于神马?
我们不知道,但是我们知道得是transform.position是什么数值,先不理它,我们来计算150*Math.floor(10*time)/Math.exp(time)。
方法,把该段表达式复制下来,新建一个文字图层什么字都不要打,在timeline在展开文字图层,展开text,在sourcetext处添加表达式,将复制得
150*Math.floor(10*time)/Math.exp(time)这段贴上去。
我们发现这个文字随着时间得变化而变化,现在我们知道了这个运算得具体结果,
就帮我们理解表达式有了很大帮助,至于其中几何运算得奥妙,就可以是用百度法打开搜索相关几何运算来分析,这里我不做介绍了。
在这里我们看一下另外一个反求法的妙用,toComp(point,t=time)。
相信你们很多人在看教程的时候都会有这个表达式的存在,表面上看起来似乎和直接连接position差不多,但是用反求法我们可以得到一个非常直观直观很直观的结果。
图示
那么让只有x,y移动的2D数值跟着3D数值移动的null object,我们添加如下表达式。
这样我们就很直观的观察到了toComp的细微之处,如果看官方文档,toComp的解释是从层中转换一个点到合成里。非常让人摸不清楚,但是利用反求,我们知道了它的具体作用。
反求法的引用敲门是从应用的属性反求。比如表达式应用在position上,我就从position上反求,应用在rotation上我就从rotation反求,诸如此类。
3。数组逻辑
3D图层的移动有xyz,2D图层的移动有xy,颜色信息有R/G/B/A 四个数组,颜色是AE中特殊数组,除文字和颜色外均为1/2/3个数组(文字sourcetext可以有无数个轴的数组,并非文字图层的transform参数或其他数组参数),比如透明度为一轴数组,2D位移为两轴数组,3D位移为三轴数组。
另外数组的使用多以中括号来加以定义,中括号中的函数或者数字0~无限代表数组从第一个至无限个。
假如A是个三轴位移数组,那么A[0]代表A的x轴,以此类推。。。
那么在逻辑中需要注意的是什么呢,数组和数组之间可以做加减乘除的运算。
举例子
(3D数组的运算)
transform.position+[transform.opacity,yer("input").transform.position[0],0]
假设transform.position为[0,0,0],transform.opacity为100%,yer("input").transform.position[0]为0
那么这个运算的等式就是
[0,0,0]+[100,0,0]=[100,0,0]
在数组运算中要抓住主干逻辑,进行运算。切勿抓错数组。