Use Fusion or Resolve to create an animated Icon in under 20 Minutes for Free

Page 2/2

Create the Animation

Now that we are done with the arrow itself, we can focus on the look and animation. Create a Transform Node. Pipe the Output of the Polygon Node into the Background Input of the Transform Node. By default Fusion will pipe the Polygon Node into the blue Mask input. If you struggle to find the right input, drag the Output wire of the Polygon Node onto the Transform Node while pressing Alt. A popup will let you select the right input.

First, we need to rotate the whole arrow by 180 degrees. Then, animate the Y-Position by enabling the keyframes on that parameter in the Inspector. Set a keyframe when the arrow is at the top, go forward in the timeline (in my case 200 frames) and drag the arrow to the bottom.

The arrow is moving, but it doesn’t look as energetic as we want. Now, we will change the speed curve of the movement path by going into the Spline Editor. Click on Spline on the upper right. In the Spline Editor, click on the three dots on the upper right and select Show only selected Tools. Click into the window and press Cmd-F or Ctrl-F to frame the Spline. Now we see a linear spline. This represents the position on the Y-Axis. We want to change this to ease in and out very strongly.

Press Cmd-A or Ctrl-A to select all points. Then press Shift-S to smooth the points. This is exactly like when we smoothed the points on the arrow before. But instead of having to pop open a dialogue to change the smoothing, we simply press T. Increase the handle length with the new options above the Spline-Editor.

This is the kind of movement we want. I also added a slight motion blur by going into the settings of the Transform Node and enabling Motion Blur. But we won’t actually see a big difference since this icon will be very small.

Now that we have our animation, we have to create an actual image out of this. Pipe the Transform Node into a Background Node. Here you can give it a color. If the arrow looks different, you may have to change the resolution of the Background Node, exactly like you did with the Polygon Node before.

I want the arrow to fade in and out. You can do this by animating the Level on the Polygon Node, or (like I did in this case) by animating the Opacity on the Background Node. If you do the latter, you will also need an Alpha Multiply Node to actually see the fading.

Make it Glow

Next, I want to have a very subtle glow. In my initial set-up I used the Reactor Fuse FastExponentialGlow. It’s a very nice but slow glow effect. Also you would need the paid version to install Reactor. So instead I used two Soft Glow Nodes . The first with a stronger Glow but very small Glow Radius and the second to the opposite. Bigger radius but weaker glow. I put the threshold to around 0.2. Play around with the settings until you have something you like. I personally like to use the Bartlett-Filter, not only because it’s slightly faster but looks more interesting than the Gaussian-Filter.

Duplicate

One arrow is too few. Use the Duplicate Node. For my animation I chose 3 copies that have a Time Offset of -40 frames.

(Don’t worry about the Dissolve Node in the screenshot. This is just a poor man’s switch node, which I used to toggle between the Soft Glows and the Exponential Glow. )

Make it Loop

In the next step we will make it loop. Add a TimeSpeed Node and a Merge Node. The Time Speed can be used to retime your inputs. In my case a Delay of -140 frames worked, your numbers may vary. Pipe the Outputs like shown in the image below, into the Merge Node.

For my animation, I changed the render range to 140 frames as well, now the animation loops. The timeline range should be long enough so the Timespeed Node gets all the frames it needs. I set it 300 frames long. If you use Resolve, and your Fusion Clip is too short, add the Fusion Clip to a timeline in the Edit Page and expand it like you would with normal footage. Now jump back to the Fusion Page, the timeline range should be bigger.

Project File

Is something not working for you? Then copy and paste the following code into Fusion and you can check what I made different:

