Jump to: Board index » General » Fusion

Path animation and displacement timing

Learn about 3D compositing, animation, broadcast design and VFX workflows.
  • Author
  • Message
Offline

Ulf Andersson

  • Posts: 10
  • Joined: Tue Jan 05, 2016 9:09 am

Path animation and displacement timing

PostWed Jan 06, 2016 8:57 am

So, for my first post (ok, first thread) I thought I'd challenge you all with a tricky little thing i encountered the other day.

Here's what I did: I first created a motion path (and the same thing happened if I did it by keyframe animation or if I tracked something in a footage). Then I added a paint-node with a polyline stroke. I published the path (from the animation) so that I could connect the polyline stroke to it. So far so good, now the polyline exactly follows the animation path.

Then, I connect the Write On End-attribute of the stroke to the Displacement-attribute of the path, and that's where the problem occurs. The Write On End-attribute just looks at the path as a whole, so when it reaches 0.5 (for instance), it has reached the half way point of the path. However, the displacement-value in the animation path first looks at another curve (from what I understood of the manual) which decides where to place the animated object. Unless that curve also is linear (which it rarely is), the stroke and the animated object will be out of sync.

Simple example: Let's say I animate an object along a curve with three key frames. The timing between all keyframes is the same, but the distance between the 1st and the 2nd is much shorter (let's say 1/3 of the distance) than the 2nd and the 3rd (so, the movement between Key 1 and 2 is slower).

That means that the animated object reaches 1/3 of the distance in half the time (when displacement is 0.5). If I where to connect the displacement of that movement to the Write On End-value as above, it would reach half the distance in the same time.

So, what are your thoughts to sync the stroke more exact to the animation? So far, my only solution is to animate the Write On End by hand, which of course works, but seems like a hassle when it's more complex movements.

Would be grateful for all tips :-)

Kind Regards
------------
Ulf Andersson
Offline
User avatar

Chad Capeland

  • Posts: 3017
  • Joined: Mon Nov 10, 2014 9:40 pm

Re: Path animation and displacement timing

PostWed Jan 06, 2016 9:47 pm

Why couldn't you use the Displacement?
Chad Capeland
Indicated, LLC
www.floweffects.com
Offline

Ulf Andersson

  • Posts: 10
  • Joined: Tue Jan 05, 2016 9:09 am

Re: Path animation and displacement timing

PostWed Jan 06, 2016 10:23 pm

They don't sync.

Consider the following, I animate an item along a path

Key 1 - Frame 1 - start of curve
Key 2 - Frame 50 - 1/3 along the curve
Key 3 - Frame 100 - end of curve.

For this animation, when displacement = 0.5, the object is at Key 2 (half the time), BUT only 1/3 along the curve

However, when I apply displacement to the stroke, 0.5 is exactly at the middle of the curve.

So, at frame 50, when displacement = 0.5, the animated object is at 1/3 along the curve (per the keyframe above), but the stroke has reached halfway along the curve.

I can post a simple example comp when at the office tomorrow.

Kind regards
------------
Ulf Andersson
Offline

Ulf Andersson

  • Posts: 10
  • Joined: Tue Jan 05, 2016 9:09 am

Re: Path animation and displacement timing

PostThu Jan 07, 2016 7:56 am

Here is the code of a simple example. The difference is biggest at frame 50, after that the animated sphere catches up again. And, I know how to solve this particular, fairly simple, setup, but I'm curious about what to do with more advanced animations.

Kind regards

