bobodes wrote:Thanks for your solution, Frank. It's working, but unfortunately it's a bit slow for editing on my machine.
I hoped there would be a more direct way with e.g. Paint Tool, just animating Write On.
@xunile: Did I miss something, how can I animate this along a path?
I thought you were asking if it was possible to do a tapered stroke like in the video, not also animating it.
Here is a way to animate it along a path and have it auto orient as well. This is just the basic animation, you can use various warp tools to have it warp around the turns.
- Code: Select all
{
Tools = ordered() {
Background1_1 = Background {
Inputs = {
GlobalOut = Input { Value = 300, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftRed = Input { Value = 1, },
TopLeftGreen = Input { Value = 1, },
TopLeftBlue = Input { Value = 1, },
},
ViewInfo = OperatorInfo { Pos = { 863, 79 } },
},
Merge1 = Merge {
Inputs = {
Background = Input {
SourceOp = "Background1_1",
Source = "Output",
},
Foreground = Input {
SourceOp = "Transform1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 863, 180 } },
},
Transform1 = Transform {
CtrlWZoom = false,
Inputs = {
FlipHoriz = Input { Value = 1, },
Center = Input {
SourceOp = "Path1",
Source = "Position",
},
Angle = Input {
SourceOp = "Path1",
Source = "Heading",
},
Input = Input {
SourceOp = "Paint1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 613, 178 } },
},
Path1 = PolyPath {
DrawMode = "InsertAndModify",
CtrlWZoom = false,
Inputs = {
Displacement = Input {
SourceOp = "Path1Displacement",
Source = "Value",
},
PolyLine = Input {
Value = Polyline {
Points = {
{ Linear = true, LockY = true, X = 0.384969325153374, Y = -0.405994550408719, RX = -0.339468302658486, RY = 0.119891008174387 },
{ LockY = true, X = 0.0613496932515337, Y = 0.288828337874659, LX = 0.190649885588232, LY = -0.25386403136904, RX = -0.203721249149077, RY = 0.0124443919438363 },
{ LockY = true, X = -0.412576687116564, Y = -0.359673024523161, LX = 0.16376180032326, LY = 0.246630929951166, RX = -0.0830081361825607, RY = -0.101567744737985 },
{ LockY = true, X = -0.730619500572222, Y = -0.533586068001422, LX = 0.106014271151886, LY = 0.0579710144927536 }
}
},
},
},
},
Path1Displacement = BezierSpline {
SplineColor = { Red = 255, Green = 0, Blue = 255 },
NameSet = true,
KeyFrames = {
[0] = { 0, RH = { 10, 0.134516535713417 }, Flags = { Linear = true, LockedY = true } },
[30] = { 0.403549607140251, LH = { 20, 0.269033071426834 }, RH = { 40.3333333333333, 0.541668942029548 }, Flags = { Linear = true, LockedY = true } },
[61] = { 0.817907611808141, LH = { 50.6666666666667, 0.679788276918845 }, RH = { 75.6666666666667, 0.878605074538761 }, Flags = { Linear = true, LockedY = true } },
[105] = { 1, LH = { 90.3333333333333, 0.93930253726938 }, Flags = { Linear = true, LockedY = true } }
}
},
Paint1 = Paint {
Inputs = {
Input = Input {
SourceOp = "Background1",
Source = "Output",
},
Paint = Input {
SourceOp = "PolylineStroke1",
Source = "Out",
},
EffectMask = Input {
SourceOp = "Polygon1",
Source = "Mask",
}
},
ViewInfo = OperatorInfo { Pos = { 318, 178 } },
},
PolylineStroke1 = PolylineStroke {
Points = {
},
IsThreaded = false,
Brushes = { "SoftBrush" },
ApplyModes = { "PaintApplyColor" },
CtrlWZoom = false,
Inputs = {
BrushControls = Input { Value = 1, },
["SoftBrush.Size"] = Input { Value = 0.057, },
["SoftBrush.Softness"] = Input { Value = 0.001, },
["PaintApplyColor.Red"] = Input { Value = 0, },
["PaintApplyColor.Green"] = Input { Value = 0, },
["PaintApplyColor.Blue"] = Input { Value = 0, },
StrokeControls = Input { Value = 1, },
Spacing = Input { Value = 0, },
Polyline = Input {
Value = Polyline {
Points = {
{ Linear = true, X = -0.245398770080754, Y = -0.00681198908178504, RX = 0.172801633767311, RY = -1.17155452006301e-010 },
{ Linear = true, X = 0.27300613122118, Y = -0.0068119894332514, LX = -0.172801633767311, LY = 1.17155452006301e-010 }
}
},
},
},
},
Polygon1 = PolylineMask {
DrawMode = "ModifyOnly",
DrawMode2 = "InsertAndModify",
Inputs = {
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Polyline = Input {
SourceOp = "Polygon1Polyline",
Source = "Value",
},
Polyline2 = Input {
Value = Polyline {
},
Disabled = true,
},
},
ViewInfo = OperatorInfo { Pos = { 313, 87 } },
},
Polygon1Polyline = BezierSpline {
SplineColor = { Red = 173, Green = 255, Blue = 47 },
NameSet = true,
KeyFrames = {
[73] = { 0, Flags = { Linear = true, LockedY = true }, Value = Polyline {
Closed = true,
Points = {
{ Linear = true, X = -0.0272933736534938, Y = 0.0395206554051565, LX = 0.0712143580118815, LY = -0.0136975695689519, RX = -0.00970393419265747, RY = -0.0150377005338669 },
{ X = -0.0277638629170284, Y = -0.0449461484137846, LX = -0.0205024480819702, LY = 0.0349997282028198, RX = 0.071371187766393, RY = 0.0144580317040284 },
{ Linear = true, X = 0.186349700382151, Y = -0.0015720533016993, LX = -0.071371187766393, LY = -0.0144580317040284, RX = -0.0712143580118815, RY = 0.0136975695689519 }
}
} }
}
},
Background1 = Background {
Inputs = {
GlobalOut = Input { Value = 300, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftAlpha = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 160, 179 } },
}
}
}
Here is another one using ellipses and a duplicate node. It requires some fine tuning but it covers the general concept.
- Code: Select all
{
Tools = ordered() {
Transform1 = Transform {
Inputs = {
FlipHoriz = Input { Value = 1, },
Center = Input {
SourceOp = "Path1",
Source = "Position",
},
Angle = Input {
SourceOp = "Path1",
Source = "Heading",
},
Input = Input {
SourceOp = "Duplicate1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 453, 206 } },
},
Path1 = PolyPath {
DrawMode = "InsertAndModify",
Inputs = {
Displacement = Input {
SourceOp = "Path1Displacement",
Source = "Value",
},
PolyLine = Input {
Value = Polyline {
Points = {
{ Linear = true, LockY = true, X = -0.605504587155963, Y = 0.331521739130435, RX = 0.207951070336391, RY = -0.221014492753623 },
{ LockY = true, X = 0.018348623853211, Y = -0.331521739130435, LX = -0.289163595259053, LY = 0.0638088168348348, RX = 0.136276148364694, RY = 0.165706495051005 },
{ LockY = true, X = 0.314984709480122, Y = 0.217391304347826, LX = -0.180093572152941, LY = -0.0685557873673892, RX = 0.17533129459735, RY = -0.110507246376812 },
{ LockY = true, X = 0.712538226299694, Y = -0.407608695652174, LX = -0.132517838939857, LY = 0.208333333333333 }
}
},
},
},
},
Path1Displacement = BezierSpline {
SplineColor = { Red = 255, Green = 0, Blue = 255 },
NameSet = true,
KeyFrames = {
[0] = { 0, RH = { 10, 0.133743247011338 }, Flags = { Linear = true, LockedY = true } },
[30] = { 0.401229741034014, LH = { 20, 0.267486494022676 }, RH = { 39.6666666666667, 0.493253819280156 }, Flags = { Linear = true, LockedY = true } },
[59] = { 0.67730197577244, LH = { 49.3333333333333, 0.585277897526298 }, RH = { 69, 0.784867983848293 }, Flags = { Linear = true, LockedY = true } },
[89] = { 1, LH = { 79, 0.892433991924147 }, Flags = { Linear = true, LockedY = true } }
}
},
Duplicate1 = Fuse.Duplicate {
CtrlWZoom = false,
Inputs = {
Copies = Input { Value = 20, },
TimeOffset = Input { Value = 5, },
Center = Input { Value = { 0.5092024539877, 0.5 }, },
Pivot = Input { Value = { 0.595312499999995, 0.5 }, },
XSize = Input { Value = 0.915, },
Angle = Input {
SourceOp = "Duplicate1Angle",
Source = "Value",
},
RandomSeed = Input { Value = 26024, },
Background = Input {
SourceOp = "Background1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 302, 208 } },
},
Duplicate1Angle = BezierSpline {
SplineColor = { Red = 14, Green = 221, Blue = 144 },
NameSet = true,
KeyFrames = {
[23] = { 0, RH = { 25, 3.16666666666667 }, Flags = { Linear = true } },
[29] = { 9.5, LH = { 27, 6.33333333333333 }, RH = { 30.3333333333333, 6.33333333333333 }, Flags = { Linear = true } },
[33] = { 0, LH = { 31.6666666666667, 3.16666666666667 }, RH = { 41.6666666666667, -2.1 }, Flags = { Linear = true } },
[59] = { -6.3, LH = { 50.3333333333333, -4.2 }, RH = { 62.6666666666667, -4.2 }, Flags = { Linear = true } },
[70] = { 0, LH = { 66.3333333333333, -2.1 }, Flags = { Linear = true } }
}
},
Ellipse1 = EllipseMask {
Inputs = {
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Center = Input { Value = { 0.51840490797546, 0.5 }, },
Width = Input { Value = 0.0430086951048631, },
Height = Input { Value = 0.0292682926829268, },
},
ViewInfo = OperatorInfo { Pos = { 140, 149 } },
},
Background1 = Background {
Inputs = {
GlobalOut = Input { Value = 150, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
EffectMask = Input {
SourceOp = "Ellipse1",
Source = "Mask",
}
},
ViewInfo = OperatorInfo { Pos = { 143, 211 } },
}
}
}