{
Tools = ordered() {
Polygon2 = PolylineMask {
DrawMode = "ModifyOnly",
DrawMode2 = "InsertAndModify",
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
OutputSize = Input { Value = FuID { "Custom" }, },
MaskWidth = Input { Value = 800, },
MaskHeight = Input { Value = 800, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Center = Input { Value = { 0.5, 0.298439531859558 }, },
ZRotation = Input { Value = 45, },
Polyline = Input {
Value = Polyline {
Closed = true,
Points = {
{ Linear = true, X = -0.281739294870687, Y = 0.283946130078551, LX = 0.177246431623562, LY = -0.0113153766928504, RX = 0.141053550369332, RY = -0.0475082579470806 },
{ Linear = true, X = 0.141421356237309, Y = 0.141421356237309, LX = -0.141053550369332, LY = 0.0475082579470806, RX = 0.0475082579470807, RY = -0.141053550369332 },
{ Linear = true, X = 0.283946130078551, Y = -0.281739294870687, LX = -0.0475082579470807, LY = 0.141053550369332, RX = -0.0113153766928505, RY = 0.177246431623562 },
{ Linear = true, X = 0.25, Y = 0.25, LX = 0.0113153766928505, LY = -0.177246431623562, RX = -0.177246431623562, RY = 0.0113153766928504 }
}
},
},
Polyline2 = Input {
Value = Polyline {
},
Disabled = true,
},
},
ViewInfo = OperatorInfo { Pos = { 55, -49.5 } },
},
Transform1 = Transform {
Inputs = {
MotionBlur = Input { Value = 1, },
Quality = Input { Value = 10, },
Center = Input {
SourceOp = "Path1",
Source = "Position",
},
Angle = Input { Value = 180, },
Input = Input {
SourceOp = "Polygon2",
Source = "Mask",
},
},
ViewInfo = OperatorInfo { Pos = { 55, 16.5 } },
},
Path1 = PolyPath {
DrawMode = "InsertAndModify",
CtrlWZoom = false,
Inputs = {
Displacement = Input {
SourceOp = "Path1Displacement",
Source = "Value",
},
PolyLine = Input {
Value = Polyline {
Points = {
{ Linear = true, LockY = true, X = 0, Y = 0.200404858299595, RX = 0, RY = -0.145074224021592 },
{ Linear = true, LockY = true, X = 0, Y = -0.234817813765182, LX = 0, LY = 0.145074224021592 }
}
},
},
},
},
Path1Displacement = BezierSpline {
SplineColor = { Red = 255, Green = 0, Blue = 255 },
NameSet = true,
KeyFrames = {
[0] = { 0, RH = { 175.643218994141, 0 }, Flags = { LockedY = true } },
[200] = { 1, LH = { 32.7624053955078, 1 }, Flags = { LockedY = true } }
}
},
AlphaMultiply1 = AlphaMultiply {
Inputs = {
Input = Input {
SourceOp = "Background1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 165, 49.5 } },
},
Background1 = Background {
Inputs = {
EffectMask = Input {
SourceOp = "Transform1",
Source = "Output",
},
ShutterAngle = Input { Value = 360, },
GlobalOut = Input { Value = 300, },
Width = Input { Value = 800, },
Height = Input { Value = 800, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftRed = Input { Value = 1, },
TopLeftGreen = Input { Value = 1, },
TopLeftBlue = Input { Value = 1, },
TopLeftAlpha = Input {
SourceOp = "Background1TopLeftAlpha",
Source = "Value",
},
},
ViewInfo = OperatorInfo { Pos = { 55, 49.5 } },
},
Background1TopLeftAlpha = BezierSpline {
SplineColor = { Red = 180, Green = 180, Blue = 180 },
NameSet = true,
KeyFrames = {
[0] = { 0, RH = { 34.6721458435059, 0 } },
[86.1386108398438] = { 1, LH = { 57.4257431030273, 1 }, RH = { 94.0594050089519, 1 } },
[109.900993347168] = { 1, LH = { 101.98019917806, 1 }, RH = { 132.010986328125, 1 }, Flags = { Linear = true } },
[176.23762512207] = { 0, LH = { 154.125396728516, 0 } }
}
},
SoftGlows = GroupOperator {
NameSet = true,
Inputs = ordered() {
Input1 = InstanceInput {
SourceOp = "SoftGlow1",
Source = "Input",
}
},
Outputs = {
Output1 = InstanceOutput {
SourceOp = "SoftGlow1_1",
Source = "Output",
}
},
ViewInfo = GroupInfo {
Pos = { 385, 49.5 },
Flags = {
AllowPan = false,
ForceSource = true,
GridSnap = true,
PipesAlways = true,
AutoSnap = true,
FullIndicator = true,
RemoveRouters = true
},
Size = { 236, 66.3636, 118, 24.2424 },
Direction = "Horizontal",
PipeStyle = "Direct",
Scale = 1,
Offset = { -439.338, -40.8636 }
},
Tools = ordered() {
SoftGlow1_1 = SoftGlow {
CtrlWShown = false,
Inputs = {
Filter = Input { Value = FuID { "Bartlett" }, },
Threshold = Input { Value = 0.228, },
Gain = Input { Value = 0.14, },
XGlowSize = Input { Value = 41.9, },
Input = Input {
SourceOp = "SoftGlow1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 495, 49.5 } },
},
SoftGlow1 = SoftGlow {
CtrlWShown = false,
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
Threshold = Input { Value = 0.14, },
Gain = Input { Value = 1.102, },
XGlowSize = Input { Value = 16.5, },
Input = Input {
SourceOp = "AlphaMultiply1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 385, 49.5 } },
}
},
},
Duplicate1 = Fuse.Duplicate {
Inputs = {
Copies = Input { Value = 3, },
TimeOffset = Input { Value = -40, },
MergeUnder = Input { Value = 1, },
RandomSeed = Input { Value = 26024, },
Background = Input {
SourceOp = "SoftGlow1_1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 605, 49.5 } },
},
Merge_CreateLoop = Merge {
CtrlWZoom = false,
NameSet = true,
Inputs = {
Background = Input {
SourceOp = "Duplicate1",
Source = "Output",
},
Foreground = Input {
SourceOp = "TimeSpeed1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 715, 148.5 } },
},
TimeSpeed1 = TimeSpeed {
Inputs = {
Delay = Input { Value = -140, },
Input = Input {
SourceOp = "Duplicate1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 715, 49.5 } },
}
}
}

Rendering

Now we are almost done. Add a Saver Node. Choose the file type and location. I chose to render it as a PNG Sequence, although I later had to convert it to a video for Adapter to work properly.

Resolves Saver Node hides some of the controls and by default renders as EXR. If you want to change that to PNG, simply put .png to the filename. You could also render it in the delivery page and set an in/out point there. Make sure your render range is correct and hit render. Or in Resolve go to the menu bar under Fusion > Render all Savers.

Creating the GIF

Good that this is a written tutorial and we don’t have to argue about the pronunciation of GIF. But it’s fairly easy to create one. If you have Photoshop you can use that but to keep it 100% Free we will use a freeware called Adapter. Simply drag and drop your file into Adapter. Use the Video to Animated GIF preset. Change your framerate to Source and your resolution to something more web-friendly (I chose 50*50). Select the output path and hit Convert.

Now you have a beautiful arrow animation, telling you to scroll down.

I hope you learned something and If you have any question or suggestions I would love to hear them!

Quickly share this!

Subscribe
Notify of
guest
2 Comments
Oldest
Newest
Inline Feedbacks
View all comments
Scroll to top
2
0
Would love your thoughts, please comment.x