Code: Select all
{
   Tools = ordered() {
      Ellipse1 = EllipseMask {
         Inputs = {
            MaskWidth = Input { Value = 1280, },
            MaskHeight = Input { Value = 720, },
            PixelAspect = Input { Value = { 1, 1 }, },
            ClippingMode = Input { Value = FuID { "None" }, },
            Center = Input {
               SourceOp = "Path1",
               Source = "Position",
            },
            Width = Input { Value = 0.0927282008300095, },
            Height = Input { Value = 0.0927282008300095, },
         },
         ViewInfo = OperatorInfo { Pos = { 100, 162 } },
      },
      Path1 = PolyPath {
         DrawMode = "InsertAndModify",
         CtrlWZoom = false,
         Inputs = {
            Displacement = Input {
               SourceOp = "Path1Displacement",
               Source = "Value",
            },
            PolyLine = Input {
               SourceOp = "Publish1",
               Source = "Value",
            },
         },
      },
      Path1Displacement = BezierSpline {
         SplineColor = { Red = 255, Green = 0, Blue = 255 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 16.6666666666667, 0.100890435379123 }, Flags = { Linear = true, LockedY = true } },
            [50] = { 0.30267130613737, LH = { 33.3333333333333, 0.201780870758247 }, RH = { 66.6666666666667, 0.53511420409158 }, Flags = { Linear = true, LockedY = true } },
            [100] = { 1, LH = { 83.3333333333333, 0.76755710204579 }, Flags = { Linear = true, LockedY = true } }
         }
      },
      Publish1 = PublishPolyLine {
         Inputs = {
            Value = Input {
               Value = Polyline {
                  Points = {
                     { Linear = true, LockY = true, X = -0.399239543726236, Y = 0.331081081081081, RX = 0, RY = -0.0957207207207207 },
                     { Linear = true, LockY = true, X = -0.399239543726236, Y = 0.043918918918919, LX = 0, LY = 0.0957207207207207, RX = 0.220532319391635, RY = 0 },
                     { Linear = true, LockY = true, X = 0.262357414448669, Y = 0.043918918918919, LX = -0.220532319391635, LY = 0 }
                  }
               },
            },
         },
      },
      Background2 = Background {
         CtrlWZoom = false,
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1280, },
            Height = Input { Value = 720, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 1, },
            TopLeftGreen = Input { Value = 1, },
            TopLeftBlue = Input { Value = 1, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               },
            },
            EffectMask = Input {
               SourceOp = "Ellipse1",
               Source = "Mask",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 300, 162 } },
      },
      Paint1 = Paint {
         Inputs = {
            Input = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Paint = Input {
               SourceOp = "PolylineStroke1",
               Source = "Out",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 284, 260 } },
      },
      PolylineStroke1 = PolylineStroke {
         Points = {
         },
         IsThreaded = true,
         Brushes = { "SoftBrush" },
         ApplyModes = { "PaintApplyColor" },
         CtrlWZoom = false,
         Inputs = {
            StrokeControls = Input { Value = 1, },
            WriteOnEnd = Input {
               SourceOp = "Path1Displacement",
               Source = "Value",
            },
            Polyline = Input {
               SourceOp = "Publish1",
               Source = "Value",
            },
         },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Paint1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Background2",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 471, 265 } },
      },
      Background1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1280, },
            Height = Input { Value = 720, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 149, 256 } },
      }
   }
}
------------
Ulf Andersson
Offline

Rumen Belev

  • Posts: 4
  • Joined: Tue Nov 17, 2015 9:29 am

Re: Path animation and displacement timing

PostThu Jan 07, 2016 11:37 am

