Jump to: Board index » General » Fusion

Timestretch -> pEmitter (Bitmap) = No Particle

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

kilburnflyer

  • Posts: 5
  • Joined: Thu May 01, 2025 10:46 pm
  • Real Name: Leon Mills

Timestretch -> pEmitter (Bitmap) = No Particle

PostSun May 11, 2025 5:06 pm

The output of a Timestretch node fed by a Loader with an image sequence is not causing pEmitter to render a particle.

The pEmitter is keyframed to emit 1 particle every 50 frames. When the pEmitter input is directly from the Loader there is no issue but this is not controllable hence using the Timestretch node to keyframe the Source frame.

Video showing the problem - board doesn't allow me to post URLs but append this on YouTube domain:

/watch?v=NtP21rWnb4w

Is there an intermediary node that makes the output compliant with the pEmitter input because directly from the Loader or from the output of the Timestreatch is appears identical in the viewer - an image with an alpha channel?
Offline

Sander de Regt

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

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostMon May 12, 2025 6:31 am

I think what you're doing *shoud* work. It's clear that it doesn't. Is there a specific reason you want to use particles for this? It can also help if you share the actual nodes with us.
Just copy/paste all your nodes between [code] tags and we can reproduce your comp.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

kilburnflyer

  • Posts: 5
  • Joined: Thu May 01, 2025 10:46 pm
  • Real Name: Leon Mills

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostMon May 12, 2025 7:56 am

Is there a specific reason you want to use particles for this?


Because I may have more graphics and dropping another image in to the sequence and relying on the force tools for animation seems a simple solution rather than creating separate loaders and animating individually.

I think what you're doing *shoud* work. It's clear that it doesn't.


Right - I am assuming that pRender when set to Style:Bitmap is programmed every frame to look at the output of Timestretch to see what its current output is - as the whole point of the Timestretch node is surely to look like any "normal" footage output regardless of its source.

Here are the nodes.

