范文一: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="">
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(
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(
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.
String name 返回脚本的名字。
层子对象属性和方法
--------------------------------------------------------------------------------
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. 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(
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(
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(
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(
Property param(index) {index 是一个数 } 返回效果里面的属性。例如 , .effect(
遮罩属性和方法
--------------------------------------------------------------------------------
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 =
Number or Array loopOut(type =
Number or Array loopInDuration(type =
Number or Array loopOutDuration(type =
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 返回关键帧的序号 File 菜单
新建← New
┗ New Project →新建项目
New Folder →新建文件夹
打开项目← Open Project
打开最近项目← Open Recent Projects
关闭← Close
保存← Save
另存为← Save As...
保存副本← Save a Copy...
恢复← Revert
导入← Import
┗ File... →文件
Multiple Files... →多个文件
Placeholder... →输入占位符
Solid... →实色
导入最近镜头← Import Recent Footage
输出← Export
查找← Find...
再次查找← Find Next
添加镜头到合成← Add Footage to Comp
选定脚本建立合成← New Comp From Selection... 整理镜头← Consolidate All Footage
删除未用镜头← Remove Unused Footage
简化项目← Reduce Project
文件打包← Collect Files...
浏览文件夹← Watch Folder...
运行脚本← Run Script
建立代理← Create Proxy
┗ Still... →静态图片
Movie... →影片
设置代理← Set Proxy
┗ File... →文件
None →无
解释镜头← Interpret Footage
┗ Main... →常规
Proxy... →代理
Remember Interpretation →保存解释
Apply Interpretation →应用解释
替换镜头← Replace Footage
┗ File... →文件
Placeholder... →占位符
Solid.. →实色
重载镜头← Reload Footage
显示所在文件夹← Reveal in Explorer 项目设置← Project Settings...
打印← Print...
退出← Exit
Edit 菜单
撤消← Undo Copy
重复← Redo Copy
历史记录← History
剪切← Cut
复制← Copy
粘贴← Paste
清楚← Clear
副本← Duplicate
分层图层← Split Layer
抽出工作区域← Lift Work Area 挤压工作区域← Extrace Work Area 选择全部← Select All
全部取消← Deselect All
标签← Label
清空← Pruge
┗ All →全部
Undo →撤消
Image Caches →图象缓存 Snapshot →快照
Video Memory →视频内存 编辑原稿← Edit Original
模版← Templates
┗ Render Settings... →渲染设置 Output Module... →输出模式 预置← Preferences
┗ General... →常规 Previews... →预演
Display →显示
Import... →输入
Output →输出
Grids & Guides... →辅助线及网络 Label Colors... →标签颜色 Label Defaults... →标签设置 Cache... →缓存
Video Preview... →视频预演
Animation 菜单
添加关键帧← Add Keyframe
冻结关键帧← Toggle Hold Keyframe
关键帧插值← Keyframe Interpolation...
关键帧速率← KeyframeVelcity...
辅助关键帧← Keyframe Assistant
┗ Convert Audio to Keyframes →转换音频为关键帧 Convert Expression to Keyframes→转换表达式为关键帧 Easy Ease →缓和曲线
Easy Ease In →缓和曲线进入
Easy Ease Out →缓和曲线离开
Exponential Scale →指数缩放
RPF Camera Import → RPF 摄象机导入 Sequence Layers... →图层排序
Time-Reverse Keyframes →反转关键帧
文字动画← Animate Text
┗ Anchor Point →轴心点
Position →位置
Scale →缩放
Skew →倾斜
Rotation →旋转
Opacity →不透明度
All Transform →所有变换
Fill Color →填充色
Stroke Color →描边色
Stroke Width →描边宽度
Tracking →追踪
Line Anchor →线形频谱
Line Spacing →线形间距
Character Offset →字符位移
Character Value →字符值率
添加文字选择器← Add Text Selector
┗ Range →平行
Wiggly →抖动
移除所有文字动画← Remove All Text Animators 添加表达式← Add Expression
追踪运动← Track Motion
稳定运动← Stabilize Motion
追踪当前属性← Track this property
显示关键帧← Reveal Animating Properties 显示被修改属性← Reveal Modified Properties
范文二:ae表达式祥解
ae 表达式 wiggle 表达式祥解
我们经常在 AE 里 制作文字特效 , 运用好 表达 式能获得很震憾的 效果 , wiggle 表达式使用率 超高!下面是 wiggle 祥细解说,大家一定能很快理解的。
函数 :
- wiggle(freq, amp, octaves = 1, amp_mult = .5, t = time)
参数 :
- freq 频率
- amp 振幅
- octaves 振幅幅度
- amp_mult 频率倍频
- t 持续时间
说明 :
频率和振幅是必须具备的参数其他选填写
例如 wiggle(50,100)
实例 :
- 打开 AE CS3
- 新建 工程
- 新建合成
- 使用文字工具 Ctrl+T 在合成内输入文字
- 给文字层 应用动画 预设(菜单 – 动画 – 应用动画预设)
(..\Adobe \Adobe After Effects CS4\Support Files\Presets\Transform\Separate XYZ Position.ffx )
- 查看控制效果 F3 (XYZ 位置分离()
- 按住 ALT 键点击该效果 Y 轴关键贞记录按钮(时钟图标)
- 在表达式处输入 :wiggle(50,100)
- 播放 , 预览效果(这时已经可以看见通过 wiggle 函数 , 文字在不停的颤动)
- 给文字层添加效果(表达式控制 – 滑动控制)
- 将(XYZ 位置分离)中 Y 轴上表达式改为
str=effect (” 滑动控制 ”)(” 滑动 ”)
wiggle(50,str)
- 此时可以通过 ” 滑动控制 ” 中的滑杆控制文字 Y 轴振动幅度。
- 在 ” 滑动控制 ” 效果中加入关键贞 , 这样就可以控制 wiggle 振动幅度了。
AE 里还有很多表达式需要大家慢慢 学习 记忆, AE 高手 都能熟练运用表达式制作自己想要 的效果。
wiggle(50,100)里的 50,这么高的频率其实没必要,一般 1-10就可以了,输入 10或 25基本 看不出区别。
后面这个 octaves = 1 没讲怎么用将这个数值提高到 3-8左右,可以看到类似二次抖动的效 果。
直接应用 wiggle()函数的实例:
a=wiggle(3,25);
b=wiggle(10,50);
v=[a[0],b[1]]
如果层是打开了 3D
a=wiggle(3,25);
b=wiggle(10,50);
c=wiggle(3,150);
v=[a[0],b[1],c[2]]
范文三:ae弹性表达式
ae 弹性表达式
其实弹性表达式已经很普遍了,几乎到处都 是, 呵呵, 可为啥要介绍这段表达式呢?我觉得其中有很多技巧值得 我们学习!这段表达式来之 J 大的一篇帖子,好像是一个叫 Frank 的 外国大神写的! 其中有一句我也没弄懂到底是什么作用, 各位大哥谁 明白知会我一声啊!下面是这段表达式,说它是万能,就是不管啥条 件,拷贝下来往你的位移动画中位置参数里一扔就 OK 了!有兴趣的 可以试试,无论你的动画是怎么动的,关键帧处都会产生弹性动画, 而且是合理那种 !
amp = .1;
freq = 2.0;
decay = 2.0;
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);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}
else{value}
下面开始解释,前三行就不用说了,都是变量的定义,分别是振幅、 频率、衰变指数或者叫阻力阻尼啥的
n=0;
N 其实是用来记录关键帧序号的,这个变量很重要
if (numKeys > 0)
判断关键帧个数是否大于 0, 如果是执行 {}中内容
n = nearestKey(time).index
取靠近时间线的那个关键帧的序号, 这里要注意取得的关键帧有可能 是时间线前的最后一个, 也可能是时间线后的第一个, 所以才有下一 句的 IF 判断。
if (key(n).time > time){n--;}
如果取得的关键帧是时间线后面第一个,则 N 的序号减 1,这样就保 证里 N 永远代表的是时间线前的最后一个关键帧。
if (n == 0){ t = 0;}
如果没有关键帧(N=0)时, T=0。 T 是一个频率改变因数,也是一个 阻力改变的因数。
else{t = time - key(n).time;}
如果 N 不为 0, 那么 T 就等于时间线与其之前最后一个关键帧的时间 的差,也就是说时间线离这个关键帧越远 T 就越大。
if (n > 0)
当有关键帧,也就是说有动画的时候执行 {}里的内容,前面那些句都 是铺垫,这个大括号里的才是正戏。
v = velocityAtTime(key(n).time - thisComp.frameDuration/10); velocityAtTime()这个函数是求在某一时刻对象的速度, AE 里面叫关键 帧数率,单位是“像素 /秒” ,怎么理解这个呢?其实就是你在做对象 位移动画时, 关键帧时刻对象相对屏幕的瞬时速度, 说屏幕有点不准 确,应该说对象所在合成。
*我不明白了地方也来了, thisComp.frameDuration 的解释是 “返回画 面的持续时间” ,可是我怎么试都没弄明白,一直这个的返回值都是
0。 当我把这句改成 v = velocityAtTime(key(n).time); 也不影响最后的效 果。不过那位大大既然写这个应该是有意图的,谁知道告诉我吧!呵 呵。
看 到 楼 下 的 兄 弟 提 醒 , 我 又 研 究 了 一 下 , 发 现 我 错 了 - thisComp.frame
Duration/10 这个是不能去掉的, 不然会出现 很 奇 怪 的 弹 动 现 象 。 但 是 减 号 后 面 也 不 一 定 要 是 thisComp.frameDuration/10 , 只要是一个非常小的数就可以, 主要可 能是取关键帧前很短一个时刻的速度,就算是用 F9平滑关键帧,弹 动也能发生效果。 用 thisComp.frameDuration/10 只是因为它足够小, 因为是帧率时间的 1/10嘛。这回对了,哈哈!
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
肉都在这句了,呵呵!
value+ 这个是在原来值的基础上做弹性设置的,这么写的好处是无 论你把这段表达式放在 2D 还是 3D 图层中都可以起作用,不用 [x,y,z]这么写是确保动画在三个轴向上的运动都会有弹性动画。
v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
V 是对象关键帧的瞬时速度,这个变量是作为一个振幅变量的补充, 这样更符合物理现象, 当速度越大振幅就越大。 当对象的速度是 0时, 那弹性表达式结果也为 0。
T 在 Math.sin()中是作为频率的补充,作用是时间线离关键帧越远, 值越大频率越快,这样比较符合物理规律。
T 在 Math.exp()中试阻力指数,作用是时间线离关键帧越远,值越大 阻力越大,最后让弹动归于平静。
else{value}
如果没有关键帧,原来值保持不变。
哦了,不知道大家能不能看懂!懂不懂都留句鼓励我的回复吧!哈哈 .
补充一下:这个表达式在关键帧做平滑以后是不起作用的, 因为平滑 后的关键帧速度是 0。再一个就是如果有两个以上关键帧的时候,除 第一个外都会有弹性效果,程序未做判断,唉!这也算瑕疵吧!也许 不算,呵呵
范文四:ae表达式解析
表达式简介
在详细讲解表达式之前,我们先总体了解一下AE中元素之间的关系,据我所知在AE中主要有五种方法建立元素之间的关系:
关键帧:即使元素间没有必然的连接关系,你也可以通过设置关键帧来为它们建立联系。这是最普通的一种连接关系,这种方法也是最灵活的,但是很不利于修改和调试。
合并嵌套: 你可以将几个图层一起放置于一个新合成中,这很像其他应用程序中的成组操作,一种将多层素材元素作为单独素材处理设置的方法。
父子连接: 不用嵌套为图层建立层级关系的方法,在父子连接关系中任何应用于父层级的变化都会立即影响子层级,而针对子层级的设置不会影响到父层级。
动力学脚本: 像表达式一样,动力学脚本是AE中内置的简单功能,动力学脚本可以为当前图层创建基于另一个图层或属性的关键帧。例如,你可以使用动力学脚本令一个图层模拟另一个图层的位置变化。美中不足的是,使用动力学脚本建立的元素间关系只是暂时的,仅当脚本执行时才会起作用,在后面的设调整中,针对一个图层的改变不会反映在另一个图连接层上,除非重新应用动力学脚本。
表达式: 表达式很类似于动力学脚本,不同的是表达式会保持始终使能,只要应用表达式之后,任何关键帧都会永久保持与之的连接关系。
在这几种连接关系中,表达式的功能最强大,但是学习起来有一定的难度,需要一定的毅力。
使用表达式的时机
使用表达式为图层建立动态连接是一种非常方便高效的方法。
从父层级中仅仅复制一个参数. 有些时候,你只想从一个图层中复制一个参数,而不是一整套父子连接图层关系。 例如, 两个图层建立了父子联接, 利用父子联接建立的图层关系中子层级会继承父层级的位置与旋转属性。而应用表达式建立的图层关系,子图层只会继承父层级的一个属性,而其旋转属性由于未被联接到旋转属性,所以该参数不会改变。
通过使用表达式你不用设置任何关键帧就可以为参数设置动画。
你可以使用表达式为存在的关键帧增加随机性,这种方法非常巧妙,它保留了原始的关键帧设置。使用表达式建立的随机性效果可以轻松的切换表达式的使能状态,不会影响原始关键帧。
通常情况下使用其他方法可以实现的效果就不要使用表达式,AE具有强大的工具和功能来实现各种各样的效果。例如,使用父子连接可以实现的效果就不需要再使用表达式。表达式功能的确很强大,但是它不是万能的,而且精心书写表达式后还要维护表达式。
解析表达式
简单的说表达式就是为特定参数赋予特定值的一条或一组语句,最简单的表达式就是一个数值:6; 当然了,这种表达式的用处不是很大,常量通过调整参数的值来实现就可以了,像下面这种变量表达式用处会更大:rotation;
当执行该语句时,AE的表达式会自动计算当前图层当前时间的旋转参数值,返回的值会赋予表达式连接的参数值。 如果表达式应用于图层的不透明度属性,那么该图层的不透明度属性会随着旋转属性同步变化,当旋转三十度的时候,图层不透明度也会被设置为30%。
AE中的表达式以Javascript语言为基础,Javascript包括一套丰富的语言工具来创建更复杂的表达式,当然包括最基本的数学运算:opacity*10;
意思就是当前图层在当前时间的不透明度参数乘以10,因为不透明度参数的值阈是0,100,所以该表达式的之余就是0,1000,该值将赋予表达式连接的任何参数。
等号的位置
也许你认为表达式应该是这种形式,―position=rotation‖,AE中的表达式不需要使用等于号将其赋予参数,为参数添加表达式的时候,直接将计算出来的结果赋予参数。当然,你也可以在表达式中使用等于号,为参数赋变量值。
表达式、参数值一一对应
一句表达式控制一个参数,因为一句表达式仅连接在一个参数上,它仅将值赋予该参数。例如,你不可以使用一句表达式来同时修改一个图层的位置和旋转值;你只有创建两个区分开来的关键帧,一个连接到位置属性上,另一个连接到旋转属性上。
多行表达式
表达式可以以多条语句的形式来组织书写。
当表达式由多条语句组成的时候,最后一行语句所计算出来的值将赋予表达式连接的参数,如下面的表达式:
offset=30;
ralph=rotation+offset;
ralph;
该表达式组将会使图层的旋转值设置为当前时间的旋转值加上30度。
为参数加入表达式 有两种方法为选择的参数加入表达式,一种方法是在时间轴选择参数后,从动画菜单中选择增加表达式;另一种方法 是按住ALT键的同时鼠标左键单击参数左边的马表,快速为参数加入表达式。
加入表达式后,你会发现时间轴发生了变化:
首先,在参数名称的左侧多了一个带有―=‖的按钮,单击该按钮来切换表达式的使能状态。 其次,参数值变为红色,表示该参数由表达式控制,手动编辑该参数将失效。 第三,在参数名称的右边增加了并排的三个图标(稍后讨论)。
最后,在时间轴中增加了一个表达式编辑区域,该区域可以通过下拉箭头来改变显示范围。 单击第一个图标按钮会在时间轴窗口中打开表达式的变化图表,从中你可以观察到参数值的变化曲线和参数变化的加速度。如果表达式影响到元素的运动路径,那么合成窗口中显示的路径曲线也会发生变化。
第二个图标按钮是拾取线一个帮助你书写表达式的工具,只需要简单的将拾取线拖动到另一个参数上面,就可以为当前参数与拾取的参数建立动态连接关系,在后面的教程中详细讲解拾取线的功能。
第三个按钮是表达式结构下拉菜单,使用该菜单可以方便的参考AE的表达式语言,使用该菜单可以清晰的看到表达式所影响的属性和元素。
拾取线
使用拾取线可以方便的建立参数间的连接表达式:
例如,为图层的不透明度添加表达式,然后拖动拾取线到图层旋转参数上就会为不透明度与旋转参数建立动态连接,现在再为旋转参数设置关键帧,会同步影响到不透明度属性: 如果你将拾取线拖动到同一合成不同图层的属性参数上,那么AE就会创建一个稍微复杂一点的表达式,表明与哪一个图层的属性建立动态连接:
this_comp.layer("Solid 1").opacity 这个表达式首先指明合成("this_comp"),然后指明该合成中的图层("solid1"),最后指明该图层被用于建立连接的属性(opacity)。
顺便说一句,拾取线没有什么特别神奇的地方,可以说它仅仅起到自动将连接的属性名称及其所属合成与图层添加到表达式文本区。你也可以亲自手写表达式,但是这种方式远远不及拾取线方便准确,特别是当需要编写较复杂的表达式时,拾取线的高效快捷更是体现的淋漓尽致。
向量、阵列、维数、索引 有时候你会发现通过拾取线创建的表达式看上去好象在重复参数,例如,如果你将位置参数的拾取线拖动到旋转参数上,你就会得到如下表式: [rotation, rotation];
因为位置属性有两个参数(X、Y坐标)而旋转属性只有一个参数,建立连接关系后,表达式自动将旋转参数应用两次分别位置属性的X、Y坐标参数。
由两个或三个数值来描述属性的参数组叫做向量或阵列,AE中很多的属性参数是向量式的,包括位置、轴心点和缩放等属性;
与阵列对应的用单个数值来描述属性的参数叫做标量式参数。
向量与阵列:究竟向量和阵列之间有什么区别呢,你也许会注意到AE的帮助文件有时候互用这两个单词,简单的说向量是既有大小又有方向的数字阵列,其运算结果即要考虑到大小又要考虑到方向;阵列是一套独立元素的组合,阵列中可以包含任何元素,可以是物体阵列,词汇阵列或者是混合阵列:
ralph=[10, this_layer, "bob"];
也许没有人会知道上面的这种阵列会有什么用处,但是它确实是一个正确的阵列,当然在AE中我们大部分时间内遇到的是数字阵列(也叫向量)。所以,在接下来的描述中,当谈论到通用的概念和操作应用时,我们使用阵列来描述;当涉及到特殊的数字阵列时我们用向量来描述。
索引:对于阵列来说,你可以使用阵列名加上包含数字的中括号从阵列中提取需要的单一元素,例如:position[0];
这种表达方法叫做索引,注意在阵列中使用索引调用元素时,必须从0开始计数第一个元素。所以,上面的表达式就返回位置属性向量中的第一个参数——x坐标,那么position[1]就返回位置属性中的Y坐标,千万不要搞混淆了,在AE中虽然所有的调整都是从1开始的,但是当使用索引时,必须从零开始计数。
建立阵列:如果要建立阵列,可以将数值以逗号分隔开放入中括号中:
my_vector=[10,20,30];//该表达式的意思是将一个三维数组赋予变量my_vector,该
数组中包含三个元素分别是10,20,30,
维数 :阵列中的元素个数代表阵列的维数,例如上面的my_vector是一个三维数组,位置属性是一个二维数组或三维数组(转变为三维图层)。标量式的属性如旋转和不透明度属于一维数组(准确说单一数字或者是标量数值就是一维向量)。
需要注意的是诸如位置、属性这样的多维数组或者是自定义的数组变量,不需要将他们的名字写在方括号中,AE会将其识别为数组。当要索引阵列或者是描述阵列时,需要使用方括号。
修改阵列中的一个元素 :可以用如下的方式来书写位置表达式:
[position[0], position[1]];
将位置阵列中的两个参数分别提出来后,再将他们放入同一个阵列中,看上去与仅仅书写positon的结果相同,优点是你可以使用这种结构来修改阵列中的一个元素而不影响另外元素,例如:top_of_layer=0;
[anchor_point[0], top_of_layer]; 在这个表达式中,阵列中的第一个元素是轴心点的X坐标值,第二个元素是0,如果将该值赋予轴心点属性,那么轴心点的X值将受AE的控制调整,而轴心点的Y值将始终为0。 当使用这种结构时要特别注意,如果将图层设置为3d图层,就需要重新书写表达式,将位置与轴心点Z轴考虑进去。例如,如果仍然使用上面轴心点的例子,但是这次将轴心点所在的图层设置为3D图层,AE会自动将丢失的Z轴坐标设置为0,这当然比出现程序错误要强的多,但是所得到的结果未必是我们需要的,因为表达式将忽略轴心点的Z轴坐标的变化。
再看另外一个例子,假如你将一个图层的位置属性复制到另外一个图层上,并且将该参数的Y轴值减去100:
ralph=this_comp.layer(1)
[ralph.position[0], ralph.position[1]-100]; 如果这时将图层设置为3D图层,你会发现对控制图层的Z轴所做的任何操作丝毫不会影响到受控图层的Z轴,因为表达式中没有表明Z轴的坐标值,AE会自动将其设置为0。 参数值范围:当使用表达式中的拾取线来建立参数之间的关系时,AE会自动纠正由于错误的维数匹配导致的错误,但是这种纠正之后的表达式并不意味着就是你所需要的,物理错误是避免了,但是逻辑错误仍然会影响你的创作。
在这里特别强调一下,有时候你需要调整当前参数值以匹配目标参数。例如,在前面的例子中我们使用图层的旋转属性来控制图层的不透明度属性,你会发现当旋转属性达到100度时,不透明度属性就达到了上限,但是我们想要的效果是当图层完成一个周期的旋转时其不
透明度回到原来的值,我们就需要调整参数范围以达到我们的需要。
缩放参数范围值的方法很简单,可以利用公式(当前连接参数,当前连接参数范围上限,目标连接参数,目标连接参数范围上限),还是使用上面的例子来说明,我们需要将旋转参数的范围(0,360)缩放到不透明度参数的范围(0,100),所以我们就需要为不透明度加上表达式:
rotation / 360 * 100,从而就达到了我们需要的效果,不透明度在0,360度范围内变化: 用这个简单的小技巧可以完成很多期望的效果。例如,使用一个轮胎的素材作为图层,我们就可以利用该图层的位置属性来驱动图层的旋转属性,我们只需缩放位置属性来为旋转属性建立正确的连接表达式,因为轮胎每旋转360度就会移动一个周长的距离,所以我们应该这样书写表达式: rotation=distance/circumference*360:
插值方法:线性liner(),平滑ease()
例我们已经学习了怎样利用表达式来缩放参数值的范围,只需要简单的乘除运算就可以了。如将旋转参数范围(0,360)缩放到不透明度参数范围(0,100),但是这不是唯一的方法,AE提供了一套内置的插值算法进行参数之间的转换:
linear(t, t_min, t_max, value1, value2) ease(t, t_min, t_max, value1, value2) ease_in(...), ease_out(...)
这些语句看起来很复杂,因为语句中包含很多参数:
t 当前参数,例如旋转参数,不透明度参数或者是你所选择的其他变量,该参数必须是一维的,该参数为必选参数。
t_min 当前参数范围的下限,该参数为可选参数,如果参数范围的下限或上限被忽略掉了,那么AE会将参数的范围定义在0,1之间。
t_max 当前参数范围的上限,该参数为可选参数。
value1 目标参数范围下限,当t?t_min时,表达式返回该值,该值可以是一维标量也可以是二维向量,与value1的维数相同,该参数为 必选参数。
value2 目标参数范围上限,当t?t_max时,表达式返回该值,该值几可以是一维标量也可以是二维向量,但是如果该值与value1 的维数不同,AE会自动以value1 值为标准进行匹配,该参数为必选参数。
通过下面的例子让我们来了解一下该语句的含义:
linear(time, 0, 5, 0, 360);通过上面的学习,我们应该将这个语句理解为,时间的变化
范围是0到5,目标参数的范围是0到360,整个变化过程是线性的。如果将该表达式应用到图层的旋转属性上,那么你会发现图层在前5秒内完成了一周的旋转。
应用该表达式后,图层在第五秒停止旋转,这就是与我们前面介绍的直接手写公式time/5*360最大的区别,插值算法自动在当前参数与目标参数之间采样范围极值。 另外一个区别就是你可以设置不同的插值算法:ease(),ease_in()和ease_out()。这些插值算法与同名的关键帧插值算法(通过关键帧助手菜单设置)的作用相同。利用这些插值算法可以为数值转换计算提供一个更自然的运算过程,从而得到更流畅的变化效果,仅仅使用前面介绍的手写公式是做不到这一点的。
示例: 滚动栏 现在让我们使用这种简单的方法来快速完成一个例子,我们将制作一个滚动栏的动画。首先我们需要建立两个图层,一个文本区域图层和一个滚动栏图层。我们要为文本图层的轴心点加入表达式,因为这样可以保证我们可以操纵图层的位置属性(当图层滚动时位置属性仍然不会改变)。
记住一定要在一个方向上控制轴心点以得到正确的滚动效果,在这个例子中我们将对轴心点做垂直方向的运动以使文本区在合成窗口中上下滚动。为了使滚动的范围最大,也就是文本区域全部实现滚动,我们将轴心点的Y值范围设置为0到图层的高度,也就是我们的目标参数值为:
value1=0;value2=height;
至于当前参数范围,我们将其设置在合成窗口的高度之间,我们需要在顶部与底部空出几行以得到更好的效果。假如合成窗口的尺寸为320×240,那么就将当前参数范围设置在25至215之间,当滚动栏在Y轴上从25运动到215时,文本区将开始滚动。可以设置: t_min=20
t_max=220
当然,当前参数就是滚动栏的Y轴坐标:t=this_comp.layer("Scroll").position[1]
将几条语句综合起来,加以恰当的变量名称,我们就得到了下面的表达式:
scroll_y=this_comp.layer("Scroll").position[1]; scrolled_amount=linear(scroll_y, 20, 220, 0, height);
最后我们将scrolled_amount的值放到一个二维数组中,让文本图层的轴心点X轴坐标保持不变,最终的表达式为:
scroll_y=this_comp.layer("Scroll").position[1]; scrolled_amount=linear(scroll_y, 20, 220, 0, height);
[anchor_point[0], scrolled_amount];//(只为滚动栏Y轴的位置属性设置关键帧): 如果将该表达式应用到3D图层的旋转属性上,就可以制作出三维滚动旋转效果: 缓存参考对象:相当于临时变量
前面我们已经讲解了如何使用拾取线来建立简单的表达式,有时候你不想也不能通过这种方式来建立表达式。例如,你不可以将拾取线拖动到屏幕中不可见的参数上(图层宽度或者是持续时间等)。
在这种情况下,你就需要建立一个缓存参考对象,这要比使用拾取线复杂的多,因为你需要理解一些Javascript的语法,刚接触到这种方法时也许会感到很困难,一旦我们理解了一些术语后,我们就会感受到建立参考对象的方便之处。
对象:简单的说对象就是一个容器,每一个对象都可以包含其他的对象、属性和方法。 例如,AE中的一个合成就是一类物体,每一个合成中都可以包含有其他的对象,像图层或者诸如持续时间和宽度等属性。AE中的所有元素对于我们来说都是很熟悉的——合成、图层、不透明度等等,他们或者属于对象或者属于对象包含的物体。
因为对象可以包含其他的对象,所以说对象存在层级结构,位于最高层级上面的对象叫做全局对象。
全局对象和非全局对象
要标识需要从中提取数据的属性,必须首先标定一个全局对象。
全局对象在AE的表达式中不需要作出任何的特定说明具有唯一的指向作用,其他的对象均隶属于全局对象。要想指向特定的非全局对象,必须首先在其前面加上所在的全局对象名称。 还没有理解,没关系,我们用街道地址来做一个比喻,如果要邮寄一封信件,仅将收信人地址写成92号的话邮递服务部门就会十分迷茫,因 为在全国可能有数十万个92号的门牌,而你所说的究竟是哪一个呢,所以说你至少要在地址前面加上省份、城市、地区和街道,如果你在海外还需要注明国家,至于国家的上一级就没什么说明的意义了——任何国家均在地球上是人人皆知的,那么国家就是全局对象。
因此,在AE中,在任何制作前你需要建立一个全局对象,就像你需要在信封上面注明收信人所在国家的地址一样。AE中的全局对象包括:
全局对象 返回对象类型
确定了全局对象后,我们就需要设置属于该对象的次级物体、属性或者是方法,但是你又怎么知道你所选择的属性或者是方法什么意思呢, 要查阅AE用户手册中的表达式部分来进行参考设置。
,"this_comp"就会返回合成对象,然后你就可以在参考表首先你需要明确对象的类型,例如
格或用户手册中查找该类对象所包含的属性、方法或者是次级物体。所以,设置完全局对象后,我们可以在当前合成中选择一个特殊图层:
this_comp.layer("Solid 1") 该表达式返回当前合成中叫做―solid1‖的图层,如果我们仅仅需要一个图层次级对象,那么到此就可以结束了,如果我们还需要该图层的属性或者是事件就需要在该语句后面加上相应的参数。
让我们再来看一下语句的书写方式,javascript语法规定全局对象与次级对象之间必须以点号分割,以说明物体之间的层次关系。
另外,在整条语句中,除了引号中间图层名称之间可以加入空格外,其余地方不允许出现空格。
如果你仍然感到这个语法十分麻烦,那么你还可以使用拾取线来帮助你,在表达式区域使用鼠标选中需要物体的参数参考连接的部分使其高亮显示,然后拖动鼠标到需要建立连接的参数上,AE将自动插入正确的对象参考连接。
除了我们前面列出的属性外,图层还包括下面的属性和方法:
图层属性或方法 返回值 维数 单位
这个表格不是十分详细。可以查阅AE的用户手册. 这里的表格仅仅证实图层的属性可以返回给不同对象, 甚至包括其他合成. 例如你可以建立下面的表达式:
this_comp.layer("Nested Comp").source.layer("Solid 1").position
默认对象——当前图层
图层参考语句看起来十分烦琐,也不便于记忆,AE提供了默认的对象以简化最通用的参考对象:this_layer,如果不设置任何全局对象,AE会自动理解为针对当前图层,并且所有的操作都从当前图层开始。这就是你可以只写"opacity"而不必书写"his_layer.opacity"
的原因。
即使你想选择当前合成中的另外的图层, 你也不能写成这种形式?layer("Layer 1")‘ 因为图层不是全局对象–他们是属于合成的次级对象, AE需要知道图层所在的合成. 所以你需要在图层前面加上合成名字:this_comp.layer("Layer 1") 实例应用:在第一部分的最后,我们将使用前面介绍的表达式基础部分的知识来完成一个简单的小例子。我们将重新使用轮胎的例子,使用移动属性来控制图层的旋转属性。 首先,让我们整理一下制作思路,我们要给图层的旋转属性加上表达式,并在表达式的最后以一个常量结束,所以首先要给旋转参数加上一个表达式。
接下来,我们需要给图层的位置属性设置关键帧,以位置属性的变化驱动旋转属性的变化,在我们的例子中,我们仅仅需要轮胎在X 轴上移动,所以我们只需要:position[0] 真实的物理世界告诉我们,当轮胎移动一个周长的距离时,它将完成一个周期(360)的旋转,在开始时我们会为设置计算公式而犯愁,还需要知道,轮胎的尺寸会影响到在一个旋转周期内其移动的距离,所以我们需要了解轮胎的尺寸,图层的宽度。
假如轮胎的尺寸与图层的尺寸相差无几(在轮胎的周围没有空白的区域),我们可以使用图层宽度来描述轮胎的直径:width;
但是我们不能直接使用图层宽度,我们需要使用图层宽度来计算出轮胎的周长,
个像素,circumference=width*Math.PI; 如果轮胎的宽度是100个像素,他的周长将会是314但是如果我们改变图层缩放属性呢,再使用图层的宽度来计算轮胎的周长所得到的结果就不会准确,为了得到更准确的计算结果,我们要利用图层X轴向的缩放属性来控制轮胎的周长:circumference=width*( scale[0]/100)*Math.PI; 我们将图层的X轴缩放属性(scale[0])除以100是因为缩放属性的返回值是百分比,接下来我们就需要定义图层在X轴向移动的变量,在我们的例子中我们要使图层从X轴的零点开始移动,所以我们使用下面的表达式:
distance=position[0];
最后我们写出核心表达式:(distance/circumference)*360; 综合起来,我们需要给旋转属性赋予这样的表达式:
circumference=width*( scale[0]/100)*Math.PI; distance=position[0];
(distance/circumference)*360
这时再观看动画,会看到轮胎的移动与旋转已经非常的自然了,丝毫没有滑动的痕迹,还是那句话我们可以使用手动设置关键帧来实现同样的效果,但是如果图层作加速减速运动时,表达式的优势更是体现的淋漓尽致。
可以将这种方法应用到单独的文字动画中,也可以应用到非正常运动的物体中,得到真实的效果。
AE几何学概述
在表达式基础部分的讲解里,我们涉及到的大部分是一些代数的应用,在AE的表达式中只需要应用简单的代数学知识就可以实现很多效果,但是如果在书写表达式的时候融入几何学知识,那么表达式的高效便捷将体现的更加淋漓尽致。简单的说,几何学就是研究图形的空间关系的自然科学。在接下来的教程中我们将讲解一些基本的几何学公式和关系函数以及几何学在AE表达式中的应用。
这部分教程结构组织得非常严谨,当你完成这部分教程的学习时,你就能基本掌握几何学知识的实际应用,例如建立位移属性与角度属性之间的关系,进而生成和谐的运动状态。 矢量包含有自己的属性,矢量既有大小也有方向。每个数字阵列定义一个矢量,数字阵列就是矢量。
利用表达式制作一个淡入淡出效果,这是一个较常用且简单的效果,但每次都要设置透明度的四个关键帧动画,还要输入数值。如果多个镜头都要使用淡入淡出就会很麻烦,利用Sequence Layers功能也可以,但还是要点几下鼠标,所以不如做一个Presets方便。 首先,为了方便我们不使用关键帧来设置动画,因为这样做的话,每次还要调整关键帧3和4的位置,要知道关键帧记录的是时间轴的位置,而每次使用的素材长度是不同的。所以,我们使用表达式,让程序去找素材的出点。
第一步,我们利用一个linear(t, tMin, tMax, value1, value2)函数把时间轴上素材的出点转化为透明度变量。
为透明度添加表达式如下:
linear(time,outPoint-1,outPoint, 100, 0);//其中―linear‖表示线性变化,―time‖是时间,―outPoint‖是素材的出点,该表达式表示素材的透明度在素材出点前一秒到素材出点从100变化到0,这样就实现了素材的淡出效果。
同样道理,使用:
linear(time,inPoint,inPoint+1, 0, 100);//这一个表达式可以使素材实现淡入效果。 淡入淡出
if(time<1)>1)>
linear(time,inPoint,inPoint+1, 0, 100); else
linear(time,outPoint-1,outPoint, 100, 0);
if(time<1)>1)>
linear(time,inPoint,inPoint+1, 0, 100); else
linear(time,outPoint-1,outPoint, 100, 0);
范文五:ae表达式教程--滚铁环[指南]
AE表达式教程--滚铁环
1、新建一合成,参数如图所示:
2、新建合成大小的固态层,用钢笔工具画一条如下图所示的路径。
为该层添加描边特效,参数如图:
3、新建固态层,取名铁环,参数如图:
选择椭圆遮罩工具画一个正圆遮罩,在该层上添加描边特效,参数如图:
4、新建固态层,取名地板,参数如图所示:
为该层添加棋盘特效,参数设置如图所示:
5、为铁勾层添加效果--表达式控制--滑杆控制特效,滑块加关键帧,在0,2,3,5秒处,滑块值分别为100,310,150,500。 在铁勾层位置处加表达式,将橡皮筋拉到滑块上,表达式为:
因为是在水平方向作运动,Y轴数值没有改变,所以将Y位置的temp改成当前位置的Y值130。这时表达式为:
6、选中铁环层,调出位置和旋转属性,在位置处加表达式,将橡皮筋拉到铁勾的滑块上,同样把Y值改成当前层的Y轴数值144,表达式为:
这时效果如图:
我们发现铁环离铁勾有一段距离,所以要在表达式上修改一下,将X轴的数值减掉一个合适的数(我这里是35),成下图所示效果:
表达式为: 7、在铁环层旋转上添加表达式,表达式为:
distance=thisComp.layer("铁勾").position[0];
circumference=width*Math.PI;
(distance/circumference)*360
(这个表达式我不是很明白。)
=>=>