1. 为什么3D Stroke在After Effects里一直有人用
做后期这行十几年,我装过的AE插件少说也有大几十个,但真正留在常用工具栏里、每隔几周就会打开一次的,其实就那么几个。3D Stroke算一个。它不是什么新东西,Trapcode Suite里的老成员了,但每次接三维线条类的活儿,我第一个想到的还是它。原因很简单:AE原生形状图层做描边,在三维空间里旋转、弯曲、做透视变化的时候,控制起来特别别扭,而3D Stroke把这件事变得像在二维里画线一样顺手。
这个插件解决的核心问题就一个:让二维的路径在三维空间里拥有真实的体积感和运动轨迹。你可以用钢笔工具随手画一条曲线,套上3D Stroke,它立刻变成一根有粗细、有锥度、能发光、能沿Z轴旋转的立体线条。做科技感UI动效、粒子拖尾、文字路径动画、地图路线生长、光剑效果,甚至一些抽象的视觉背景,它都能扛。适合谁学?我的判断是:只要你在AE里做过描边动画,觉得原生方案不够用,或者想往三维合成方向走,这个插件就值得花两个小时认真摸一遍。新手也能上手,但想做出有质感的东西,得理解它那几个关键参数背后的逻辑。
我见过太多人把3D Stroke当成“画线工具”来用,结果做出来的东西像面条一样飘在画面里,没有重量感。问题不在插件,在于没搞懂它的三维坐标系和锥度控制。下面我按自己实际做项目的思路,把这个插件拆开讲一遍。
2. 插件核心机制与三维空间逻辑拆解
2.1 它到底在AE里做了什么
3D Stroke的本质,是把一条二维路径映射到三维空间中的一条曲线上,然后沿着这条曲线生成带有厚度和光照属性的几何体。注意,它生成的不是真正的多边形网格,而是一种“伪三维”的描边渲染。你在AE的合成里看到的线条,实际上是由插件在渲染时计算出来的带状几何,它有自己的法线方向、有锥度变化、有颜色渐变,但不会像C4D那样参与真正的光线追踪。
这个定位决定了它的优势和局限。优势是渲染快、参数直观、和AE的摄像机系统配合得很好;局限是它不能做复杂的遮挡关系,也不能像真三维模型那样被其他图层投射阴影。我个人的经验是:用它做视觉层面的三维线条,不要用它做物理层面的三维物体。想清楚这一点,后面调参数就不会跑偏。
2.2 路径、锥度、变换三者的关系
3D Stroke的参数面板看起来密密麻麻,但真正影响最终效果的,其实就三组东西:路径(Path)、锥度(Taper)、变换(Transform)。路径决定线条的走向,锥度决定线条从起点到终点的粗细变化,变换决定这条线在三维空间里的位置、旋转和缩放。
很多人调不好,是因为把这三者的顺序搞反了。正确的思路是:先在二维平面上把路径画到你满意,然后调锥度让线条有“生长感”,最后再用变换把它放到三维空间里。如果你先调变换再调锥度,会发现锥度的方向跟着变了,因为锥度是沿着路径本身计算的,而变换会改变路径在空间中的朝向。我踩过这个坑,做一条从画面左下角延伸到右上角的光线,先旋转了图层再调锥度,结果粗细变化的方向完全不对,返工了半小时。
2.3 和AE原生描边的本质区别
AE原生形状图层的描边,是在二维平面上沿着路径均匀地画一条线。它没有Z轴概念,也没有锥度控制(除非你用多个描边叠加模拟)。3D Stroke不一样的地方在于,它给路径上的每一个点都赋予了三维坐标,并且允许你沿着路径的切线方向做旋转。这意味着你可以做出一根“扭麻花”的线条,或者让线条在空间中螺旋前进。
举个实际例子:做科技感数据流的时候,我经常用3D Stroke画一条曲线,然后给它的Transform里的Rotate X和Rotate Y加上表达式,让线条自己慢慢旋转。原生描边做不到这个效果,因为它的路径是锁死在二维平面上的。这个区别看起来小,但在实际项目里,它决定了你能不能做出那种“线条在空间中游走”的视觉感受。
3. 关键参数逐项拆解与实操要点
3.1 Path面板:路径来源与偏移控制
Path面板里最重要的两个参数是Path和Offset。Path就是你要绑定的路径图层,通常是一个用钢笔工具画好的蒙版或者形状图层路径。Offset控制线条在路径上的起始位置,用百分比表示。这个参数是做“线条生长”动画的核心。
我通常的做法是:给Offset打两个关键帧,从0到100,然后配合Taper里的Start和End参数,让线条在生长过程中头部细、尾部粗,或者反过来。这里有个细节:Offset的数值变化是沿着路径长度均匀分布的,但如果你在路径上加了额外的控制点,分布会变得不均匀。所以画路径的时候,尽量用最少的控制点,保持路径的均匀性。
注意:Path绑定的路径图层如果被删除了,3D Stroke会直接失效,线条消失。做项目的时候,养成把路径图层锁定并隐藏的习惯,避免误删。
3.2 Taper面板:锥度曲线的秘密
Taper是3D Stroke最有价值的功能之一。它允许你分别控制线条起点和终点的粗细,并且可以调整锥度的曲线形状。Start Shape和End Shape两个参数,分别控制起点和终点附近的粗细变化速率。数值越大,变化越剧烈。
我实测下来,做“光线拖尾”效果的时候,Start Shape设成0,End Shape设成80左右,线条会从起点开始迅速变细,到终点几乎消失,看起来就像一颗流星划过。做“生长动画”的时候,反过来,Start Shape设成100,End Shape设成0,线条从无到有地长出来,头部圆润,尾部收尖。
这里有个很多人不知道的技巧:Taper的Start和End参数可以超过100%。你把它设成150,线条会在起点附近先变粗再变细,形成一个类似水滴的形状。这个效果做能量脉冲的时候特别好用。
3.3 Transform面板:三维空间里的定位
Transform面板里的参数和AE图层的变换属性很像,但它是作用在路径本身上的。Position Z控制线条在Z轴上的深度,Rotate X/Y/Z控制线条在三维空间中的旋转角度。这里的关键是:这些变换是相对于路径的局部坐标系,而不是合成的全局坐标系。
什么意思呢?如果你把Rotate X设成90度,线条会绕着它自己的X轴旋转,而不是绕着合成的X轴。这个区别在做复杂动画的时候特别重要。我通常的做法是:先用Position Z把线条推到想要的深度,然后用Rotate X/Y微调它的朝向,最后用Rotate Z控制线条在画面中的倾斜角度。
提示:如果你想让线条跟着AE的摄像机一起运动,记得把3D Stroke所在的图层打开三维开关,并且把Transform里的Position和摄像机的Position区分开。很多人在这里搞混,结果线条和摄像机各动各的,画面完全失控。
3.4 Repeater面板:复制线条的几种玩法
Repeater是3D Stroke里被低估的功能。它可以把同一条路径复制多份,每份之间可以有位移、旋转和缩放的变化。做“光纤束”或者“能量网格”的时候,这个功能能省掉大量手动复制图层的时间。
我常用的参数组合是:Instances设成5到8,X/Y/Z Displacement设成很小的值(比如2到5),然后给Rotate Z加一个递增的偏移。这样出来的效果是一束线条从同一个起点出发,在空间中散开,像一束光被棱镜分光一样。注意,Repeater的复制体是共享同一条路径的,所以如果你改了路径,所有复制体都会跟着变。这个特性在做动态路径动画的时候很方便,但如果你想让每个复制体有独立的路径,就得用多个3D Stroke图层。
3.5 颜色与混合模式:让线条融入画面
3D Stroke的颜色控制相对简单,但配合AE的混合模式能玩出很多花样。我通常把线条图层的混合模式设成Add(相加)或者Screen(屏幕),这样线条会自然地融入背景,产生发光的感觉。如果背景比较亮,用Overlay(叠加)或者Soft Light(柔光),线条会显得更柔和。
颜色方面,我建议用渐变而不是纯色。3D Stroke支持沿着路径做颜色渐变,你可以让线条从起点到终点颜色逐渐变化,这样视觉层次会丰富很多。做科技感画面的时候,我经常用青色到紫色的渐变,配合Add模式,出来的效果很干净。
4. 完整实操流程:从零做一条三维生长光线
4.1 准备工作与路径绘制
新建一个合成,尺寸1920x1080,帧率25,时长5秒。新建一个纯色图层作为背景,颜色深灰偏蓝。然后用钢笔工具在合成里画一条曲线,从画面左下角开始,向右上角延伸,中间带一点弧度。画的时候注意:控制点不要太多,3到5个就够了,曲线要平滑,不要有尖锐的拐角。
画完之后,把这个形状图层的眼睛关掉,它只作为路径来源,不需要显示。然后新建一个黑色纯色图层,命名为“3D Stroke”,给它添加3D Stroke效果。在效果控件的Path选项里,选择刚才画的形状图层作为路径来源。
4.2 锥度与偏移的关键帧设置
把时间指示器移到第0帧,给Offset打一个关键帧,数值设为0。移到第3秒,Offset设为100。这样线条会在3秒内从起点生长到终点。然后调整Taper参数:Start设为100,End设为0,Start Shape设为60,End Shape设为20。这样线条的起点粗、终点细,生长过程中头部圆润,尾部收尖。
这里有个细节:Offset从0到100的过程中,线条的粗细变化是沿着整条路径计算的。如果你想让线条在生长过程中始终保持头部细、尾部粗,需要给Taper的Start和End也打关键帧,让它们随着Offset的变化而调整。我通常的做法是:Start从100降到0,End从0升到100,这样线条在生长过程中,粗细分布会动态变化,看起来更有生命力。
4.3 三维变换与摄像机配合
打开3D Stroke图层的三维开关。在Transform面板里,把Position Z设为-200,让线条稍微往画面深处退一点。然后给Rotate Z打一个关键帧,从-10度到10度,让线条在生长过程中微微倾斜。最后新建一个摄像机图层,焦距设成50mm,给摄像机的Position Z打一个关键帧,从-800到-600,让镜头缓慢推进。
注意:摄像机的推进速度要和线条的生长速度匹配。如果镜头推得太快,线条还没长完就出画了;推得太慢,画面会显得拖沓。我一般会让镜头推进的时长比线条生长多出0.5秒,留一点余量。
4.4 颜色渐变与发光处理
在3D Stroke的颜色设置里,启用渐变。起点颜色设为青色(R:0, G:200, B:255),终点颜色设为紫色(R:150, G:0, B:255)。然后把图层的混合模式设成Add。如果觉得发光不够,可以给图层添加一个Glow效果,阈值设成50%,半径设成30,强度设成1.2。这样线条会有一层柔和的光晕,看起来更立体。
我实测下来,Glow的半径不要超过50,否则线条会糊成一团,失去锐利感。如果你想要更干净的光效,可以用Deep Glow或者Optical Glow这类第三方插件,但原生Glow调好了也够用。
4.5 最终渲染与输出设置
渲染的时候,我建议用QuickTime + PNG编码,或者直接输出PNG序列。这样画质损失最小,后期如果需要调整颜色或者合成,也有足够的空间。输出之前,记得把合成的背景色设成透明,这样线条可以单独导出,方便在其他项目里复用。
如果你要输出带背景的版本,把背景图层打开,渲染成H.264的MP4就行。码率我一般设成15到20 Mbps,1080p的线条动画,这个码率足够清晰了。
5. 常见问题与排查技巧实录
5.1 线条不显示或显示异常
这是新手最常遇到的问题。排查顺序是这样的:先检查Path是否绑定正确,如果Path为空,线条不会显示。再检查Offset是否在0到100之间,如果Offset是负数或者超过100,线条可能跑到路径外面去了。最后检查图层的三维开关是否打开,如果没打开,Transform里的Z轴参数不会生效,线条会看起来扁扁的。
还有一种情况:线条显示了,但是断断续续的。这通常是因为路径上有重复的控制点,或者路径本身有自交。解决办法是用钢笔工具把路径重新整理一遍,删掉多余的控制点,确保路径是连续的、不自交的。
5.2 锥度方向不对或粗细变化不自然
锥度方向不对,多半是因为路径的起点和终点搞反了。AE里路径的起点是第一个控制点,终点是最后一个控制点。如果你画路径的时候是从右往左画的,锥度方向就会反过来。解决办法是在Path面板里勾选Reverse Path,或者重新画路径,从你想要的起点开始画。
粗细变化不自然,通常是Start Shape和End Shape的数值太极端了。我建议先把这两个值都设成50,看看基础效果,然后再慢慢调整。另外,Taper的Start和End参数不要同时设成0或者100,那样线条会变成一头尖一头粗的锥形,看起来很生硬。
5.3 渲染速度慢或预览卡顿
3D Stroke在预览的时候,如果路径控制点太多,或者Repeater的Instances设得太高,会明显拖慢AE的响应速度。我的经验是:路径控制点控制在10个以内,Repeater的Instances不要超过20。如果还是卡,把合成的分辨率降到一半,预览流畅了再调回全分辨率渲染。
另外,关闭不必要的图层和效果也能提升预览速度。比如背景图层在调线条的时候可以暂时隐藏,Glow效果可以等线条调好了再加。我通常会把3D Stroke图层的质量开关设成Draft(草图),这样预览的时候只显示线条的基本形态,不计算渐变和发光,速度会快很多。
5.4 线条和摄像机运动不匹配
这个问题通常是因为3D Stroke图层的Transform参数和摄像机的Position参数没有协调好。我的建议是:先调摄像机的运动,再调线条的Transform。因为摄像机的运动会改变整个画面的透视关系,如果先调线条再调摄像机,线条的位置和角度可能会跑偏。
还有一个技巧:把3D Stroke图层的Parent绑定到一个空对象上,然后给空对象打关键帧,控制线条的整体运动。这样摄像机和线条的运动可以分开控制,调整起来更灵活。
5.5 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 线条完全不显示 | Path未绑定或Offset超出范围 | 检查Path绑定,Offset设为0-100 |
| 线条断断续续 | 路径有重复控制点或自交 | 重新整理路径,删除多余控制点 |
| 锥度方向反了 | 路径起点终点画反 | 勾选Reverse Path或重画路径 |
| 粗细变化生硬 | Start/End Shape数值太极端 | 先设成50再微调 |
| 预览卡顿 | 控制点太多或Repeater实例过多 | 减少控制点,Instances不超过20 |
| 线条和摄像机不匹配 | Transform和摄像机参数冲突 | 先调摄像机,再用空对象控制线条 |
6. 进阶技巧与个人经验分享
6.1 用表达式让线条自动跟随路径变化
如果你做的项目里,路径本身是动态变化的(比如文字路径动画),可以用表达式让3D Stroke的Offset自动跟随路径的长度变化。具体做法是:给Offset添加表达式thisComp.layer("路径图层").maskPath.points().length * 2,这样Offset会根据路径控制点的数量自动调整。这个技巧在做动态文字描边的时候特别有用,省去了手动打关键帧的麻烦。
6.2 结合Particular做粒子拖尾
3D Stroke和Trapcode Particular是绝配。我经常用3D Stroke画一条曲线,然后让Particular的粒子沿着这条曲线发射,形成粒子拖尾的效果。具体做法是:把3D Stroke的路径图层作为Particular的发射器路径,粒子的发射速度设成0,生命周期设成2秒,这样粒子会沿着路径慢慢飘散,看起来像一条发光的尾巴。
提示:Particular的发射器路径和3D Stroke的路径可以共用同一个形状图层,这样调整路径的时候,线条和粒子会同步变化,效率很高。
6.3 做地图路线生长动画的实战心得
地图路线生长是3D Stroke最常见的应用场景之一。我的做法是:先用钢笔工具沿着地图上的道路画一条路径,然后给3D Stroke的Offset打关键帧,让线条从起点生长到终点。为了让线条看起来像在地图表面流动,我会把3D Stroke图层的混合模式设成Add,颜色用亮蓝色,然后给线条加一个轻微的Glow。
这里有个细节:地图路线的路径通常比较长,控制点比较多。如果直接绑定到3D Stroke,线条可能会在某些拐角处出现尖锐的折角。解决办法是在Path面板里把Smooth参数调高一点,让线条在拐角处自动圆滑过渡。我一般设成20到30,效果比较自然。
6.4 避免线条“飘”在画面上的三个技巧
很多人做出来的3D Stroke线条,看起来像飘在画面上的面条,没有重量感。我总结了三个技巧来解决这个问题:
第一,给线条加阴影。虽然3D Stroke不能投射阴影,但你可以复制一层线条,往下偏移几个像素,颜色设成黑色,透明度设成30%,模拟阴影效果。第二,控制线条的粗细变化。线条的粗细不要从头到尾都一样,要有明显的锥度变化,这样才有立体感。第三,配合景深。给摄像机开启景深,让远处的线条模糊,近处的线条清晰,这样线条就会自然地融入三维空间。
6.5 个人常用的参数预设
做了这么多项目,我积累了几套常用的参数预设,直接套用能省不少时间:
光线拖尾预设:Offset从0到100,Taper Start=0,End=80,Start Shape=0,End Shape=60,颜色青色到紫色渐变,混合模式Add,加Glow半径30。
能量脉冲预设:Offset从0到100再回到0,Taper Start=150,End=0,Start Shape=100,End Shape=50,颜色白色到蓝色渐变,混合模式Add,加Glow半径50。
地图路线预设:Offset从0到100,Taper Start=100,End=100,Start Shape=20,End Shape=20,颜色亮蓝色,混合模式Add,加Glow半径20,Smooth=25。
这些预设不是固定的,你可以根据具体项目微调。我通常会把调好的参数保存成动画预设,下次直接拖到图层上,改一下路径和颜色就能用。
6.6 和其他描边插件的对比选择
市面上做描边的插件不止3D Stroke一个,还有Videocopilot的Saber、Red Giant的Stroke等。Saber的优势是自带发光和预设,做光剑效果特别快,但它的三维控制不如3D Stroke灵活。Stroke的优势是渲染速度快,适合做大量线条的场景,但锥度控制比较弱。
我的选择逻辑是:需要三维空间控制和锥度变化的时候用3D Stroke,需要快速出光效的时候用Saber,需要大量线条渲染的时候用Stroke。三个插件各有侧重,不存在谁替代谁的问题。实际项目里,我经常把3D Stroke和Saber结合使用,用3D Stroke做主体线条,用Saber做光晕层,效果比单独用任何一个都好。
7. 关于这个插件,我最后想说的
3D Stroke这个插件,我用了快八年了。它不是什么新潮的东西,Trapcode Suite的更新频率也不高,但每次打开AE做线条类的效果,我还是会习惯性地把它拖到图层上。原因很简单:它把三维线条的控制逻辑做得足够直观,同时又保留了足够的深度让你去挖掘。你可以花十分钟做一个能看的生长动画,也可以花两个小时调出一条有呼吸感的光线。
我见过很多新手,装了一堆插件,每个都只摸了个皮毛,最后做东西的时候还是用原生工具硬扛。我的建议是:插件不在多,在于你能不能把它用透。3D Stroke的参数就那么多,但每个参数背后的逻辑,值得你花时间一个一个试过去。比如Taper的Start Shape,你把它从0调到100,再从100调到200,看看线条的变化,你就知道这个参数在什么场景下该用什么值了。
最后分享一个小习惯:我每次做完一个3D Stroke的项目,都会把参数截图保存下来,标注上项目名称和效果描述。时间长了,就形成了一套自己的参数库。下次遇到类似的效果,直接翻出来参考,效率能提升好几倍。这个习惯看起来笨,但确实管用。