In light of the Coronavirus crisis, please help make sure nothing stands in the way of social distancing in the VFX industry.

This petition asks the MPAA to act accordingly:


Sign the petition on Change.org

Be safe, everyone.

Complex particle effect?

Moderator: SecondMan

User avatar
Shem Namo
Fusionista
Posts: 369
Joined: Sun Oct 06, 2019 9:15 pm
Location: North Israel
Real name: David Kohen
Been thanked: 6 times

Complex particle effect?

#1

Post by Shem Namo » Wed Jan 08, 2020 11:41 am

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

VFXTobias
Fusioneer
Posts: 220
Joined: Fri Feb 20, 2015 5:58 pm
Been thanked: 1 time
Contact:

Re: Complex particle effect?

#2

Post by VFXTobias » Fri Jan 10, 2020 8:30 am

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

VFXTobias
Fusioneer
Posts: 220
Joined: Fri Feb 20, 2015 5:58 pm
Been thanked: 1 time
Contact:

Re: Complex particle effect?

#3

Post by VFXTobias » Fri Jan 10, 2020 4:57 pm

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
You do not have the required permissions to view the files attached to this post.
Last edited by VFXTobias on Fri Jan 10, 2020 5:01 pm, edited 1 time in total.

User avatar
Midgardsormr
Fusionator
Posts: 1617
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 11
Location: Los Angeles, CA, USA
Been thanked: 52 times
Contact:

Re: Complex particle effect?

#4

Post by Midgardsormr » Fri Jan 10, 2020 4:59 pm

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]

VFXTobias
Fusioneer
Posts: 220
Joined: Fri Feb 20, 2015 5:58 pm
Been thanked: 1 time
Contact:

Re: Complex particle effect?

#5

Post by VFXTobias » Fri Jan 10, 2020 5:02 pm

Sorry Bryan. I just deleted it and uploaded the file instead.

Cheers,

Tobias

User avatar
Shem Namo
Fusionista
Posts: 369
Joined: Sun Oct 06, 2019 9:15 pm
Location: North Israel
Real name: David Kohen
Been thanked: 6 times

Re: Complex particle effect?

#6

Post by Shem Namo » 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.

User avatar
Midgardsormr
Fusionator
Posts: 1617
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 11
Location: Los Angeles, CA, USA
Been thanked: 52 times
Contact:

Re: Complex particle effect?

#7

Post by Midgardsormr » Sat Jan 11, 2020 10:45 am

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.

VFXTobias
Fusioneer
Posts: 220
Joined: Fri Feb 20, 2015 5:58 pm
Been thanked: 1 time
Contact:

Re: Complex particle effect?

#8

Post by VFXTobias » Sat Jan 11, 2020 11:07 am

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

User avatar
Shem Namo
Fusionista
Posts: 369
Joined: Sun Oct 06, 2019 9:15 pm
Location: North Israel
Real name: David Kohen
Been thanked: 6 times

Re: Complex particle effect?

#9

Post by Shem Namo » Sat Jan 11, 2020 1:06 pm

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"
}

User avatar
SirEdric
Fusionator
Posts: 2276
Joined: Tue Aug 05, 2014 10:04 am
Answers: 9
Real name: Eric Westphal
Been thanked: 32 times
Contact:

Re: Complex particle effect?

#10

Post by SirEdric » 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?

User avatar
Millolab
Fusionista
Posts: 375
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 37 times
Contact:

Re: Complex particle effect?

#11

Post by Millolab » Sat Jan 11, 2020 2:24 pm

@SirEdric So true!

VFXTobias
Fusioneer
Posts: 220
Joined: Fri Feb 20, 2015 5:58 pm
Been thanked: 1 time
Contact:

Re: Complex particle effect?

#12

Post by VFXTobias » Sat Jan 11, 2020 3:06 pm

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.

User avatar
SirEdric
Fusionator
Posts: 2276
Joined: Tue Aug 05, 2014 10:04 am
Answers: 9
Real name: Eric Westphal
Been thanked: 32 times
Contact:

Re: Complex particle effect?

#13

Post by SirEdric » Sun Jan 12, 2020 2:20 am

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...:-)

User avatar
andromeda_girl
Fusionista
Posts: 490
Joined: Sun Feb 21, 2016 6:25 am
Been thanked: 4 times

Re: Complex particle effect?

#14

Post by andromeda_girl » Sat Jan 18, 2020 9:34 am

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.

User avatar
Shem Namo
Fusionista
Posts: 369
Joined: Sun Oct 06, 2019 9:15 pm
Location: North Israel
Real name: David Kohen
Been thanked: 6 times

Re: Complex particle effect?

#15

Post by Shem Namo » Sat Jan 18, 2020 9:58 am

@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