Page 1 of 1

Complex particle effect?

Posted: Wed Jan 08, 2020 11:41 am
by Shem Namo
Hello Everyone, How is it going?
I''m sorry for using this same video as reference,
but is it possible to make complex particle effects
similar to these using Fusion's particle system?

I really like how these particles look and was wondering if it was possible to maybe replicate
them in Fusion.

I'd really appreciate the advice.

Thank you,
David Kohen

Re: Complex particle effect?

Posted: Fri Jan 10, 2020 8:30 am
by VFXTobias
Hi David,

Fusion's particle system is actually robust enough to achieve similar effects for sure. While the reference video speaks a great deal to the post processing of rendered video clips of particle templates which does go a long way, there are some basic steps to achieve this look in Fusion to generate particles yourself.

The key elements will be the use of pEmitter and pSpawn combos in Fusion along with multiple stages of pTurbulance to mix various frequencies and speeds of noise disturbance. You'll need to utilize pKill in various fields to dial in the look you're going for. Lastly, vector motion blur will give you the best result but will come at a cost. If you're looking for high quality results, you might build a handful of variations of the system and render out simple black and white alphas to separate savers that you can then use as footage in new comps. Applying all of the relevant post processing you'd like to effect color, etc.

Typical setup may look like this:

pEmitter -> pSpawn -> pTurbulance (variant1) ->pTurbulance(variant2) -> pKill ->pRender -> Renderer3D

Hope this gets you going in the direction you're looking for. As an added tip, experiment with your pEmitter source by using specific shape sources including those custom made by you.

-Cheers,

Tobias

Re: Complex particle effect?

Posted: Fri Jan 10, 2020 4:57 pm
by VFXTobias
David,

I had a moment to mock up something really quick to show you an example. This is not exactly the same but it gets you started in the direction you need to go for this kind of effect. Getting to the goal line will involve higher particle counts, some art direction, and some post processing.
Particles from BMP.comp

Re: Complex particle effect?

Posted: Fri Jan 10, 2020 4:59 pm
by Midgardsormr
Tobias, if you put that between Code tags, it will go into a box with a Select All button that makes it easier to manage:

[code]
paste nodes here
[/code]

Re: Complex particle effect?

Posted: Fri Jan 10, 2020 5:02 pm
by VFXTobias
Sorry Bryan. I just deleted it and uploaded the file instead.

Cheers,

Tobias

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 8:51 am
by Shem Namo
Thanks @VFXTobias , this setup is very impressive and I really appreciate that you took your time to make it!


Thank you,
David Kohen.

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 10:45 am
by Midgardsormr
It wasn't a rebuke, but a helpful suggestion!

Like so:

Code: Select all

