我想实现的目标:
使用ONE EXPRESSION LAYER控制AE时间轴(非常类似于使用Actionscript )来触发常用的组合,例如闪烁,行走,飞行等...用于卡通动画。
我想动画一个卡通人物的眨眼。 (和其他动作,如下所述)我不是每次想要眨眼或特定动作时“重新发布”组合或关键帧动作,而是想创建一个脚本,我可以触发Blink组合播放。这可能吗? (旁注:整部电影随机闪烁会很好)但我仍然想知道如何做到这一点,原因如下。
理想情况:我想在主要内容中创建一个“表达式图层”到 TRIGGER 其他比赛发挥。在某些时候,我想添加触发器来调用经常使用的包含诸如闪烁,行走,飞行,左右看等动作的组合......
它会让人感到惊讶某种程度上我们可以触发其他组合开始,重复,停止,或许可以反转,并使用表达层从 一个主要组件中完成所有操作< / EM> 即可。
为什么这样做? 为什么不在每次想要这样的动作时将一个comp粘贴到你希望它发挥的位置?如果你想要一个“眨眼组合”在两分钟内播放40次,那么你需要创建40个图层,或者在那个组合上关键帧40次。当你想要从一个表达层中获取它时,从一个层触发或调用它不是很棒吗?
我们一直在使用Actionscript在Flash中执行类似的操作。如果有一种方法可以实现这种效果,那将是非常棒的。这将是一个出色的教程,我相信如果有人这样做会非常受欢迎。它可以用于惊人效果的MULTITUDE,可以为每个人节省大量时间。哎呀,帮我解决这个问题,也许我会做一个教程。
谢谢你们“堆满了堆积者”的贡献! :)
答案 0 :(得分:0)
我找到了答案,那就是......
这不可能。
After Effects表达式无法控制其他时间轴。不幸的是,您必须在要影响的每个图层上放置一个表达式。
下一个最佳解决方案,并且可以在此链接上找到接近我要求的内容:motionscript.com/design-guide/marker-sync.html
我们只能希望Adobe有朝一日能够像使用动作脚本一样赋予表达能力。
非常希望!任何读过这篇为Adobe工作的人都请认真考虑。谢谢
答案 1 :(得分:0)
我相信你可能会发现本教程很有用
http://youtube.com/watch?v=Ojv3XJBrXhs
他制作了闪烁,张开嘴等动画。预先制作它们,通过滑块控制来控制时间,然后通过滑块控制来控制该预制的时间,可以在任何图层上通过简单的alt-click timeremap秒表和pickwhip到滑块表达式(并将其分开,因为滑块上的1代表precomp中100%的1秒,你通常希望以较小的比例制作动画。)
我经常使用它。它非常适合嘴唇同步动画。您只需使用滑块即可完成嘴巴的所有位置,并在它们之间进行动画制作。使它看起来很光滑。
(查看他的其他木偶角色装配教程......那里有很多有用的东西)
答案 2 :(得分:0)
第 1 部分:参考合成前的其他图层
<块引用>只需将“thisComp”替换为“comp("ComName")”
要在合成之间引用效果控制器,请遵循以下公式:
comp("ComName").layer("LayerWithExpression").effect("EffectControlerName")("EffectControllerType")
更深入的答案: Adobe's Docs - Skip to the Layer Sub-objects part
<块引用>据我了解 Adobe 文档,只能访问图层, 不是录像。这意味着您将需要创建您的 使用 pre-Comp 的表达式链接。视频无法访问这个所以 这也意味着没有空值、调整图层等。
作为一个额外的好处,如果您使用基本图形面板,您可以将所有控制器放在一个预合成中,但无论您在哪个合成中都可以使用控件。只需在基本图形下拉列表中选择它.
第 2 部分:基于预合成中的其他层的开始/结束:
关于下一部分您希望基于其他组合激活表达式的部分,我建议使用 in-out Point 表达式。
<块引用>inPoint |返回类型:数字。以秒为单位返回图层的入点。 出点|返回类型:数字。返回图层的出点,以秒为单位。
如果您使用开始时间覆盖,您可以从以下位置提取:
<块引用>开始时间 |返回类型:数字。返回图层的开始时间,单位为秒。
替代选项: 我建议避免这种情况,因为关键帧基本上是作为索引引用的,因此如果您在已经使用的关键帧之前添加一个,事情可能会变得一团糟 - def 包含一些错误处理。
参考关键属性和方法(表达式参考)Here
第 3 部分:插值和时间反转 您可以在右键单击-> 时间中对图层进行时间反转,否则这就是所有插值表达式,例如循环输出等 - 如果您不仅正确剪切它,而且还启用时间重新映射,则可以使用 loopOut("FOO") 预压缩。
然后用它来循环那些关键帧;
try{ timeStart = thisProperty.key(1).time; duration = thisProperty.key(thisProperty.numKeys).time-timeStart; pingPong =
false; //change to true value if you want to loop animationn back &
forth quant=Math.floor((time-timeStart)/duration);
if(quant<0) quant = 0
if(quant%2 == 1 && pingPong == true){
t = 2*timeStart+ (quant+1)*duration - time;
}
else{
t = time-quant*duration;
}
}
catch(err){
t = time;
}
thisProperty.valueAtTime(t)