I think this problem is with the calculation of paths length.
I made a similar test:
Code: Select all
{
   Tools = ordered() {
      Paint2 = Paint {
         Inputs = {
            Input = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Paint = Input {
               SourceOp = "PolylineStroke2",
               Source = "Out",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 605, 214.5, }, },
      },
      PolylineStroke2 = PolylineStroke {
         Points = {
         },
         IsThreaded = false,
         Brushes = { "SoftBrush", },
         ApplyModes = { "PaintApplyColor", },
         CtrlWZoom = false,
         Inputs = {
            StrokeControls = Input { Value = 1, },
            WriteOnEnd = Input {
               SourceOp = "Path1Displacement",
               Source = "Value",
            },
            Polyline = Input {
               Value = Polyline {
                  Points = {
                     { Linear = true, X = -0.5, Y = -0.5, RX = 0.166666666666667, RY = 0, },
                     { Linear = true, X = 0, Y = -0.5, LX = -0.166666666666667, LY = 0, RX = 0, RY = 0.166666666666667, },
                     { Linear = true, X = 0, Y = 0, LX = 0, LY = -0.166666666666667, RX = 0.166666666666667, RY = 2.85743319469817e-015, },
                     { X = 0.5, Y = 0, LX = -0.166666666666667, LY = -2.85743319469817e-015, },
                  },
               },
            },
         },
      },
      Path1Displacement = BezierSpline {
         SplineColor = { Red = 255, Green = 0, Blue = 255, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 10, 0.333333333333333, }, Flags = { Linear = true, LockedY = true, }, },
            [30] = { 1, LH = { 20, 0.666666666666667, }, Flags = { Linear = true, }, },
         },
      },
      Background1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 35, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            TopLeftRed = Input { Value = 1, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            EffectMask = Input {
               SourceOp = "Ellipse1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 385, 214.5, }, },
      },
      Ellipse1 = EllipseMask {
         Inputs = {
            Level = Input { Value = 0.5809524, },
            MaskWidth = Input { Value = 1920, },
            MaskHeight = Input { Value = 1080, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Center = Input {
               SourceOp = "Path1",
               Source = "Position",
            },
            Width = Input { Value = 0.0496884010122412, },
            Height = Input { Value = 0.0496884010122412, },
         },
         ViewInfo = OperatorInfo { Pos = { 385, 181.5, }, },
      },
      Path1 = PolyPath {
         DrawMode = "InsertAndModify",
         CtrlWZoom = false,
         Inputs = {
            Displacement = Input {
               SourceOp = "Path1Displacement",
               Source = "Value",
            },
            PolyLine = Input {
               Value = Polyline {
                  Points = {
                     { X = -0.5, Y = -0.5, RX = 0.166666669781464, RY = 1.36674554242962e-006, },
                     { X = 0, Y = -0.5, LX = -0.166666669781464, LY = -1.36674554242962e-006, RX = 0, RY = 0.166666666666667, },
                     { Linear = true, X = 0, Y = 0, LX = 0, LY = -0.166666666666667, RX = 0.166666666666667, RY = 0, },
                     { Linear = true, X = 0.5, Y = 0, LX = -0.166666666666667, LY = 0, },
                  },
               },
            },
         },
      },
   },
}

In it the path have 3 segments.
Now the length of each segment is calculated relatively so in this case each segment have relative length of 0.5. The animation duration is 30 frames and as you can see for each 10 frames the circle passes through each segment.
The painted stroke however calulates the absolute lengths of the segments and moves through the path linearly.

The only way to make them move together is when the path is one segmented straight line.

I am not sure how exactly to synchronize both animations, but it is really an interesting problem.
Offline
User avatar

Chad Capeland

  • Posts: 3017
  • Joined: Mon Nov 10, 2014 9:40 pm

Re: Path animation and displacement timing

PostThu Jan 07, 2016 3:57 pm

Oh wow... So the Paint stroke is using the number of spline segments to determine length. That's no good. I mean, it's not going to show up much normally because hand painted strokes have lots of segments, but if you drew out a nice neat curve, then it's not valid.

It's not a bug, but it's not a good design, either. Basing it on the normalized length of the spline would be much better.
A fix would break old comps though, so they'd have to do a version check if they fixed this.
Chad Capeland
Indicated, LLC
www.floweffects.com
Offline

Hard Is Easy

  • Posts: 74
  • Joined: Fri Sep 24, 2021 5:48 pm
  • Real Name: Benediktas Lipnickas

Re: Path animation and displacement timing

PostSun May 21, 2023 8:57 pm

Wow I see this is an old issue.
Have you found a way to solve this?
I'm trying to synchronise path length with a displacement?
Offline

birdseye

  • Posts: 347
  • Joined: Fri Jun 12, 2020 2:36 pm
  • Real Name: Iain Fisher

Re: Path animation and displacement timing

PostMon May 22, 2023 10:58 am

Keyframe the write on manually instead of Connecting seems to work but don't ask me why, I avoid the Paint node if possible, our relationship got off to a bad start and hasn't recovered.