Code: Select all
Tools = {
      Loader1 = Loader {
         Clips = {
            Clip {
               ID = "Clip1",
               Filename = "D:\\Eastbourne\\Video Elements\\Show Graphics\\Show Logos\\1.tga",
               FormatID = "TargaFormat",
               StartFrame = 1,
               Length = 12,
               LengthSetManually = true,
               TrimIn = 0,
               TrimOut = 11,
               ExtendFirst = 0,
               ExtendLast = 0,
               Loop = 1,
               AspectMode = 0,
               Depth = 0,
               TimeCode = 0,
               GlobalStart = 0,
               GlobalEnd = 11
            }
         },
         Inputs = {
            MissingFrames = Input { Value = 3, },
            PostMultiplyByAlpha = Input { Value = 1, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }
         },
         ViewInfo = OperatorInfo { Pos = { 119.969, -99.1707 } },
      },
      Background1 = Background {
         ExtentSet = true,
         Inputs = {
            GlobalOut = Input { Value = 820, },
            Width = Input { Value = 3840, },
            Height = Input { Value = 2160, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }
         },
         ViewInfo = OperatorInfo { Pos = { 749.402, -64.9698 } },
      },
      TimeStretcher1 = TimeStretcher {
         EnabledRegion = TimeRegion { { Start = 0, End = 700.9999, FrameLength = 1 } },
         Inputs = {
            SourceTime = Input {
               SourceOp = "TimeStretcher1SourceTime",
               Source = "Value",
            },
            InterpolateBetweenFrames = Input { Value = 0, },
            SampleSpread = Input { Disabled = true, },
            Input = Input {
               SourceOp = "Loader1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 212.734, -11.1733 } },
      },
      TimeStretcher1SourceTime = BezierSpline {
         SplineColor = { Red = 233, Green = 217, Blue = 243 },
         CtrlWZoom = false,
         KeyFrames = {
            [0] = { 1, RH = { 20, 1 }, Flags = { Linear = true } },
            [60] = { 1, LH = { 40, 1 }, RH = { 60.3333333333333, 1.33333333333333 }, Flags = { Linear = true } },
            [61] = { 2, LH = { 60.6666666666667, 1.66666666666667 }, RH = { 82.3333333333333, 2 }, Flags = { Linear = true } },
            [125] = { 2, LH = { 103.666666666667, 2 }, RH = { 125.333333333333, 2.33333333333333 }, Flags = { Linear = true } },
            [126] = { 3, LH = { 125.666666666667, 2.66666666666667 }, RH = { 139.666666666667, 3 }, Flags = { Linear = true } },
            [167] = { 3, LH = { 153.333333333333, 3 }, RH = { 167.333333333333, 3.33333333333333 }, Flags = { Linear = true } },
            [168] = { 4, LH = { 167.666666666667, 3.66666666666667 }, RH = { 184, 4 }, Flags = { Linear = true } },
            [216] = { 4, LH = { 200, 4 }, RH = { 216.333333333333, 4.33333333333333 }, Flags = { Linear = true } },
            [217] = { 5, LH = { 216.666666666667, 4.66666666666667 }, RH = { 235.666666666667, 5 }, Flags = { Linear = true } },
            [273] = { 5, LH = { 254.333333333333, 5 }, RH = { 273.333333333333, 5.33333333333333 }, Flags = { Linear = true } },
            [274] = { 6, LH = { 273.666666666667, 5.66666666666667 }, RH = { 290.666666666667, 6 }, Flags = { Linear = true } },
            [324] = { 6, LH = { 307.333333333333, 6 }, RH = { 324.333333333333, 6.33333333333333 }, Flags = { Linear = true } },
            [325] = { 7, LH = { 324.666666666667, 6.66666666666667 }, RH = { 339.333333333333, 7 }, Flags = { Linear = true } },
            [368] = { 7, LH = { 353.666666666667, 7 }, RH = { 368.333333333333, 7.33333333333333 }, Flags = { Linear = true } },
            [369] = { 8, LH = { 368.666666666667, 7.66666666666667 }, RH = { 387.333333333333, 8 }, Flags = { Linear = true } },
            [424] = { 8, LH = { 405.666666666667, 8 }, RH = { 424.333333333333, 8.33333333333333 }, Flags = { Linear = true } },
            [425] = { 9, LH = { 424.666666666667, 8.66666666666667 }, RH = { 441, 9 }, Flags = { Linear = true } },
            [473] = { 9, LH = { 457, 9 }, RH = { 473.333333333333, 9.33333333333333 }, Flags = { Linear = true } },
            [474] = { 10, LH = { 473.666666666667, 9.66666666666667 }, RH = { 491, 10 }, Flags = { Linear = true } },
            [525] = { 10, LH = { 508, 10 }, RH = { 525.333333333333, 10.3333333333333 }, Flags = { Linear = true } },
            [526] = { 11, LH = { 525.666666666667, 10.6666666666667 }, RH = { 540.666666666667, 11 }, Flags = { Linear = true } },
            [570] = { 11, LH = { 555.333333333333, 11 }, RH = { 570.333333333333, 11 }, Flags = { Linear = true } },
            [571] = { 11, LH = { 570.666666666667, 11 }, Flags = { Linear = true } }
         }
      },
      pEmitter1 = pEmitter {
         ID = 2,
         EnabledRegion = TimeRegion { { Start = 0, End = 707.9999 } },
         Inputs = {
            Number = Input {
               SourceOp = "pEmitter1Number",
               Source = "Value",
            },
            PositionVariance = Input { Value = 0.0319, },
            VelocityControls = Input { Value = 1, },
            RotationControls = Input { Value = 1, },
            SpinControls = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStyleBitmap" }, },
            ["ParticleStyleBitmap.Animate"] = Input { Value = 2, },
            ["ParticleStyleBitmap.DropToolsHere"] = Input {
               SourceOp = "TimeStretcher1",
               Source = "Output",
            },
            ["SphereRgn.Size"] = Input { Value = 0, },
            ["SphereRgn.Translation"] = Input { Value = -1, },
            ["SphereRgn.Rotate.X"] = Input { Value = -1, },
            ["ParticleStyle.ColorControls"] = Input { Value = 1, },
            ["ParticleStyle.ColorVariance"] = Input { Value = 1, },
            ["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 0.88, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeOverLife",
               Source = "Value",
            },
            ["ParticleStyle.FadeControls"] = Input { Value = 1, },
            ["ParticleStyle.FadeOut"] = Input { Value = 0.522, },
            ["ParticleStyle.MergeControls"] = Input { Value = 1, },
            ["ParticleStyle.SubtractiveAdditive"] = Input { Value = 0.685, },
            ["ParticleStyle.BlurControls"] = Input { Value = 1, },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BlurOverLife2D",
               Source = "Value",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 463.756, -82.8043 } },
      },
      pEmitter1Number = BezierSpline {
         SplineColor = { Red = 233, Green = 206, Blue = 78 },
         KeyFrames = {
            [0] = { 0, RH = { 16.3333333333333, 0 } },
            [49] = { 0, LH = { 32.6666666666667, 0 }, RH = { 49.3333333333333, 0.333333333333333 }, Flags = { Linear = true } },
            [50] = { 1, LH = { 49.6666666666667, 0.666666666666667 }, RH = { 50.3333333333333, 0.666666666666667 }, Flags = { Linear = true } },
            [51] = { 0, LH = { 50.6666666666667, 0.333333333333333 }, RH = { 67, 0 }, Flags = { Linear = true, Loop = true } },
            [99] = { 0, LH = { 83, 0 }, RH = { 99.3333333333333, 0.333333333333333 }, Flags = { Linear = true } },
            [100] = { 1, LH = { 99.6666666666667, 0.666666666666667 }, RH = { 100.333333333333, 0.666666666666667 }, Flags = { Linear = true } },
            [101] = { 0, LH = { 100.666666666667, 0.333333333333333 }, Flags = { Linear = true, Loop = true } }
         }
      },
      pEmitter1SizeOverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0.0207253886010363] = { 0, RH = { 0.347150259067358, 0.329787234042553 }, Flags = { Linear = true } },
               [1] = { 0.98936170212766, LH = { 0.673575129533679, 0.659574468085107 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
      },
      pEmitter1BlurOverLife2D = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.333333333333333, 0.5 }, Flags = { Linear = true } },
               [1] = { 0.5, LH = { 0.666666666666667, 0.5 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      pDirectionalForce1 = pDirectionalForce {
         ID = 9,
         Inputs = {
            Strength = Input { Value = 0.006, },
            Direction = Input { Value = 0, },
            DirectionZ = Input { Value = -90, },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 557.366, -30.0616 } },
      },
      pRender1 = pRender {
         Inputs = {
            _MotionBlurWarning = Input { Disabled = true, },
            GlobalOut = Input { Value = 700, },
            Width = Input { Value = 3840, },
            Height = Input { Value = 2160, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            OutputMode = Input {
               Value = FuID { "TwoD" },
               Disabled = true,
            },
            ["MaterialID.MaterialID"] = Input { Value = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Input = Input {
               SourceOp = "pDirectionalForce1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 586.332, 27.1592 } },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, }
         },
         ViewInfo = OperatorInfo { Pos = { 760.872, 26.101 } },
      }
   }
Offline

Max Seredkin

  • Posts: 59
  • Joined: Sat Jul 29, 2017 11:00 am

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostMon May 12, 2025 8:47 am

The alpha channel is most likely missing. There are particles, they're just completely transparent.
Behance https://www.behance.net/max_seredkin
Vimeo https://vimeo.com/user66756392
https://www.mrpost.ru/en
Offline
User avatar

KrunoSmithy

  • Posts: 4586
  • Joined: Fri Oct 20, 2023 11:01 pm
  • Real Name: Kruno Stifter

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostMon May 12, 2025 9:07 am

After the loader node, try using a merge node. Then, branch out the TimeStretcher node from the loader and merge it back as the foreground before pEmiter. I believe I encountered a similar problem before. I don't have Fusion open right now, but I think that solution worked. I believe I was using the TimeSpeed node. Alternatively, TimeMachine also worked, if I remember correctly. It's a third-party tool available on Reactor. It should work directly. Its been a while so I would have to test, but try that.
Offline

kilburnflyer

  • Posts: 5
  • Joined: Thu May 01, 2025 10:46 pm
  • Real Name: Leon Mills

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostMon May 12, 2025 9:01 pm

Apologies for the delay in replies - my post had to be approved by Admins.

User KrunoSmithy (Thanks!) suggested using a different tool which would be more appropriate - TimeMachine - which causes the particle to appear but it only works when Random is chosen in the TimeMachine tools.

It seems like pEmitter isn't sampling the source image on every frame in all circumstances...but why?

Video of the updated issue here:




Code: Select all
Tools = {
      Loader1 = Loader {
         Clips = {
            Clip {
               ID = "Clip1",
               Filename = "D:\\Eastbourne\\Video Elements\\Show Graphics\\Show Logos\\1.tga",
               FormatID = "TargaFormat",
               StartFrame = 1,
               Length = 12,
               LengthSetManually = true,
               TrimIn = 0,
               TrimOut = 11,
               ExtendFirst = 0,
               ExtendLast = 0,
               Loop = 1,
               AspectMode = 0,
               Depth = 0,
               TimeCode = 0,
               GlobalStart = 0,
               GlobalEnd = 11
            }
         },
         Inputs = {
            PostMultiplyByAlpha = Input { Value = 1, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }
         },
         ViewInfo = OperatorInfo { Pos = { 91.6847, -155.739 } },
      },
      Background1 = Background {
         ExtentSet = true,
         Inputs = {
            GlobalOut = Input { Value = 820, },
            Width = Input { Value = 3840, },
            Height = Input { Value = 2160, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }
         },
         ViewInfo = OperatorInfo { Pos = { 721.118, -58.9701 } },
      },
      pEmitter1SizeOverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0.0207253886010363] = { 0, RH = { 0.347150259067358, 0.329787234042553 }, Flags = { Linear = true } },
               [1] = { 0.98936170212766, LH = { 0.673575129533679, 0.659574468085107 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, }
         },
         ViewInfo = OperatorInfo { Pos = { 802.356, 23.5297 } },
      },
      pRender1 = pRender {
         Inputs = {
            _MotionBlurWarning = Input { Disabled = true, },
            GlobalOut = Input { Value = 700, },
            Width = Input { Value = 3840, },
            Height = Input { Value = 2160, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            OutputMode = Input {
               Value = FuID { "TwoD" },
               Disabled = true,
            },
            ["MaterialID.MaterialID"] = Input { Value = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Input = Input {
               SourceOp = "pDirectionalForce1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 593.874, 20.3024 } },
      },
      pEmitter1 = pEmitter {
         ID = 2,
         EnabledRegion = TimeRegion { { Start = 0, End = 707.9999 } },
         Inputs = {
            Number = Input {
               SourceOp = "pEmitter1Number",
               Source = "Value",
            },
            PositionVariance = Input { Value = 0.0319, },
            VelocityControls = Input { Value = 1, },
            RotationControls = Input { Value = 1, },
            SpinControls = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStyleBitmap" }, },
            ["ParticleStyleBitmap.Animate"] = Input { Value = 2, },
            ["ParticleStyleBitmap.DropToolsHere"] = Input {
               SourceOp = "TimeMachine1",
               Source = "Output",
            },
            ["SphereRgn.Size"] = Input { Value = 0, },
            ["SphereRgn.Translation"] = Input { Value = -1, },
            ["SphereRgn.Rotate.X"] = Input { Value = -1, },
            ["ParticleStyle.ColorControls"] = Input { Value = 1, },
            ["ParticleStyle.ColorVariance"] = Input { Value = 1, },
            ["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 0.88, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeOverLife",
               Source = "Value",
            },
            ["ParticleStyle.FadeControls"] = Input { Value = 1, },
            ["ParticleStyle.FadeOut"] = Input { Value = 0.522, },
            ["ParticleStyle.MergeControls"] = Input { Value = 1, },
            ["ParticleStyle.SubtractiveAdditive"] = Input { Value = 0.685, },
            ["ParticleStyle.BlurControls"] = Input { Value = 1, },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BlurOverLife2D",
               Source = "Value",
            }
         }
Offline

JayPee

  • Posts: 84
  • Joined: Wed Nov 08, 2023 4:14 am
  • Real Name: John Philip

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostTue May 13, 2025 3:15 am

Merging the TimeStretcher over a transparent background before the pEmitter will fix the issue.
TimeStretcher works in an 'infinite' time, as any output frame could potentially be any input frame, so it doesn't export any global time range as such, so pEmitter won't know what 'time' it is receiving.
Merging it over a background will use the BG's Global In-Out to define the time range.

You could just use the TimeSpeed node in place of the TimeStretcher to do the same job, and that will work with pEmitter.
Windows 11 // i9-13900K // RTX 4080 // 128GB DDR5 RAM // 2TB WD M.2 NVMe // ASRock Z790 // TH420 AIO Liquid CPU Cooler
Mac Ultra Studio M1 64GB
Offline

kilburnflyer

  • Posts: 5
  • Joined: Thu May 01, 2025 10:46 pm
  • Real Name: Leon Mills

Re: Timestretch -> pEmitter (Bitmap) = No Particle

PostTue May 13, 2025 8:01 am

JayPee wrote:Merging the TimeStretcher over a transparent background before the pEmitter will fix the issue.


It is fixed - did it with TimeMacheine - this has "normalised" it and now pEmitter is picking up the changes on every frame - Thanks JayPee.
Attachments
fixed.jpg
fixed.jpg (18.64 KiB) Viewed 925 times

Return to Fusion

Who is online

Users browsing this forum: No registered users and 37 guests