本节书摘来自异步社区《Adobe After Effects CS6完全剖析》一书中的第2章,定时与重定时,作者 【美】Mark Christiansen(马克·克里斯琴森),译者 苗玉敏,郭圣路,曹玉臣,更多章节内容可以访问云栖社区“异步社区”公众号查看。
定时与重定时
在处理时间方面,After Effects比大多数视频应用程序更灵活。可以使用多种方法重新设置素材的时间,或者混合以及匹配速度和时间属性。
绝对(非相对)时间
After Effects是用绝对的秒数而不是帧数来度量时间的,帧的时间设置和数量是相对于每秒的帧数的。如果使用帧数而不是秒数来度量时间,那么改变帧速率将引发更大的问题。
更改合成的帧速率,并且关键帧维持它们在实际时间中的位置,使得动画的时间设置不会改变(如图2.18所示),则只有关键帧的位置才是相对于帧数的。下面是三行短句:
同样,对于帧速率不匹配的素材(或者嵌套的合成),每秒钟至少要同步一次,但是干预的源帧可能插入在合成帧之间。就像音乐家弹奏3/4拍,After Effects中的1秒就像每个韵律的强拍。
时间拉伸
Time Stretch(时间拉伸)可改变源片段的持续时间(及其速度),但它不能让你对重新设置时间本身制作动画[为此,将需要Time Remap(时间重置)或Timewarp(时间扭曲)]。Timeline面板左下角的3个图标中的第三个可以呈现In/Out/Duration/Stretch(入/出/持续时间/拉伸)这些列。
我一般只需更改Stretch(拉伸)值,所以这所有4列的相关设置就足够了。我很少使用Time Stretch设置,因为其结果不过是得到整数倍数或者几分之几:300%、200%、50%或25%。如果使用Time Stretch对话框(右击并从上下文菜单中选择Time > Time Stretch命令),就完全不需要这些列了。可以按下Ctrl+Alt+R(Cmd+Opt+R)组合键或者选择Layer > Time > Time-Reverse Layer(时间反转层)命令,把Stretch值设置为–100%。层的外观将发生变化,提醒你它被反转了(如图2.19所示)。
选择Layer > Time > Freeze Frame(冻结帧)命令,将在当前时间使用单个Hold关键帧应用Time Remap效果。
帧混合
假设选择的Stretch值不是平均放大或缩小100%的倍数,那么在使用它重新设置源片段的时间时,将可能使之被胡乱拉伸。为层和合成启用Frame Blend(帧混合)选项,After Effects将会把相邻的帧平均混合一下,然后在源帧之间的那些帧上创建出新的影像。在把素材添加到具有不匹配帧速率的合成中时,这同样适用。下面介绍了两种模式:
- Frame Mix(帧融合)模式可以叠加邻近的帧,实质上是把它们模糊在一起。
- Pixel Motion(像素运动)模式使用光流技术跟踪实际的像素从一个帧到另一个帧的运动,并且创建一些新的帧,它们类似于邻近帧的变体。
注意:
本书配套光盘中的02_frame_blend文件夹和项目包含相关的示例合成。
令人困惑的是,这两种模式的图标分别与Draft(草稿)和Best(最佳)层质量的图标相同(如图2.20所示),不过有时需要先进行帧融合,而不是直接进行渲染。像素运动可能通常显得过于模糊、过于扭曲,或者包含太多显而易见的人为处理帧的痕迹,在这种情况下,可以返回到Frame Mix模式,或者更进一步使用Timewarp特效,它们使用相同的技术,但是后者可以进行更大的控制(将在本章后面介绍)。
嵌套的合成
Time Stretch(或Time Remap)将主合成的帧速率应用于嵌套的合成,动画不是帧混合的,作为替代,要把关键帧插值重设为这个新的帧速率。如果把具有较低帧速率的合成置于主合成中,则倾向于保留嵌入的合成的帧速率。在这种情况下,打开嵌套的合成的Composition Settings > Advanced面板,并选中Preserve Frame Rate When Nested or in Render Queue(当嵌套或者在渲染队列中时保留帧速率)选项(如图2.21所示)。这将强制After Effects在底层合成中只使用整体的帧增量,就像使用那个帧速率预先渲染了合成一样。
注意:
Pixel Motion模式与Timewarp特效中的光流技术已得到Foundry公司的许可。在用于Shake、Flame和Nuke的Furnace插件中也使用了相同的底层技术。
注意:
要将Time Remap关键帧转换为Timewarp中的Source Frame(源帧)模式,可以启用Source Frame的表达式(参见第10章),并输入以下代码:
d = thisComp.
frameDuration
`timeRemap * 1/d
时间重映射
Time Remap绝对要比Time Stretch更有用。其原理非常简单:给定的时间点具有一个值,就像其他任何属性一样,因此可以为它设定关键帧,包括各种情况乃至循环,可以像其他任何动画数据一样操作它。
注意:
使用Effect > Time > Posterize Time命令可以迫使任何层采用特定的帧速率,但是在Time类别中的特效应该在给定层应用其他特效之前应用。通常,Posterize Time特效会破坏之前应用的特效。
可以按下Ctrl+Alt+T(Cmd+Opt+T)组合键或者选择Layer > Time > Enable Time Remapping(启用时间重置)命令设置2个Time Remap关键帧:在开始处以及在超越层末尾的一个帧上。时间重置层理论上具有无限的持续时间,因此最终的Time Remap帧实际上变成了一个Hold关键帧,因而可以随意地缩放层的长度,而不受最后一个帧的限制。
注意,在把Time Remap应用于其第一个帧或最后一个帧超过了合成的持续时间的层时,可能有你看不到的关键帧。在这种情况下,我倾向于在合成的起点和终点添加关键帧,单击Time Remap选取所有的关键帧,然后按住Shift键取消选取我可以在Timeline面板中看见的关键帧,并且清除我看不到的那些关键帧。
最后一个Time Remap关键帧比层的总体时间设置(在大多数情况下是一个不存在的帧)更重要,用以保证到达最终的源帧,甚至在帧速率不匹配时也可如此。要获取最后一个可见的帧,通常必须在倒数第二个帧上添加关键帧。
在After Effects中还有一个Freeze Frame选项,可以右击层并从上下文菜单中或者从Layer菜单中选择Time > Freeze Frame命令,它可以使用单个Hold关键帧设置Time Remap(如果还没有设置它的话)。
时间扭曲
Foundry公司先进的重新设置时间工具(称为Kronos)提供了Pixel Motion(像素运动)和Timewarp(时间扭曲)中使用的技术。Pixel Motion是前面描述过的一种自动化设置,Timewarp则通过添加一组允许调整结果的特效控制而增强了它。Timewarp使用光流技术跟踪素材中的任何运动。独特的、自动的运动矢量描述了每个像素是怎样从一个帧移到另一个帧的。借助这种精确的分析,就有可能生成由那些相同的像素构成的影像,它们是与那些具有不同时间设置的矢量一起插入的。结果就是好像出现在原始帧之间的新帧。当它工作时,必须让人看起来信服。
注意:
Foundry公司的Kronos工具现在是作为独立的插件提供的,它以及其他一些特性使得GPU获得了超过Timewarp的性能。在本书配套光盘中可以找到它的演示版。
Time Remap与Timewarp之间有什么区别呢?前者只需要很少的计算能力,后者则要复杂和苛刻得多。可以试着处理本书配套光盘中的keyed_timewarp_source序列(在02_timewarp文件夹中),或者打开其中已经完成的关联的示例项目。图2.22显示了Frame Mix与Pixel Motion之间的基本区别。
因此可以在Timeline面板中将Frame Blend选项(如图2.20所示)切换为带有Time Stretch或Time Remapping的Pixel Motion选项,使用相同的Pixel Motion方法,获得与Timewarp相同的光流解决方案。它们之间有什么区别呢?
- 所有的方法都可用于加快或减慢素材的速率,但是只有Time Remapping和Timewarp可以使用关键帧动态地创建时间属性的动画。
- 所有的方法都可以访问全部3种Frame Blending模式(Whole Frames(全部帧)、Frame Mix和Pixel Motion)。
- Time Remapping关键帧甚至可以直接转换到Timewarp,但是它需要一个表达式,因为Timewarp使用帧而Time Remapping则使用秒来计算时间。
Timewarp具有以下几方面的优点,因此在使用它时值得付出额外的努力:
- 它可以应用于合成,而不仅仅是素材。
- 它包括使用Enable Motion Blur切换开关添加运动模糊的选项。
- Tuning(调节)区域允许美化Pixel Motion的自动生成的结果。
要将Timewarp应用于素材,可以启用Time Remapping,并且在减慢素材的速度时扩展层的长度,否则将用光帧。使Time Remapping的关键帧保持在默认位置,Timewarp将会覆盖它。
注意:
Roto Brush(动态蒙版笔刷,参见第7章)是为Timewarp创建前景蒙版层的非常有效的工具。在前景和背景以不同的方式移动的地方,这有助于消除或减少运动错误。
示例素材已经预先进行了键控,当前景中的任何人(或物)独立于背景移动时,它提供了最佳的结果。在gs_timewarp_source素材中进行交换,你将看到一些错误。在下面添加keyed_timewarp_source层作为参考,在Timewarp中把它设置为Matte Layer(蒙版层),并且错误应该会再次消失,其额外的好处是可以处理完全非键控的素材。
可以进一步调整参考层,并且预合成它(例如,增强对比度和亮度从而给Timewarp提供一个更清晰的源),应用这个预合成的层作为Warp Layer(缩放层),它会分析所做的调整,但是将把结果应用于未触及的源。
在Tuning区域中设置渲染时间和精确度,但是不要以为更高的精确度总是会产生更好的结果。这些工具使用了LME(Local Motion Estimation,本地运动预测)技术,如果你想深入了解相关的详细信息,请参阅Furnace用户手册。
现在试验一个镜头,它需要更多的调节并且会显示Pixel Motion的更多缺点,以及Timewarp可以怎样解决它们。本书配套光盘中的02_rotoSetup_sk8rboi文件夹中的素材具有多个运动平面:小货车的车轮、货车本身、溜冰者,并且溜冰者在那种气候条件下进行360°的翻转,木板完全缺少从一个帧到下一个帧的连续性,这种典型情况将破坏当前可用的任何类型的光流(如图2.23所示)。
下面列出了几种调整方法,可以在这个素材或者你自己的素材上试验它们:
- 虽然提高矢量细节(Vector Detail)似乎可以提高精确度,但是在这个片段中很难找到它可以提供帮助的地方。较大的数字(100)不仅会显著增加渲染时间,而且在某些情况下会增加快速运动中的人为错误。这是由于它分析了太多的细节,而没有足够的区域用来平均地存放它们。
- 平滑度与矢量细节直接相关。Foundry公司声明已被平衡处理过的默认值对于大多数序列来说都是最好的选择。可以提高Global Smoothness(全局平滑度,针对所有矢量)、Local Smoothness(局部平滑度,针对单个矢量)和Smoothing Iterations(平滑重复),以便处理细节噪声,但是同样,在这种情况下它只会改变人为错误,而不是解决它。
- 溜冰板自身在滑动期间,溜冰板的360°翻转难以处理,因为它从一个帧到下一个帧的变化太大。Build From One Image(从一幅影像构建)选项在这样的情况下相当有帮助,而不用尝试混合两组不匹配的像素,Timewarp更容易处理其中一组像素。其缺点是在过渡点会发生突然的变化——像素不流动。
- 在这个片段中,无须启用Correct Luminance Changes(正确的亮度变化)选项——它用于亮度中突然的(影像闪烁)或逐渐的(移动高亮)变化。
注意:
Twixtor(RE:Vision Effects)是Timewarp的第三方替代工具,它不一定更好,但是一些(不是全部)艺术家确实更喜欢它。在本书配套光盘中可以找到它的演示版。
- Error Threshold(错误阈值)在使用矢量之前对其进行评估,提高该值会查出更多错误,也就会有更多的矢量被删除。
- Block Size(分区大小)确定每个矢量跟踪的区域的宽度和高度,与平滑一样,较低的值将会产生更多的噪声,较高的值则会减少细节。Foundry公司的文档指示该值应该“几乎不需要编辑”。
- Weighting(权重)允许控制可以在多大程度上分解给定的色彩通道。在第5章中将学到,默认值对应于肉眼如何感知颜色,以产生单色影像。如果一个通道噪声过大(通常是蓝色通道),就可以降低它的设置。
-
Filtering(过滤)可用于渲染,而不用于分析,它可以提高结果的锐化程度。它将增加渲染时间,因此,如果确实要启用它,就要先完成其他的更改,并且准备好进行渲染。
回顾“运动模糊”一节的内容,是不是还记得Timewarp可用于生成过程式运动模糊,且无须重新设置素材的时间(如图2.24所示)?
总体来说,对于像sk8rboi这样的片段,为了改进结果而可以做的最重大的事情是使用Roto Brush(参见第7章),以便分隔出每个移动的元素——货车、溜冰者和背景。