Code: Select all
{
   Tools = ordered() {
      Ellipse1 = EllipseMask {
         Inputs = {
            MaskWidth = Input { Value = 1280, },
            MaskHeight = Input { Value = 720, },
            PixelAspect = Input { Value = { 1, 1 }, },
            ClippingMode = Input { Value = FuID { "None" }, },
            Center = Input {
               SourceOp = "Path1",
               Source = "Position",
            },
            Width = Input { Value = 0.0927282008300095, },
            Height = Input { Value = 0.0927282008300095, },
         },
         ViewInfo = OperatorInfo { Pos = { 274.667, 107.97 } },
      },
      Path1 = PolyPath {
         DrawMode = "InsertAndModify",
         CtrlWZoom = false,
         Inputs = {
            Displacement = Input {
               SourceOp = "Path1Displacement",
               Source = "Value",
            },
            PolyLine = Input {
               SourceOp = "Publish1",
               Source = "Value",
            },
         },
      },
      Path1Displacement = BezierSpline {
         SplineColor = { Red = 255, Green = 0, Blue = 255 },
         CtrlWZoom = false,
         KeyFrames = {
            [0] = { 0, RH = { 16.6666666666667, 0.100890435379123 }, Flags = { Linear = true, LockedY = true } },
            [50] = { 0.30267130613737, LH = { 33.3333333333333, 0.201780870758247 }, RH = { 66.6666666666667, 0.53511420409158 }, Flags = { Linear = true, LockedY = true } },
            [100] = { 1, LH = { 83.3333333333333, 0.76755710204579 }, Flags = { Linear = true, LockedY = true } }
         }
      },
      Publish1 = PublishPolyLine {
         CtrlWZoom = false,
         Inputs = {
            Value = Input {
               Value = Polyline {
                  Points = {
                     { Linear = true, LockY = true, X = -0.399239543726236, Y = 0.331081081081081, RX = 0, RY = -0.0957207207207207 },
                     { Linear = true, LockY = true, X = -0.399239543726236, Y = 0.043918918918919, LX = 0, LY = 0.0957207207207207, RX = 0.220532319391635, RY = 0 },
                     { Linear = true, LockY = true, X = 0.262357414448669, Y = 0.043918918918919, LX = -0.220532319391635, LY = 0 }
                  }
               },
            },
         },
      },
      Paint1 = Paint {
         Inputs = {
            Input = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Paint = Input {
               SourceOp = "PolylineStroke1",
               Source = "Out",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 214.667, 143.546 } },
      },
      PolylineStroke1 = PolylineStroke {
         Points = {
         },
         IsThreaded = true,
         Brushes = { "SoftBrush" },
         ApplyModes = { "PaintApplyColor" },
         CtrlWZoom = false,
         Inputs = {
            StrokeControls = Input { Value = 1, },
            WriteOnStart = Input {
               SourceOp = "PolylineStroke1Start",
               Source = "Value",
            },
            WriteOnEnd = Input {
               SourceOp = "PolylineStroke1End",
               Source = "Value",
            },
            Polyline = Input {
               SourceOp = "Publish1",
               Source = "Value",
            },
         },
      },
      PolylineStroke1Start = BezierSpline {
         SplineColor = { Red = 232, Green = 6, Blue = 244 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 16.6666666666667, 0 }, Flags = { Linear = true } },
            [50] = { 0, LH = { 33.3333333333333, 0 }, RH = { 66.6666666666667, 0 }, Flags = { Linear = true } },
            [100] = { 0, LH = { 83.3333333333333, 0 }, Flags = { Linear = true } }
         }
      },
      PolylineStroke1End = BezierSpline {
         SplineColor = { Red = 72, Green = 233, Blue = 54 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 16.6666666666667, 0.0666666666666667 }, Flags = { Linear = true } },
            [50] = { 0.2, LH = { 33.3333333333333, 0.133333333333333 }, RH = { 66.6666666666667, 0.466666666666667 }, Flags = { Linear = true } },
            [100] = { 1, LH = { 83.3333333333333, 0.733333333333333 }, Flags = { Linear = true } }
         }
      },
      Background1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1280, },
            Height = Input { Value = 720, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { 79.6667, 139.546 } },
      },
      Background2 = Background {
         Inputs = {
            EffectMask = Input {
               SourceOp = "Ellipse1",
               Source = "Mask",
            },
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1280, },
            Height = Input { Value = 720, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 1, },
            TopLeftGreen = Input { Value = 1, },
            TopLeftBlue = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 402.667, 109.182 } },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Paint1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Background2",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 401.667, 148.546 } },
      },
      Ellipse1_1 = EllipseMask {
         Inputs = {
            Level = Input { Value = 0.5809524, },
            MaskWidth = Input { Value = 1920, },
            MaskHeight = Input { Value = 1080, },
            PixelAspect = Input { Value = { 1, 1 }, },
            ClippingMode = Input { Value = FuID { "None" }, },
            Center = Input {
               SourceOp = "Path1_1",
               Source = "Position",
            },
            Width = Input { Value = 0.0496884010122412, },
            Height = Input { Value = 0.0496884010122412, },
         },
         ViewInfo = OperatorInfo { Pos = { 601.333, 106.485 } },
      },
      Path1_1 = PolyPath {
         DrawMode = "InsertAndModify",
         CtrlWZoom = false,
         Inputs = {
            Displacement = Input {
               SourceOp = "Path1_1Displacement",
               Source = "Value",
            },
            PolyLine = Input {
               Value = Polyline {
                  Points = {
                     { X = -0.5, Y = -0.5, RX = 0.166666669781464, RY = 1.36674554242962e-06 },
                     { X = 0, Y = -0.5, LX = -0.166666669781464, LY = -1.36674554242962e-06, RX = 0, RY = 0.166666666666667 },
                     { Linear = true, X = 0, Y = 0, LX = 0, LY = -0.166666666666667, RX = 0.166666666666667, RY = 0 },
                     { Linear = true, X = 0.5, Y = 0, LX = -0.166666666666667, LY = 0 }
                  }
               },
            },
         },
      },
      Path1_1Displacement = BezierSpline {
         SplineColor = { Red = 255, Green = 0, Blue = 255 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 10, 0.333333333333333 }, Flags = { Linear = true, LockedY = true } },
            [30] = { 1, LH = { 20, 0.666666666666667 }, Flags = { Linear = true } }
         }
      },
      Background1_1 = Background {
         Inputs = {
            EffectMask = Input {
               SourceOp = "Ellipse1_1",
               Source = "Mask",
            },
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 601.333, 139.485 } },
      },
      Paint2 = Paint {
         CtrlWZoom = false,
         Inputs = {
            Input = Input {
               SourceOp = "Background1_1",
               Source = "Output",
            },
            Paint = Input {
               SourceOp = "PolylineStroke2",
               Source = "Out",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 821.333, 139.485 } },
      },
      PolylineStroke2 = PolylineStroke {
         Points = {
         },
         IsThreaded = false,
         Brushes = { "SoftBrush" },
         ApplyModes = { "PaintApplyColor" },
         CtrlWZoom = false,
         Inputs = {
            StrokeControls = Input { Value = 1, },
            WriteOnStart = Input {
               SourceOp = "PolylineStroke2Start",
               Source = "Value",
            },
            WriteOnEnd = Input {
               SourceOp = "PolylineStroke2End",
               Source = "Value",
            },
            Polyline = Input {
               Value = Polyline {
                  Points = {
                     { Linear = true, X = -0.5, Y = -0.5, RX = 0.166666666666667, RY = 0 },
                     { Linear = true, X = 0, Y = -0.5, LX = -0.166666666666667, LY = 0, RX = 0, RY = 0.166666666666667 },
                     { Linear = true, X = 0, Y = 0, LX = 0, LY = -0.166666666666667, RX = 0.166666666666667, RY = 2.85743319469817e-15 },
                     { X = 0.5, Y = 0, LX = -0.166666666666667, LY = -2.85743319469817e-15 }
                  }
               },
            },
         },
      },
      PolylineStroke2Start = BezierSpline {
         SplineColor = { Red = 232, Green = 6, Blue = 244 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 3.33333333333333, 0 }, Flags = { Linear = true } },
            [10] = { 0, LH = { 6.66666666666667, 0 }, RH = { 13.3333333333333, 0 }, Flags = { Linear = true } },
            [20] = { 0, LH = { 16.6666666666667, 0 }, RH = { 23.3333333333333, 0 }, Flags = { Linear = true } },
            [30] = { 0, LH = { 26.6666666666667, 0 }, Flags = { Linear = true } }
         }
      },
      PolylineStroke2End = BezierSpline {
         SplineColor = { Red = 72, Green = 233, Blue = 54 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 3.33333333333333, 0.131333333333333 }, Flags = { Linear = true } },
            [10] = { 0.394, LH = { 6.66666666666667, 0.262666666666667 }, RH = { 13.3333333333333, 0.468333333333333 }, Flags = { Linear = true } },
            [20] = { 0.617, LH = { 16.6666666666667, 0.542666666666667 }, RH = { 23.3333333333333, 0.744666666666667 }, Flags = { Linear = true } },
            [30] = { 1, LH = { 26.6666666666667, 0.872333333333333 }, Flags = { Linear = true } }
         }
      }
   },
   ActiveTool = "Paint2"
}
Last edited by birdseye on Mon May 22, 2023 11:09 am, edited 2 times in total.
Offline

