AE有三层空间。
图层空间:二维数组,是图层左上角相对于锚点的位置。
合成空间:二维数组,是层的位置,对于3D图层,与活动摄影机有关。
世界空间:三位数组,对于3D图层,独立于摄影机。
来通过一个小案例理解。
新建工程,打开字幕指示框(主要为了找和层的中心点),选择椭圆工具,按住shift + command(ctrl)+左键从合成中心点开始拖拽,得到一个圆作为“恒星”。
接着我们来制作一个围绕这个“恒星”旋转的“行星”。同样方式绘制一个小一点的圆,然后选中图层,将其命名为green,打开三维图层,按“a”键调出Aachor Point,给其x轴一个值,这个案例我们给500。按“r”打开orientation,给Y Rotation给一个表达式time*90 。“行星”开始围绕“恒星”以500像素的距离,4秒一圈的速度旋转。
这种方法我们发现一个问题,就是“行星”在公转的同时还有自转,那么怎样让这个“行星”始终朝向正面?如下图的蓝色小球一样。
绘制一个蓝色小球,打开三位图层,给Position添加表达式:
thisComp.layer("green").toWorld([0,0,0])
这个表达式是将刚刚的绿色“恒星”的世界空间位置输出出来,蓝色小球以这个位置轨迹运动,但是不跟着旋转。
我们继续绘制一个黑色小球作为“卫星”,让它围绕“行星”运动。
选中绘制好的黑色小球所在图层,按住shift利用拾取器,拾取蓝色小球所在图层,让其成为蓝色小球所在图层的子图层。黑色小球开始和蓝色小球同步运动。
按“a”键掉出Anchor Position,给y轴一个偏移量,这个案例我给的是135。按“r”键,给x Rotation添加表达式time*90,让黑色“卫星”以4秒一周的速度、135像素的距离围绕蓝色“行星”转动。
这里的黑色小球跟之前的绿色小球同样的问题,转动的同时自身也在旋转。我们还是希望这个“卫星”始终朝向正面。
绘制一个红色小球,打开三维图层,给Position添加表达式:
thisComp.layer("black").toWorld([0,0,0])
搞定。
我们再来介绍一个表达式toCamp(),这个表达式通常用来3D转2D。比如这个案例里,黑色“卫星”的运动是既围绕“恒星”公转又围绕蓝色“行星”转动的一个三维运动,我们能否将其转化为一个图层的二维运动?
新建一个黄色的小球,不打开三维图层,给position添加表达式:
thisComp.layer("black").toComp([0,0,0])
之后我们得到这样的效果:
这个小黄球并不会转到行星后面去,因为它是在一个平面上运动的。
这个场景里,转成二维其实没有意义,但在有一些场景里,比如有的ae特效只支持二维,而我们又希望其绑定跟随一个三维对象,这个时候,就希望将三维降成二维,这个时候,toCamp()就发挥作用了。
比如AE自带的CC Particle Systems II,它的位置就只支持二维:
通过给其position添加表达式:
thisComp.layer("black").toComp([0,0,0])
我们回到制作蓝色“行星”那一步,之前是利用了绿色小球的运动来驱动蓝色小球,如果我们一开始就直接来制作蓝色“行星”,而不是先绘制一个绿色小球,可以怎样操作?
首先我们新建一个null,不用移动位置,打开null的3D开关,给Y Rotation添加表达式time*90,这一步可以让null在y轴上4秒旋转一周。
之后绘制蓝色小球,打开3D开关,同样其锚点位置还是[960,540,0](工程为1920*1080)。给位置Position添加表达式:
thisComp.layer("null 1").toWorld([500,0,0])
前面未曾讲的是,toWorld()和toCmomp()括号内需要给出一个数组,其参数值为偏移量。这里给了[500,0,0],也就是在x轴有500的偏移,于是我们得到一个围绕空对象null,在距500像素的位置,以4秒一周的速度转动的蓝色小球。
而在另一些应用场景里,我们需要同步的时候,通常会在括号里输入引用层的锚点位置,以锚点位置的偏移来抵消运动,从而达到同步的目的。
来看个例子:
新绘制一个黑色小球,命名为“miniblack”,按住shift利用拾取器连接到“red”,于是得到一个跟随红色小球运动的黑色小球。按“a”键打开Anchor Point,给x轴一个数值,比如-240,让黑色小球与其锚点产生240像素的偏移,然后给黑色小球的Y Rotation和Z Rotation都添加表达式time*180,这样得到一个围绕其锚点旋转的黑色小球,而黑色小球的锚点又是和红色小球同步的,于是我们就有了一个不同自身锚点运动同步运动的黑色小球。
接着我们要试验给toComp()括号中添加不同的偏移量,为了便于观察轨迹,我们新建一个固态层solid,添加效果write-on,调整好画笔粗细等参数后,将Paint Style选择成为On Transparent,给画笔位置Brush Position添加表达式:
thisComp.layer("miniblack").toComp([0,0,0])
偏移量是零,所以返回的值是黑色小球miniblack层的位置,也就是下图中黑色虚线绘制出来的轨迹。
复制一层刚刚的solid,将画笔颜色修改为红色,其他参数适当修改,区别于之前的黑色虚线,将Brush Position的表达式修改为:
roc = thisComp.layer("miniblack"); roc.toComp(roc.transform.anchorPoint)
也就是以其锚点作为偏移量,抵消了层的位置与锚点位置之间的偏移,让其返回数值跟锚点的位置同步,于是其轨迹就成了黑色小球锚点位置的轨迹(上图中的红色线条)。
请登录以参与评论
现在登录