表达式简介
在详细讲解表达式之前,我们先总体了解一下AE中元素之间的关系,据我所知在AE中主要有五种方法建立元素之间的关系:
关键帧:即使元素间没有必然的连接关系,你也可以通过设置关键帧来为它们建立联系。这是最普通的一种连接关系,这种方法也是最灵活的,但是很不利于修改和调试。
合并嵌套: 你可以将几个图层一起放置于一个新合成中,这很像其他应用程序中的成组操作,一种将多层素材元素作为单独素材处理设置的方法。
父子连接: 不用嵌套为图层建立层级关系的方法,在父子连接关系中任何应用于父层级的变化都会立即影响子层级,而针对子层级的设置不会影响到父层级。
动力学脚本: 像表达式一样,动力学脚本是AE中内置的简单功能,动力学脚本可以为当前图层创建基于另一个图层或属性的关键帧。例如,你可以使用动力学脚本令一个图层模拟另一个图层的位置变化。美中不足的是,使用动力学脚本建立的元素间关系只是暂时的,仅当脚本执行时才会起作用,在后面的设调整中,针对一个图层的改变不会反映在另一个图连接层上,除非重新应用动力学脚本。
表达式: 表达式很类似于动力学脚本,不同的是表达式会保持始终使能,只要应用表达式之后,任何关键帧都会永久保持与之的连接关系。
在这几种连接关系中,表达式的功能最强大,但是学习起来有一定的难度,需要一定的毅力。
全局对象
- Comp comp(name) 用另一个名字给合成命名。
- Footage footage(name) 用另一个名字给脚本标志命名。
- Comp thisComp 描述合成内容的表达式。例如:thisComp.layer(2)
- Layer, Light, or Camera thisLayer 是对层本身的描述,thisLayer是一个默认的对象,对它的应用是可选的。例如, 用表达式 thisLayer.width 或 width 可获得同样的结果。
- Property thisProperty 描述属性的表达式。例如,如果写一个旋转属性的表达式就能获取旋转属性的值。
- Number time 描述合成的时间, 单位是秒。
- Number colorDepth 返回8或16表示的彩色深度位数值。例如, 当项目的每通道的彩色深度为16位时colorDepth 返回16 。
- Number posterizeTime(framesPerSecond) {framesPerSecond 是一个数}返回或改变帧率。允许用这个表达式设置比合成低的帧率。
向量数学方法
- Array add(vec1, vec2) {vec1 和 vec2 是数组} 两个向量相加。
- Array sub(vec1, vec2) {vec1 和 vec2 是数组}两个向量相减。
- Array mul(vec1, amount) {vec1 是数组, amount 是数} 向量的每个元素被 amount相乘。
- Array div(vec1, amount) {vec1 是数组, amount 是数}向量的每个元素被 amount相除。
- Number or Array Clamp(value, limit1, limit2) 限制value中每个元素的值在 limit1 到 limit2之间。
- Number dot(vec1, vec2) {vec1 和 vec2 是数组} 返回点积, 结果为两个向量相乘。
- Array [2 or 3] cross(vec1, vec2) {vec1 和 vec2 是数组 [2 or 3]} 返回向量的交积。
- Array normalize(vec) {vec 是数组} 格式化一个向量,如某长度表示为1.0.
- Number length(vec) {vec是数组}返回向量的长度。
- Number length(point1, point2) {point1 and point2 是数组}
随机数方法
- Nothing seedRandom(seed, timeless=false) {seed 是一个数, 默认 timeless 为 false} 取现有的seed 增量一个随机值,这个随机值依赖于层的 index (number) 和 stream (property),但不总是这样. 例如, seedRandom (n, true)通过给第二个参数赋值 true ,seedRandom()获取一个0到1间的随机数.
- Number random()返回0和1间的随机数.
- Number or Array random(maxValOrArray) {maxValOrArray 是一个数或数组}返回0到maxVal间的数,维度 与 maxVal相同; 或返回与maxArray相同维度的数组, 数组的每个元素在 0 到 maxArray之间
- Number or Array random(minValOrArray, maxValOrArray) {minValOrArray 和 maxValOrArray 是一个数或数组} 返回一个minVal 到 maxVal间的数, 或返回一个与 minArray和maxArray有相同维度的数组,其每个元素的范围在 minArray 与 maxArray之间.例如, random([100, 200], [300, 400]) 返回数组的第一个值在 100 到300间, 第二个值在 200 到400间.如果两个数组的维度不同,较短的一个后面自动用0补齐.
- Number gaussRandom()返回一个0到1之间的随机数. 结果为钟形分布,大约90%的结果在 0 到1之间, 剩余10%在边沿.
- Number or Array gaussRandom(maxValOrArray){maxValOrArray是一个数或数组}当用maxVal,它返回一个0到maxVal之间的随机数. 结果为钟形分布,大约90%的结果在0到maxVal之间,剩余10%在边缘.当用maxArray,它返回一个与maxArray相同维度的数组, 结果为钟形分布,大约90%的结果在 0到maxArray之间, 剩余10%在边缘.
- Number gaussRandom(minValOrArray, maxValOrArray){minValOrArray和maxValOrArray是一个数或数组} 当用minVal和 maxVal, 它返回一个minVal到maxVal之间的随机数. 结果为钟形分布,大约90%的结果在minVal到maxVal之间, 剩余10%在边缘.当用minArray和maxArray, 它返回一个与 minArray和maxArray相同维度的数组, 结果为钟形分布,大约90%的结果在 minArray到maxArray之间, 剩余10%在边缘. 剩余10%在边缘.
- Number noise(valOrArray) {valOrArray是一个数或数组 [2 or 3]}返回一个0到1间的数.噪声不是事实上的随机,但它是在样本附近相关的随机数.它基于花边噪声 . 例如, add(position, noise(position)*50).
插值方法
- Number or Array linear(t, value1, value2) {t 是一个数, value1 和 value2 是一个数或数组}当t的范围从0到1时,返回一个从value1到value2的线性插值。当 t < = 0时返回value1,当 t >= 1时返回 value2 。
- Number or Array linear(t, tMin, tMax, value1, value2) {t, tMin和 tMax are 数, value1和value2 是数或数组} 当 t < = tmin时返回value1;当t >= tMax时,返回value2 ;当tMin < t < tMax 时, 返回 value1和value2 的线性联合。
- Number or Array ease(t, value1, value2) {t 是一个数, value1 和 value2 是数或数组} 返回值与linear相似, 但在开始和结束点的速率都为0。这种方法的结果是动画非常平滑。
- Number or Array ease(t, tMin, tMax, value1, value2) {t, tMin, 和 tMax 是数, value1 和 value2 是数或数组} 返回 值与 linear相似, 但在开始和结束点的速率都为0。这种方法的结果是动画非常平滑。
- Number or Array easeIn(t, value1, value2) {t 是一个数, and value1 and value2 是数或数组} 返回 值与ease相似, 但只在切入点value1 的速率为0,靠近value2 一边是线性的。
- Number or Array easeIn(t, tMin, tMax, value1, value2) {t, tMin和tMax 是一个数, value1和value2 是数或数组}返回 值与ease相似, 但只在切入点tMin 的速率为0,靠近tMax 一边是线性的。
- Number or Array easeOut(t, value1, value2) {t 是一个数, value1和value2 是数或数组}.返回 值与ease相似, 但只在切入点value2 的速率为0,靠近value1 一边是线性的。
- Number or Array easeOut(t, tMin, tMax, value1, value2) {t, tMin和tMax 是数, value1 value2 是数或数组} 返回 值与ease相似, 但只在切入点tMax的速率为0,靠近tMin 一边是线性的。
彩色转换方法
- Array [4] rgbToHsl(rgbaArray) {rgbaArray 是数组 [4]} 转换 RGBA 彩色空间到 HSLA彩色空间。输入数组指定红、绿、蓝、透明, 它们的范围都在 0.0 到 1.0之间。结果值是一个指定色调、饱和度、亮度和透明的数组,它们的范围都在 0.0 到 1.0之间。例如, rgbToHsl.effect(“Change Color”)(“Color To Change”)。
- Array [4] hslToRgb(hslaArray) {hslaArray 是数组[4]}. 转换 HSLA彩色空间到RGBA 彩色空间。其操作与rgbToHsl相反。
其它数学方法
- Number degreesToRadians(degrees)转换度到弧度。
- Number radiansToDegrees(radians) 转换弧度到度。
Comp属性和方法
- Layer, Light, or Camera layer(index) {index 是一个数} 得到层的序数(在时间线窗口中的顺序). 例如, thisComp.layer(3).
- Layer, Light, or Camera layer(“name”) {name是一个字串} 得到层名。指定的名字与层名匹配,或者在没有层名时与源名匹配。如果存在重名,After Effects 使用时间线窗口中的第一个. 例如, thisComp.layer(“Solid 1″).
- Layer, Light, or Camera layer(otherLayer, relIndex) {otherLayer 一 个层对象, relIndex 是一个数} 得到otherLayer (层名)上面或下面relIndex (数) 的一个层。 例如, layer(thisLayer, -2) 返回 在时间线窗口中比写这个表达式的层高两层的一个层。
- Number marker(markerNum) {markerNum 是一个数}得到合成中一个标记点的时间。你可以用它减淡标记点的透明,实现淡出。例如, markTime = thisComp.marker(1); linear(time, markTime – .5, markTime, 100, 0).
- Number numLayers 返回 合成中层的数量。
- Camera activeCamera 从在当前帧中着色合成所经过的摄象机获取值。这不一定是你在合成窗口所看到的。
- Number width 返回合成的宽度,单位为像素(pixels.)
- Number height 返回合成的高度,单位为像素(pixels.)
- Number duration 返回合成的持续时间值,单位为秒。
- Number frameDuration 返回画面的持续时间.
- Number shutterAngle 返回合成中快门角度的度数.
- Number shutterPhase 返回合成中快门相位的度数
- Array [4] bgColor 返回合成背景的颜色。
- Number pixelAspect 返回合成中用width/heigh表示的像素(pixel )宽高比。
- String name 返回合成的名字。
脚本属性和方法
- Number width 返回脚本的宽度,单位为像素。
- Number height返回脚本的高度,单位为像素。
- Number duration 返回脚本的持续长度,单位为秒。
- Number frameDuration 返回画面的持续长度,单位为秒。
- Number pixelAspect 返回脚本的像素比, 表示为 width/height.返回脚本的名字。
层子对象属性和方法
- Comp or Footage source 返回层的源 Comp 或源Footage 对象。默认时间是在这个源中调节的时间。例如, source.layer(1).position.
- Effect effect(name) {name是一个字串} 返回 Effect 对象。 After Effects 在效果控制窗口中用这个名字查找对应的效果。这个名字可以是默认名,也可以是用户自定义名。如果这里有一些相同的效果名则选择效果控制窗口中同名字的最上面的一个效果。
- Effect effect(index) {index 是一个数} 返回 Effect 对象。After Effects 在效果控制窗口中用这个序号查找对应的效果。起始于1 且从顶部开始。
- Mask mask(name) {name是一个字串} 返回层 Mask 对象。 这个名字可以是默认名,也可以是用户自定义名。
- Mask mask(index) {index 是一个数} 返回层 Mask 对象。After Effects 在时间线窗口中用这个序号查找对应的遮罩。起始于1 且从顶部开始。
层的一般属性和方法
- Number width 返回以像素为单位的层宽度。 它与 source.width相同。
- Number height 返回以像素为单位的层高度。 它与 source.height相同。
- Number index 返回合成中层数.
- Layer, Light, or Camera parent 返回层的父层对象, 例如, position[0] + parent.width. 6
- Boolean hasParent 如果有父层返回 true ,如果没有父层返回 false .
- Number inPoint 返回层的入点,单位为秒.
- Number outPoint 返回层的出点,单位为秒.
- Number startTime 返回层的开始时间,单位为秒.
- Boolean hasVideo 如果有视频(video)返回 true ,如果没有(video)返回 false.
- Boolean hasAudio 如果有音频(audio)返回 true ,如果没有音频(audio)返回 false.
- Boolean active 如果层的视频开关(眼睛 )打开返回 true ,如果层的视频开关(眼睛 )关闭返回 false.
- Boolean audioActive 如果层的音频开关(喇叭 )打开返回 true ,如果层的音频开关(喇叭 )关闭返回 false.
Layer 特征属性和方法
- Property [2 or 3] anchorPoint 返回层空间内层的锚点值.
- Property [2 or 3] position 如果该层没有父层,返回本层在世界空间的位置值;如果有父层,返回本层在父层空间的位置值 .
- Property [2 or 3] scale 返回层的缩放值,表示为百分数.
- Property rotation 返回层的旋转度数, 对于3D 层, 它 返回 z旋转度数.
- Property [1] opacity 返回层的透明值,表示为百分数.
- Property [2] audioLevels 返回层的音量属性值,单位为分贝.这是一个2维值;第一个值表示左声道的音量,第二个值表示右声道的音量.这个值不是源声音的幅度,而是音量属性关键帧的值.
- Property timeRemap 当时间重测图被激活时,返回重测图属性时间值,单位是秒.
- Marker Number marker.key(index) {index 是一个数} 返回层的标记数属性值. 可能用到的方法和属性只有key(), nearestKey和numKeys.
- Marker Number marker.key(“name”) {name是一个字串} 返回层中与指定名对应的标记号.这个名字是标记名, 它在标记对话框的注释区,例如, marker.key(“ch1″). 这个值对于 marker keys是一个字串, 不是数字.例如, m1 = marker.key(“Start”).time; m2 = marker.key(“End”).time; linear(time, m1, m2, 0, 100); )=
- Marker Number marker.nearestKey 返回最接近当前时间的标记.
- Number marker.numKeys 返回层中标记的总数.
- String name 返回层名.
Layer 3D属性和方法
- Property [3] orientation对3D层 ,返回3D 方向的度数。
- Property [1] rotationX 对3D层,返回 x旋转值的度数。
- Property [1] rotationY 对3D层,返回 Y 旋转值的度数。
- Property [1] rotationZ 对3D层,返回 Z 旋转值的度数。
- Property [1] lightTransmission 对3D层,返回光的传导属性值。
- Property castsShadows 如果层投射阴影返回 1.0 。
- Property acceptsShadows 如果层接受阴影返回 1.0 。
- Property acceptsLights 如果层接受灯光返回 1.0 。
- Property ambient 返回环境因素的百分数值。
- Property diffuse 返回慢射因素的百分数值。
- Property specular 返回镜面因素的百分数值。
- Property shininess 返回发光因素的百分数值。
- Property metal 返回才质因素的百分数值。
层空间转换方法
- Array [2 or 3] toComp(point, t = time) {point 是一个数组[2 or 3], t 是一个数} 从层空间转换一个点到合成空间,例如, toComp(anchorPoint)。
- Array [2 or 3] fromComp(point, t=time) {point 是一个数组[2 or 3], t 是一个数}从合成空间转换一个点到层空间。得到的结果在 3D 层可能是一个非0值。例如 (2D layer), fromComp(thisComp.layer(2).position).
- Array [2 or 3] toWorld(point, t=time) {point 是一个数组[2 or 3], t 是一个数} 从层空间转换一个点到视点独立的世界空间。例如, toWorld.effect(“Bulge”)(“Bulge Center”).
- Array [2 or 3] fromWorld(point, t=time) {point 是一个数组[2 or 3], t 是一个数}从世界空间转换一个点到层空间。例如, fromWorld(thisComp.layer(2).position).
- Array [2 or 3] toCompVec(vec, t=time) {vec 是一个数组[2 or 3], t 是一个数} 从层空间转换一个向量到合成空间。例如, toCompVec([1, 0]).
- Array [2 or 3] fromCompVec(vec, t=time) {vec 是一个数组[2 or 3], and t 是一个数} 从合成空间转换一个向量到层空间例如 (2D layer), dir=sub(position, thisComp.layer(2).position); fromCompVec(dir).
- Array [2 or 3] toWorldVec(vec, t=time) {vec 是一个数组[2 or 3], t 是一个数} 从层空间转换一个向量到世界空间。例如, p1 = effect(“Eye Bulge 1″)(“Bulge Center”); p2 = effect(“Eye Bulge 2″)(“Bulge Center”); toWorld(sub(p1, p2)).
- Array [2 or 3] fromWorldVec(vec, t=time) {vec 是一个数组[2 or 3], t 是一个数}从世界空间转换一个向量到层空间。例如, fromWorld(thisComp.layer(2).position).
- Array [2] fromCompToSurface(point, t=time) {point 是一个数组[2 or 3], t 是一个数} 在合成空间中从激活的摄象机观察到的位置的层表面(Z值为0)定位一个点。这对于设置效果控制点有用。仅用于3D层。
摄象机属性和方法
- Property [3] pointOfInterest 返回在世界空间中摄象机兴趣的的值。
- Property zoom 返回摄象机的缩放值,单位为像素。
- Property depthOfField 如果摄象机景深打开返回 1,否则返回0。
- Property focusDistance 返回摄象机焦距值,单位为像素。
- Property aperture返回摄象机光圈值,单位为像素。
- Property blurLevel 返回摄象机的模糊水平的百分数。
- Boolean active (a) 如果摄象机的视频开关 打开, 返回 true ; (b) 当前时间在摄象机的出入点之间,(c)且它是时间线窗口中列出的第一个摄象机,若以上条件之一不满足,返回 false 。
灯光属性和方法
- Property [3] pointOfInterest 在工作区 返回灯光兴趣点。
- Property intensity 返回灯光亮度的百分数。
- Property [4] color 返回灯光彩色值。
- Property coneAngle 返回灯光光锥角度的度数。
- Property coneFeather 返回灯光光锥的羽化百分数。
- Property shadowDarkness 返回灯光阴影暗值的百分数。
- Property shadowDiffusion 返回灯光阴影扩散的像素。
Note: 灯光对象的大部分属性和方法与层对象相同, 除 source, effect, mask, width, height, anchorPoint, scale, opacity, audioLevels, timeRemap, 和所有的material 属性。
效果的属性和方法
Boolean active 返回 a true value if the effect is turned on in both the 如果效果在时间线窗口和效果控制窗口都打开返回 true , 如果在以上任意一个窗口关闭,返回false。
- Property param(name) {name是一个字串} 返回 效果里面的属性。例如, .effect(“Bulge”)(“Bulge Height”)。效果点控制总是在层空间。
- Property param(index) {index 是一个数} 返回 效果里面的属性。例如, .effect(“Bulge”)(4) 返回 Bulge Height 属性。 效果点控制总是在层空间。
遮罩属性和方法
- Property MaskOpacity 返回遮罩透明值的百分数。
- Property MaskFeather 返回遮罩羽化的像素值。
- Boolean invert 如果遮罩是反向的,返回 true ;否则返回 false。
- Property MaskExpansion 返回 遮罩的像素。
- String name 返回遮罩名。
- String name 返回效果名
特征属性和方法
- Number or Array value 返回当前时间的属性值。
- Number or Array valueAtTime(t) {t 是一个数} 返回指定时间(单位为秒)的属性值。
- Number or Array velocity 返回当前时间的即时速率。对于空间属性,例如位置,它返回切向量值。结果与属性有相同的维度。
- Number or Array velocityAtTime(t) {t 是一个数} 返回指定时间的即时速率。
- Number speed 返回 1D量,正的速度值,等于 在默认时间属性的改变量。 这个元素仅用于空间属性。
- Number speedAtTime(t) {t 是一个数} 返回在指定时间的空间速度。
- Number or Array wiggle(freq, amp, octaves=1, ampMult=.5, t=time) {freq, amp, octaves, ampMult, 和 t 是数} 属性值随机摆动(wiggles) 。 Freq 计算每秒摆动的次数,用于计算属性的基本幅度单位,octaves 是加到一起的噪声的倍频数,ampMult 与 amp 相乘的倍数。 t 基于开始时间。例如, position.wiggle(7, 30, 3).
- Number or Array temporalWiggle(freq, amp, octaves=1, ampMult=.5, t=time) {freq, amp, octaves, ampMult, 和 t 是数} 取样摆动时的属性值。Freq 计算每秒摆动的次数,用于计算属性的基本幅度单位,octaves 是加到一起的噪声的倍频数,ampMult 与 amp 相乘的倍数。 t 基于开始时间。 对于这个函数意味着取样的属性必须被激活,因为这个函数仅在取样期间改变属性值,而不是改变了对应的属性值。. 例如, scale.temporalWiggle(5, .2).
- Number or Array smooth(width=.2, samples=5, t=time) {width, samples, 和 t 是数} 应用一个箱形滤波器到指定时间的属性值,并且随着时间的变化使结果变得平滑。Width (秒) 是经过滤波器平均时间的范围。Samples 等于离散样本的平均间隔数 。通常, 你需要的采样( samples)数是奇数。例如, position.smooth(.1, 5).
- Number or Array loopIn(type = “cycle”, numKeyframe = 0)在层中从入点到第一个关键帧之间循环一个指定时间段的内容。被指定为循环内容的基本段,是从层的第一个关键帧向后到层的出点方向的某个关键帧间的内容。 numKeyframe是指定以第一个关键帧为起点设定循环基本内容的关键帧数目(计数不包括第一个关键帧)。例如, loopIn(“cycle”, 1)从层的入点开始到第一个关键帧结束循环第一个关键帧到第二个关键帧间的内容。循环的次数由入点到第一个关键帧间的时间和循环内容长度决定 。
- Number or Array loopOut(type = “cycle”, num关键帧 = 0) 在层中从最后一个关键帧到层的出点之间循环一个指定时间段的内容。被指定为循环内容的基本段,是从层的最后关键帧向前到层的入点方向的某个关键帧间的内容。 numKeyframe是指定以最后一个关键帧为倒数起点设定循环基本内容的关键帧数目(计数不包括最后一个关键帧)。例如, loopOut(“cycle”, 1)从层的最后关键帧开始到出点结束循环最后一个关键帧到倒数第二个关键帧间的内容。循环的次数由最后关键帧到出点间的时间和循环内容长度决定 。
- Number or Array loopInDuration(type = “cycle”, duration = 0)在层中从入点到第一个关键帧之间循环一个指定时间段的内容。被指定为循环内容的基本段,是从层的第一个关键帧向后到层的出点方向duration秒的内容。 duration是指定以第一个关键帧为起点设定循环基本内容的时间秒数。例如, loopInDuration(“cycle”, 1) 从层的入点开始到第一个关键帧结束循环第一个关键帧以后1秒的内容。循环的次数由入点到第一个关键帧间的时间和循环内容长度决定 。
- Number or Array loopOutDuration(type = “cycle”, duration = 0) 在层中从最后一个关键帧到层的出点之间循环一个指定时间段的内容。被指定为循环内容的基本段,是从层的最后关键帧向前到层的入点方向duration秒的内容。 duration是指定以最后一个关键帧为倒数起点设定循环基本内容的的时间秒数。例如,loopOutDuration(“cycle”, 1) 从层的最后关键帧开始到出点结束循环最后一个关键帧到倒数倒数1秒时间的内容。循环的次数由最后关键帧到出点间的时间和循环内容长度决定 。
- Key key(index) 用数字 返回 key对象。例如, key(1) 返回第一个关键帧对象。 当访问 key 对象时能获得Time, Index, 和属性值。 例如, 下面的表达式给出了第3个位置关键帧处的位置值:position.key(3).value。下面的表达式,当将它写到设置透明属性动画的层时,将忽略在透明属性中设置的关键帧的值而仅用关键帧定位在什么时间层闪现。d = Math.abs(time – nearestKey(time).time); easeOut(d, 0, .1, 100, 0).
- Key key(markerName) 用这个名字 返回标记的 key 对象。仅用于标记属性。
- Key nearestKey(time) 返回指定时间最近的关键帧对象。
- Number numKeys 返回 在一个属性中 关键帧 的数目。
关键帧属性和方法
- Number or Array value 返回关键帧的值。
- Number time 返回关键帧的时间。
- Number index 返回 关键帧的序号。
文章评论