Sander de Regt

  • Posts: 3497
  • Joined: Thu Nov 13, 2014 10:09 pm

Re: Path animation and displacement timing

PostMon May 22, 2023 10:59 am

I would advice against this, since if you change one thing, then you have the change the other as well.
If you connect the right things to each other it will work.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

marcusa

  • Posts: 38
  • Joined: Thu Mar 25, 2021 12:14 am
  • Real Name: Marcus Andersson

Re: Path animation and displacement timing

PostSun Jul 23, 2023 9:59 pm

Might have stumbled upon a solution to this ancient problem of the Displacement value from a tracked source seemingly getting desynced when used to animate the Write On settings of a Paint node.

Be square. How square? SpongebobSquarepantsSingingIt'sHipToBeSquareInTrafalgarSquare
square. Equal height and width. On the pixel.

That's it. If whatever is piped into the tracker is square, anything that uses that tracked Displace data, and is on a square background, will stay synced. If not square; Desync City, population: You.

If you have a 1920x1080 thing, add a Crop node and set the height to 1920 so it becomes square (and be sure to center it), then pipe that into the tracker and track away. If you then have a another square thing, like a MediaIn or background node and then use the displacement value to animate stuff (like the Start/End values of the Write On setting of a Paint node) on top of that it will sync pixel perfectly.