{
	Tools = ordered() {
		Source = Note {
			NameSet = true,
			Inputs = {
				Comments = Input { Value = "This creates the particle source from a custom animated bitmap.\n", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 165, -115.5 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 77.3 }
			},
			Colors = { TileColor = { R = 0.0823529411764706, G = 0.384313725490196, B = 0.517647058823529 }, }
		},
		Emit = Note {
			NameSet = true,
			Inputs = {
				Comments = Input { Value = "Emit primary and secondary stream particles from our source.\n", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 605, -115.5 },
				Flags = {
					Expanded = true
				},
				Size = { 214.385, 105.761 }
			},
			Colors = { TileColor = { R = 0, G = 0.596078431372549, B = 0.6 }, }
		},
		FastNoise1 = FastNoise {
			Inputs = {
				GlobalOut = Input { Value = 240, },
				Width = Input { Value = 500, },
				Height = Input { Value = 500, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				XScale = Input { Value = 3.76, },
				Seethe = Input { Value = 0.1, },
				SeetheRate = Input { Value = 0.1, },
				Discontinuous = Input { Value = 1, },
			},
			ViewInfo = OperatorInfo { Pos = { 330, 16.5 } },
		},
		Forces = Note {
			NameSet = true,
			Inputs = {
				Comments = Input { Value = "Apply forces to specific sets of particles as well as kill some we don't want.\n", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 935, -115.5 },
				Flags = {
					Expanded = true
				},
				Size = { 310.551, 110.004 }
			},
			Colors = { TileColor = { R = 0.886274509803922, G = 0.662745098039216, B = 0.109803921568627 }, }
		},
		Ellipse1 = EllipseMask {
			Inputs = {
				BorderWidth = Input { Value = 0.025, },
				Solid = Input { Value = 0, },
				MaskWidth = Input { Value = 1920, },
				MaskHeight = Input { Value = 1080, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 165, 49.5 } },
		},
		Displace1 = Displace {
			Inputs = {
				RefractionStrength = Input { Value = 0.479, },
				Input = Input {
					SourceOp = "Background1",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "FastNoise1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 330, 82.5 } },
		},
		pKill1 = pKill {
			ID = 45,
			Inputs = {
				["BezierRgn.Polyline"] = Input {
					Value = Polyline {
					},
				},
				Input = Input {
					SourceOp = "pTurbulence2",
					Source = "Output",
				},
				RegionMode = Input { Value = FuID { "Inside" }, },
				Region = Input { Value = FuID { "SphereRgn" }, },
				["SphereRgn.Size"] = Input { Value = 0.5, },
			},
			ViewInfo = OperatorInfo { Pos = { 1155, 82.5 } },
		},
		Background1 = Background {
			Inputs = {
				EffectMask = Input {
					SourceOp = "Ellipse1",
					Source = "Mask",
				},
				GlobalOut = Input { Value = 240, },
				Width = Input { Value = 500, },
				Height = Input { Value = 500, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				TopLeftRed = Input { Value = 1, },
				TopLeftGreen = Input { Value = 1, },
				TopLeftBlue = Input { Value = 1, },
			},
			ViewInfo = OperatorInfo { Pos = { 165, 82.5 } },
		},
		pSpawn2 = pSpawn {
			ID = 34,
			Inputs = {
				Lifespan = Input { Value = 12, },
				VelocityControls = Input { Value = 1, },
				VelocityTransfer = Input { Value = 0, },
				NewSet2 = Input { Value = 1, },
				Input = Input {
					SourceOp = "pEmitter2",
					Source = "Output",
				},
				Probability = Input { Value = 0.5, },
				StartAge = Input { Value = 0.75, },
				["ParticleStyle.ColorControls"] = Input { Value = 1, },
				["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
				["ParticleStyle.ColorOverLife"] = Input {
					Value = Gradient {
						Colors = {
							[0] = { 0, 1, 0.860568564599457, 1 },
							[1] = { 1, 0.0485139637694626, 0, 1 }
						}
					},
				},
				["ParticleStyle.SizeOverLife"] = Input {
					SourceOp = "pSpawn2SizeoverLife",
					Source = "Value",
				},
				["ParticleStyle.FadeControls"] = Input { Value = 1, },
				["ParticleStyle.FadeIn"] = Input { Value = 0.25, },
				["ParticleStyle.FadeOut"] = Input { Value = 0.8, },
				["ParticleStyle.BlurOverLife"] = Input {
					SourceOp = "pSpawn2BluroverLife2D",
					Source = "Value",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 715, 82.5 } },
		},
		pSpawn2SizeoverLife = 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 },
		},
		pSpawn2BluroverLife2D = 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 },
		},
		pEmitter2 = pEmitter {
			ID = 31,
			Inputs = {
				Number = Input { Value = 500, },
				VelocityControls = Input { Value = 1, },
				Set1 = Input { Value = 1, },
				Region = Input { Value = FuID { "BitmapRgn" }, },
				["BitmapRgn.Bitmap"] = Input {
					SourceOp = "Displace1",
					Source = "Output",
				},
				["BitmapRgn.Channel"] = Input { Value = 4, },
				["ParticleStyle.ColorControls"] = Input { Value = 1, },
				["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
				["ParticleStyle.ColorOverLife"] = Input {
					Value = Gradient {
						Colors = {
							[0] = { 1, 0.422962397689153, 0, 1 },
							[1] = { 0, 0.470212447972254, 1, 1 }
						}
					},
				},
				["ParticleStyle.SizeOverLife"] = Input {
					SourceOp = "pEmitter2SizeoverLife",
					Source = "Value",
				},
				["ParticleStyle.FadeControls"] = Input { Value = 1, },
				["ParticleStyle.FadeIn"] = Input { Value = 0.25, },
				["ParticleStyle.FadeOut"] = Input { Value = 0.9, },
				["ParticleStyle.BlurOverLife"] = Input {
					SourceOp = "pEmitter2BluroverLife2D",
					Source = "Value",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 605, 82.5 } },
		},
		pEmitter2SizeoverLife = 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 },
		},
		pEmitter2BluroverLife2D = 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 },
		},
		pPointForce1 = pPointForce {
			ID = 25,
			Inputs = {
				Strength = Input { Value = -1, },
				Power = Input { Value = 1, },
				Input = Input {
					SourceOp = "pSpawn2",
					Source = "Output",
				},
				Region = Input { Value = FuID { "SphereRgn" }, },
				["SphereRgn.Size"] = Input { Value = 1.25, },
				SetMode = Input { Value = FuID { "Affect" }, },
				Set1 = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 935, 82.5 } },
		},
		pTurbulence2 = pTurbulence {
			ID = 37,
			Inputs = {
				XStrength = Input { Value = 0.25, },
				YStrength = Input { Value = 0.25, },
				ZStrength = Input { Value = 0.25, },
				StrengthOverLife = Input { Value = 1, },
				StrengthOverLifeLUT = Input {
					SourceOp = "pTurbulence2StrengthoverLifeLUT",
					Source = "Value",
				},
				Input = Input {
					SourceOp = "pPointForce1",
					Source = "Output",
				},
				SetMode = Input { Value = FuID { "DontAffect" }, },
				Set1 = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 1045, 82.5 } },
		},
		pTurbulence2StrengthoverLifeLUT = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.228148148148148, 0.211630261825546 }, Flags = { Linear = true } },
					[0.684444444444444] = { 0.919354838709677, LH = { 0.101797043680452, 0.796832055547519 } }
				}
			},
			SplineColor = { Red = 192, Green = 128, Blue = 64 },
		},
		Render_ = Note {
			NameSet = true,
			Inputs = {
				Comments = Input { Value = "Render our particles to a 2D view for post processing.\n", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 1375, -115.5 },
				Flags = {
					Expanded = true
				},
				Size = { 310.551, 110.004 }
			},
			Colors = { TileColor = { R = 0.372549019607843, G = 0.6, B = 0.125490196078431 }, }
		},
		Renderer3D1 = Renderer3D {
			CtrlWZoom = false,
			CustomData = {
				ToolVersion = 2,
			},
			Inputs = {
				Quality = Input { Value = 6, },
				GlobalOut = Input { Value = 240, },
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				SceneInput = Input {
					SourceOp = "pRender1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1540, 82.5 } },
		},
		pRender1 = pRender {
			Inputs = {
				IntegrationMethod = Input { Value = FuID { "RK4" }, },
				_MotionBlurWarning = Input { Disabled = true, },
				Quality = Input { Value = 6, },
				GlobalOut = Input { Value = 240, },
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				OutputMode = Input { Disabled = true, },
				SubFrameCalculationAccuracy = Input { Value = 2, },
				KillParticlesThatLeaveTheView = Input { Value = 1, },
				["MaterialID.MaterialID"] = Input { Value = 1, },
				["ObjectID.ObjectID"] = Input { Value = 1, },
				Input = Input {
					SourceOp = "pKill1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1430, 82.5 } },
		},
		OpticalFlow1 = Dimension.OpticalFlow {
			Inputs = {
				Input = Input {
					SourceOp = "Renderer3D1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1870, 82.5 } },
		},
		Post = Note {
			NameSet = true,
			Inputs = {
				Comments = Input { Value = "Optional post processing.  Warning.  Optical flow vector motion blur is costly.  Don't view this until you're happy with your simulations.", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 1870, -115.5 },
				Flags = {
					Expanded = true
				},
				Size = { 310.551, 110.004 }
			},
			Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, }
		},
		VectorMotionBlur1 = VectorMotionBlur {
			Inputs = {
				Input = Input {
					SourceOp = "OpticalFlow1",
					Source = "Output",
				},
				XScale = Input { Value = 0.1, },
			},
			ViewInfo = OperatorInfo { Pos = { 1980, 82.5 } },
		},
		SoftGlow1 = SoftGlow {
			Inputs = {
				Filter = Input { Value = FuID { "Gaussian" }, },
				Gain = Input { Value = 1, },
				XGlowSize = Input { Value = 2, },
				Input = Input {
					SourceOp = "VectorMotionBlur1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2090, 82.5 } },
		}
	}
}
See? One click to select it all, and it gets its own scroll box so the post isn't a mile long.

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 11:07 am
by VFXTobias
Shem Namo wrote:
Sat Jan 11, 2020 8:51 am
Thanks @VFXTobias , this setup is very impressive and I really appreciate that you took your time to make it!


Thank you,
David Kohen.
No problem at all. I would love to see what you eventually come up with from here.

Cheers,

Tobias

Added in 1 minute 45 seconds:
Midgardsormr wrote:
Sat Jan 11, 2020 10:45 am
It wasn't a rebuke, but a helpful suggestion!
Absolutely. I didn't take at all in a negative way. I appreciate the suggestion for sure. :)

Cheers,

Tobias

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 1:06 pm
by Shem Namo
Thanks, @VFXTobias and @Midgardsormr !
Here's the progress so far using your setup

Thank You,
David Kohen.

Code: Select all

{
	Tools = ordered() {
		Ellipse1 = EllipseMask {
			Inputs = {
				BorderWidth = Input { Value = 0.025, },
				Solid = Input { Value = 0, },
				MaskWidth = Input { Value = 1920, },
				MaskHeight = Input { Value = 1080, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 643.5 } },
		},
		Background1 = Background {
			Inputs = {
				Width = Input { Value = 500, },
				Height = Input { Value = 500, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				TopLeftRed = Input { Value = 1, },
				TopLeftGreen = Input { Value = 1, },
				TopLeftBlue = Input { Value = 1, },
				EffectMask = Input {
					SourceOp = "Ellipse1",
					Source = "Mask",
				}
			},
			ViewInfo = OperatorInfo { Pos = { 715, 676.5 } },
		},
		FastNoise1 = FastNoise {
			Inputs = {
				Width = Input { Value = 500, },
				Height = Input { Value = 500, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Discontinuous = Input { Value = 1, },
				XScale = Input { Value = 3.76, },
				Seethe = Input { Value = 0.1, },
				SeetheRate = Input { Value = 0.1, },
			},
			ViewInfo = OperatorInfo { Pos = { 825, 643.5 } },
		},
		Displace1 = Displace {
			Inputs = {
				RefractionStrength = Input { Value = 0.479, },
				Input = Input {
					SourceOp = "Background1",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "FastNoise1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 825, 676.5 } },
		},
		ChannelBooleans1 = ChannelBoolean {
			Inputs = {
				Operation = Input { Value = 12, },
				Background = Input {
					SourceOp = "Displace1",
					Source = "Output",
				},
				EffectMask = Input {
					SourceOp = "Rectangle1",
					Source = "Mask",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 825, 709.5 } },
		},
		pEmitter2_1 = pEmitter {
			ID = 31,
			Inputs = {
				Number = Input { Value = 1000, },
				Lifespan = Input { Value = 60, },
				LifespanVariance = Input { Value = 8.1, },
				PositionVariance = Input { Value = 0.0603, },
				TemporalDistribution = Input { Value = 2, },
				VelocityControls = Input { Value = 1, },
				Set1 = Input { Value = 1, },
				Region = Input { Value = FuID { "BitmapRgn" }, },
				["ParticleStyle.ColorControls"] = Input { Value = 1, },
				["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
				["ParticleStyle.ColorOverLife"] = Input {
					Value = Gradient {
						Colors = {
							[0] = { 0.168627450980392, 0.0235294117647059, 1, 1 },
							[1] = { 0, 0.470212447972254, 1, 1 }
						}
					},
				},
				["ParticleStyle.SizeOverLife"] = Input {
					SourceOp = "pEmitter2SizeoverLife_1",
					Source = "Value",
				},
				["ParticleStyle.FadeControls"] = Input { Value = 1, },
				["ParticleStyle.FadeIn"] = Input { Value = 0.25, },
				["ParticleStyle.FadeOut"] = Input { Value = 0.9, },
				["ParticleStyle.BlurOverLife"] = Input {
					SourceOp = "pEmitter2BluroverLife2D_1",
					Source = "Value",
				},
				["BitmapRgn.Bitmap"] = Input {
					SourceOp = "ChannelBooleans1",
					Source = "Output",
				},
				["BitmapRgn.Channel"] = Input { Value = 4, },
			},
			ViewInfo = OperatorInfo { Pos = { 935, 709.5 } },
		},
		pEmitter2SizeoverLife_1 = 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 },
		},
		pEmitter2BluroverLife2D_1 = 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 },
		},
		pDirectionalForce1 = pDirectionalForce {
			ID = 42,
			Inputs = {
				Strength = Input { Value = 0.06, },
				Direction = Input { Value = 0, },
				Input = Input {
					SourceOp = "pEmitter2_1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 935, 742.5 } },
		},
		Rectangle1 = RectangleMask {
			Inputs = {
				MaskWidth = Input { Value = 3840, },
				MaskHeight = Input { Value = 2160, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
				Center = Input { Value = { 0.622, 0.5 }, },
				Width = Input { Value = 0.56, },
				Height = Input { Value = 0.756, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 709.5 } },
		},
		DirectionalLight1 = LightDirectional {
			Inputs = {
				["Transform3DOp.Translate.Z"] = Input { Value = -0.296184648826008, },
				["Transform3DOp.Rotate.Y"] = Input { Value = -102.901325667743, },
			},
			ViewInfo = OperatorInfo { Pos = { 1045, 775.5 } },
		},
		Transform1 = Transform {
			Inputs = {
				Center = Input { Value = { 0.239580265095729, 0.5 }, },
				Size = Input { Value = 0.564, },
				Input = Input {
					SourceOp = "Duplicate2",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1155, 742.5 } },
		},
		Duplicate2 = Fuse.Duplicate {
			Inputs = {
				Copies = Input { Value = 3, },
				TimeOffset = Input { Value = 0.641, },
				RandomSeed = Input { Value = 26024, },
				Background = Input {
					SourceOp = "Renderer3D2",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1155, 775.5 } },
		},
		pTurbulence2_1 = pTurbulence {
			ID = 40,
			Inputs = {
				XStrength = Input { Value = 0.444, },
				YStrength = Input { Value = 0.432, },
				ZStrength = Input { Value = 0.427, },
				StrengthOverLife = Input { Value = 1, },
				StrengthOverLifeLUT = Input {
					SourceOp = "pTurbulence2_1StrengthoverLifeLUT",
					Source = "Value",
				},
				Input = Input {
					SourceOp = "pDirectionalForce1",
					Source = "Output",
				},
				SetMode = Input { Value = FuID { "DontAffect" }, },
				Set1 = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 935, 775.5 } },
		},
		pTurbulence2_1StrengthoverLifeLUT = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.228148148148148, 0.211630261825546 }, Flags = { Linear = true } },
					[0.684444444444444] = { 0.919354838709677, LH = { 0.101797043680452, 0.796832055547519 } }
				}
			},
			SplineColor = { Red = 192, Green = 128, Blue = 64 },
			NameSet = true,
		},
		Merge3D2 = Merge3D {
			Inputs = {
				SceneInput1 = Input {
					SourceOp = "pRender1_1",
					Source = "Output",
				},
				SceneInput2 = Input {
					SourceOp = "Camera3D2",
					Source = "Output",
				},
				SceneInput3 = Input {
					SourceOp = "DirectionalLight1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1045, 808.5 } },
		},
		Renderer3D2 = Renderer3D {
			CustomData = {
				ToolVersion = 2,
			},
			Inputs = {
				Width = Input { Value = 3840, },
				Height = Input { Value = 2160, },
				Depth = Input { Value = 4, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				SceneInput = Input {
					SourceOp = "Merge3D2",
					Source = "Output",
				},
				["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
			},
			ViewInfo = OperatorInfo { Pos = { 1155, 808.5 } },
		},
		Blur1 = Blur {
			Inputs = {
				XBlurSize = Input { Value = 7.3, },
				Input = Input {
					SourceOp = "Transform1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1265, 742.5 } },
		},
		pRender1_1 = pRender {
			Inputs = {
				_MotionBlurWarning = Input { Disabled = true, },
				Quality = Input { Value = 6, },
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				OutputMode = Input { Disabled = true, },
				IntegrationMethod = Input { Value = FuID { "RK4" }, },
				SubFrameCalculationAccuracy = Input { Value = 2, },
				KillParticlesThatLeaveTheView = Input { Value = 1, },
				["MaterialID.MaterialID"] = Input { Value = 1, },
				["ObjectID.ObjectID"] = Input { Value = 1, },
				Input = Input {
					SourceOp = "pTurbulence2_1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 935, 808.5 } },
		},
		Merge1 = Merge {
			Inputs = {
				Background = Input {
					SourceOp = "Transform2",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "Sharpen1",
					Source = "Output",
				},
				PerformDepthMerge = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 1485, 709.5 } },
		},
		Transform2 = Transform {
			Inputs = {
				FlipHoriz = Input { Value = 1, },
				Input = Input {
					SourceOp = "Sharpen1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1485, 775.5 } },
		},
		Sharpen1 = Sharpen {
			Inputs = {
				XAmount = Input { Value = 8.1, },
				Input = Input {
					SourceOp = "SoftGlow1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1375, 775.5 } },
		},
		SoftGlow1 = SoftGlow {
			Inputs = {
				Gain = Input { Value = 5, },
				Input = Input {
					SourceOp = "Blur1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1375, 742.5 } },
		},
		Camera3D2 = Camera3D {
			Inputs = {
				["Transform3DOp.Translate.X"] = Input { Value = 0.347077016083893, },
				["Transform3DOp.Translate.Y"] = Input { Value = -0.000154488693212996, },
				["Transform3DOp.Translate.Z"] = Input { Value = -0.997779041604617, },
				["Transform3DOp.Rotate.X"] = Input { Value = -0.199996203184128, },
				["Transform3DOp.Rotate.Y"] = Input { Value = 541.999938964844, },
				FLength = Input { Value = 18.2123442718302, },
				["Stereo.Mode"] = Input { Value = FuID { "Mono" }, },
				FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
				["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
				["MtlStdInputs.MaterialID"] = Input { Value = 3, },
			},
			ViewInfo = OperatorInfo { Pos = { 1045, 841.5 } },
		},
		XfChromaFuse1 = Fuse.XfChroma {
			CtrlWZoom = false,
			Inputs = {
				Center = Input { Value = { 0.5, 0.481481481481481 }, },
				Size = Input { Value = 0.675, },
				Aspect = Input { Value = 0.8562, },
				XSize = Input { Value = 0.675, },
				YSize = Input { Value = 0.577935, },
				Gradient = Input {
					Value = Gradient {
						Colors = {
							[0] = { 1, 0, 0, 1 },
							[0.5] = { 0, 1, 0, 1 },
							[1] = { 0, 0, 1, 1 }
						}
					},
				},
				NewTool = Input { Value = 0, },
				Input = Input {
					SourceOp = "Merge1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1595, 709.5 } },
			Version = 160
		}
	},
	ActiveTool = "XfChromaFuse1"
}

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 1:30 pm
by SirEdric
Hey @VFXTobias.
May I ask (just out of curiosity) why you would use OFlow to generate motion vectors,
when you could utilize the Render3D's vector output directly?

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 2:24 pm
by Millolab
@SirEdric So true!

Re: Complex particle effect?

Posted: Sat Jan 11, 2020 3:06 pm
by VFXTobias
SirEdric wrote:
Sat Jan 11, 2020 1:30 pm
Hey @VFXTobias.
May I ask (just out of curiosity) why you would use OFlow to generate motion vectors,
when you could utilize the Render3D's vector output directly?

Truth be told, I just slapped it together quickly as an example. Had forgotten about that option. Good tip for sure. :)

Cheers,

Tobias

Added in 44 minutes 14 seconds:
SirEdric wrote:
Sat Jan 11, 2020 1:30 pm
Hey @VFXTobias.
May I ask (just out of curiosity) why you would use OFlow to generate motion vectors,
when you could utilize the Render3D's vector output directly?
I've done a comparison on my end. In my humble opinion, the OFlow method looks considerably better in a final result considering the added benefits of tweaking options in the OFlow settings that could be helpful in this type of situation. The Renderer3D allows for a simple vector pass for both forward and back vectors which is the same thing OFlow does of course but without any further control to the user. The OFlow node seems to add some slight overhead as it appears to process transparent pixels coming from the Renderer3D for a reason I'm not sure of. I'm also curious why there's not a significant gain in performance given the ability to use OpenCl in the OFlow node. That should be opening up access to multi-thread processing. However I found, on my end, virtually no performance difference between the two methods.

Re: Complex particle effect?

Posted: Sun Jan 12, 2020 2:20 am
by SirEdric
VFXTobias wrote:
Sat Jan 11, 2020 3:50 pm
I've done a comparison on my end
Hi Tobias.
Thanks for elaborating on this one.
Sounds quite interesting. Being lazy as I am, I never thought about adding extra calculations (like oFlow) where the Renderer seems to deliver all I need.
Certainly worth a test on my side as well...:-)

Re: Complex particle effect?

Posted: Sat Jan 18, 2020 9:34 am
by andromeda_girl
fusion can definitely match that, it's just not the sort of thing that anybody can whip up; pfx is a unique skill.
there have been some jaw dropping examples of pfx from fusion on this forum if you look for it ;)
the example that was provided is just a taste of it.
impressive stuff.

Re: Complex particle effect?

Posted: Sat Jan 18, 2020 9:58 am
by Shem Namo
@andromeda_girl Yeah, I know that Fusion has a powerful particle system, but it's just that I thought that to achieve the effect above
you would need some fluid simulation physics or something, but apparently it can be done without it with a little time.

I did make a tutorial recently on how to make some simple particle effects in Fusion, but it's aimed more at Resolvers than Fusioneers
Here's the link is anyone is interested.

Thank you,
David Kohen