You can then crop it back down to 1920x1080 if you want to export it from Fusion. If you've opened the clip in Fusion from the edit page in Resolve there's no need to crop it in Fusion (if the original timeline resolution was 1920x1080).
Offline

Ashley Thomas

  • Posts: 84
  • Joined: Sat May 04, 2019 4:11 am
  • Real Name: Ashley Thomas

Re: Path animation and displacement timing

PostFri Feb 23, 2024 7:04 pm

marcusa wrote:Might have stumbled upon a solution to this ancient problem of the Displacement value from a tracked source seemingly getting desynced when used to animate the Write On settings of a Paint node. ... Be square. ... Equal height and width. ... If whatever is piped into the tracker is square, anything that uses that tracked Displace data, and is on a square background, will stay synced. If not square; Desync City...
Equal width and height fixed it for me, thank you!

I had an rectangle at the tip of a length-animated polyline which mostly stayed perfectly attached and heading-aligned but, especially at twists/turns of the polyline, would fall behind or jump ahead of the tip of the polyline. Changing to 1080x1080 fixed things... 100% perfect heading-aligned attached rectangle to the tip of the lengthening polyline for the entire animation.

It's surprising not to see more posts on this. I recently saw a comp using 1080x1080... was wondering why... now I'm thinking equal width and height resolution might be something long-time Fusion folks know about.
Offline

Sander de Regt

  • Posts: 3497
  • Joined: Thu Nov 13, 2014 10:09 pm

Re: Path animation and displacement timing

PostFri Feb 23, 2024 8:06 pm

I am a long time Fusion user and I didn't know about this. Maybe I should do a video about it, so that this info becomes more accessible. Or the development team could find out why it doesn't take aspect ratio of images into account.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

Ashley Thomas

  • Posts: 84
  • Joined: Sat May 04, 2019 4:11 am
  • Real Name: Ashley Thomas

Re: Path animation and displacement timing

PostFri Feb 23, 2024 10:35 pm

Sander de Regt wrote:I am a long time Fusion user and I didn't know about this. Maybe I should do a video about it, so that this info becomes more accessible. Or the development team could find out why it doesn't take aspect ratio of images into account.
Do you perform many animations where something is on the tip of a visible polyline being lengthened ("drawn")?

I was wondering if your workflow had something that automatically created 1080x1080 for Fusion comp resoultion. Your post (unrelated to subject of this thread) uses an sRender with 1080x1080 resolution. How did you arrive at that in your process? I ask because my sRenders use default of 1920x1080.

From the other post...
Code: Select all
sRender1 = sRender {
   Inputs = {
      Width = Input { Value = 1080, },
      Height = Input { Value = 1080, },
      ...
   }, ...
}

Return to Fusion

Who is online

Users browsing this forum: No registered users and 46 guests