Jump to: Board index » General » Fusion

Realistic Fire in Fusion with Particle System.

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

KrunoSmithy

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

Realistic Fire in Fusion with Particle System.

PostFri May 03, 2024 5:08 pm

Hi, guys.

I've been thinking about trying to make fire or smoke with particles in Fusion. I've not used the particle system very much so I figured it would be a good way to learn it. Anyway, for my first attempt I made some smoke coming out of a cigar, but its not good enough, needs more polish. Here is the result.



And than I used the same basic idea but to create realistic fire. That one was much more successful attempt I think. Here is the result.



I'll post a node tree for fire effect if you want to play with with it.

Code: Select all
{
   Tools = ordered() {
      UnsharpMask1 = UnsharpMask {
         Inputs = {
            XSize = Input { Value = 2.48, },
            Threshold = Input { Value = 0.0354, },
            Input = Input {
               SourceOp = "ColorGain1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2963.8, 224.635 } },
      },
      Merge2 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "pRender1_1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "VariBlur1",
               Source = "Output",
            },
            SubtractiveAdditive = Input { Value = 0.819, },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 2352.38, 224.635 } },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            ApplyMode = Input { Value = FuID { "Geometric" }, },
            Gain = Input { Value = 0.4, },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 2564.72, 224.635 } },
      },
      pRender1_1 = pRender {
         Inputs = {
            _MotionBlurWarning = Input { Disabled = true, },
            GlobalOut = Input { Value = 359, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            UseFrameFormatSettings = Input { Value = 1, },
            Depth = Input { Value = 3, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            OutputMode = Input {
               Value = FuID { "TwoD" },
               Disabled = true,
            },
            Blur = Input { Value = 92.9, },
            Glow = Input { Value = 0.118, },
            NewIntegrationMethod = Input { Value = FuID { "RK4" }, },
            KillParticlesThatLeaveTheView = Input { Value = 1, },
            ["MaterialID.MaterialID"] = Input { Value = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Translation = Input { Value = 1, },
            Input = Input {
               SourceOp = "pTurbulence2_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2179.37, 224.635 } },
      },
      ColorGain1 = ColorGain {
         Inputs = {
            ClippingMode = Input { Value = FuID { "Frame" }, },
            UseGPU = Input { Value = 2, },
            GainRed = Input { Value = 0.77, },
            GainGreen = Input { Value = 1.06, },
            GammaRed = Input { Value = 1.06, },
            PreDividePostMultiply = Input { Value = 1, },
            HighRedCyan = Input { Value = 0.57, },
            HighGreenMagenta = Input { Value = 1, },
            HighBlueYellow = Input { Value = 0.1, },
            MidBlueYellow = Input { Value = -0.33, },
            ColorRanges = Input {
               Value = ColorCurves {
                  Curves = {
                     {
                        Points = {
                           { 0.523, 1 },
                           { 0.7138, 0.2 },
                           { 0.8092, 0 },
                           { 1, 0 }
                        }
                     },
                     {
                        Points = {
                           { 0, 0 },
                           { 0.4, 0 },
                           { 0.6, 0.2 },
                           { 1, 1 }
                        }
                     }
                  }
               },
            },
            Input = Input {
               SourceOp = "Merge1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2762.97, 224.635 } },
      },
      pTurbulence2_1 = pTurbulence {
         ID = 539,
         Inputs = {
            XStrength = Input { Value = 0.205, },
            YStrength = Input { Value = 0.15, },
            StrengthOverLife = Input { Value = 1, },
            StrengthOverLifeLUT = Input {
               SourceOp = "pTurbulence2_1StrengthOverLifeLUT",
               Source = "Value",
            },
            Input = Input {
               SourceOp = "pTangentForce1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1993.43, 224.635 } },
      },
      pTurbulence2_1StrengthOverLifeLUT = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0.00518134715025907] = { 0.48581560283688, RH = { 0.554137728291625, -0.086464463558171 }, Flags = { Linear = true } },
               [0.963730569948187] = { 0.124113475177305, LH = { 0.644214162348877, 0.117134449977365 } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      pTangentForce1_1 = pTangentForce {
         ID = 538,
         Inputs = {
            RandomSeed = Input { Value = 25216, },
            ["Translate.X"] = Input { Value = -0.575962498182368, },
            ["Translate.Y"] = Input { Value = -0.201895703588783, },
            Input = Input {
               SourceOp = "pAvoid1_5",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1852.62, 224.635 } },
      },
      pAvoid1_5 = pAvoid {
         ID = 537,
         Inputs = {
            ["RectRgn.Translate.Y"] = Input { Value = 0.0375582087935889, },
            ["LineRgn.Start.Y"] = Input { Value = -0.257709280918345, },
            ["CubeRgn.Translate.Y"] = Input { Value = -0.301561409525185, },
            ["LineRgn.End.Y"] = Input { Value = -0.220036008230453, },
            ["RectRgn.Width"] = Input { Value = 0.228, },
            ["LineRgn.Start.X"] = Input { Value = -0.134868421052632, },
            ["LineRgn.End.X"] = Input { Value = -0.00986842105263158, },
            ["RectRgn.Translate.X"] = Input { Value = -0.269736842105263, },
            ["RectRgn.Height"] = Input { Value = 0.425, },
            ["CubeRgn.Translate.X"] = Input { Value = -0.0043859649122807, },
            RandomSeed = Input { Value = 21998, },
            Input = Input {
               SourceOp = "pAvoid1_4",
               Source = "Output",
            },
            Strength = Input { Value = 0.087, },
            Region = Input { Value = FuID { "SphereRgn" }, },
            ["SphereRgn.Translate.X"] = Input { Value = -0.0556283492044064, },
            ["SphereRgn.Translate.Y"] = Input { Value = -0.27322121245047, },
         },
         ViewInfo = OperatorInfo { Pos = { 1718.24, 224.635 } },
      },
      pAvoid1_4 = pAvoid {
         ID = 536,
         Inputs = {
            ["RectRgn.Translate.Y"] = Input { Value = 0.0375582087935889, },
            ["RectRgn.Width"] = Input { Value = 0.228, },
            ["RectRgn.Translate.X"] = Input { Value = -0.269736842105263, },
            ["RectRgn.Height"] = Input { Value = 0.425, },
            RandomSeed = Input { Value = 13471, },
            Input = Input {
               SourceOp = "pAvoid1_3",
               Source = "Output",
            },
            Distance = Input { Value = 0.205, },
            Strength = Input { Value = 0.48, },
            Region = Input { Value = FuID { "SphereRgn" }, },
            ["SphereRgn.Size"] = Input { Value = 0.2, },
            ["SphereRgn.Translate.X"] = Input { Value = 0.0989942880456958, },
            ["SphereRgn.Translate.Y"] = Input { Value = -0.226781309675602, },
         },
         ViewInfo = OperatorInfo { Pos = { 1584.04, 224.635 } },
      },
      pAvoid1_3 = pAvoid {
         ID = 535,
         Inputs = {
            ["RectRgn.Translate.Y"] = Input { Value = 0.0375582087935889, },
            ["RectRgn.Width"] = Input { Value = 0.228, },
            ["RectRgn.Translate.X"] = Input { Value = -0.269736842105263, },
            ["RectRgn.Height"] = Input { Value = 0.425, },
            RandomSeed = Input { Value = 13471, },
            Input = Input {
               SourceOp = "pTurbulence1_1",
               Source = "Output",
            },
            Distance = Input { Value = 0.205, },
            Strength = Input { Value = 0.48, },
            Region = Input { Value = FuID { "SphereRgn" }, },
            ["SphereRgn.Size"] = Input { Value = 0.307, },
            ["SphereRgn.Translate.X"] = Input { Value = -0.236521827825377, },
            ["SphereRgn.Translate.Y"] = Input { Value = -0.139780325406455, },
         },
         ViewInfo = OperatorInfo { Pos = { 1451.35, 224.635 } },
      },
      pTurbulence1_1 = pTurbulence {
         ID = 533,
         Inputs = {
            StrengthOverLife = Input { Value = 1, },
            StrengthOverLifeLUT = Input {
               SourceOp = "pTurbulence1_1StrengthOverLifeLUT",
               Source = "Value",
            },
            Input = Input {
               SourceOp = "pDirectionalForce1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1318.95, 224.635 } },
      },
      pTurbulence1_1StrengthOverLifeLUT = 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_1 = pDirectionalForce {
         ID = 532,
         Inputs = {
            Strength = Input { Value = 0.02, },
            Direction = Input { Value = 90, },
            Input = Input {
               SourceOp = "pEmitter1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1190.4, 224.635 } },
      },
      pAvoid1 = pAvoid {
         ID = 13,
         Inputs = {
            ["RectRgn.Translate.Y"] = Input { Value = 0.0375582087935889, },
            ["RectRgn.Width"] = Input { Value = 0.228, },
            ["RectRgn.Translate.X"] = Input { Value = -0.269736842105263, },
            ["RectRgn.Height"] = Input { Value = 0.425, },
            RandomSeed = Input { Value = 13471, },
            Input = Input {
               SourceOp = "pTurbulence1",
               Source = "Output",
            },
            Distance = Input { Value = 0.205, },
            Strength = Input { Value = 0.48, },
            Region = Input { Value = FuID { "SphereRgn" }, },
            ["SphereRgn.Size"] = Input { Value = 0.307, },
            ["SphereRgn.Translate.X"] = Input { Value = -0.236521827825377, },
            ["SphereRgn.Translate.Y"] = Input { Value = -0.139780325406455, },
         },
         ViewInfo = OperatorInfo { Pos = { 1492.48, 97.5233 } },
      },
      pAvoid1_1 = pAvoid {
         ID = 14,
         Inputs = {
            ["RectRgn.Translate.Y"] = Input { Value = 0.0375582087935889, },
            ["RectRgn.Width"] = Input { Value = 0.228, },
            ["RectRgn.Translate.X"] = Input { Value = -0.269736842105263, },
            ["RectRgn.Height"] = Input { Value = 0.425, },
            RandomSeed = Input { Value = 13471, },
            Input = Input {
               SourceOp = "pAvoid1",
               Source = "Output",
            },
            Distance = Input { Value = 0.205, },
            Strength = Input { Value = 0.48, },
            Region = Input { Value = FuID { "SphereRgn" }, },
            ["SphereRgn.Size"] = Input { Value = 0.2, },
            ["SphereRgn.Translate.X"] = Input { Value = 0.115273357813137, },
            ["SphereRgn.Translate.Y"] = Input { Value = -0.147621850389294, },
         },
         ViewInfo = OperatorInfo { Pos = { 1625.17, 97.5233 } },
      },
      pTurbulence2 = pTurbulence {
         ID = 23,
         Inputs = {
            XStrength = Input { Value = 0.378, },
            YStrength = Input { Value = 0.15, },
            StrengthOverLife = Input { Value = 1, },
            StrengthOverLifeLUT = Input {
               SourceOp = "pTurbulence2StrengthOverLifeLUT",
               Source = "Value",
            },
            Input = Input {
               SourceOp = "pTangentForce1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2034.55, 97.5233 } },
      },
      pTurbulence2StrengthOverLifeLUT = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.114588357563728, 0.447183872534131 }, Flags = { Linear = true } },
               [0.292955555727964] = { 0.207282533263891, LH = { 0.185743364742305, 0.235827545905047 }, RH = { 0.475747097872389, 0.158614682807626 } },
               [1] = { 0.0319148936170212, LH = { 0.695286435552227, 0.662257293168572 } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      pAvoid1_2 = pAvoid {
         ID = 247,
         Inputs = {
            ["LineRgn.Start.Y"] = Input { Value = -0.257709280918345, },
            ["LineRgn.End.X"] = Input { Value = -0.00986842105263158, },
            ["RectRgn.Translate.X"] = Input { Value = -0.269736842105263, },
            ["RectRgn.Translate.Y"] = Input { Value = 0.0375582087935889, },
            ["CubeRgn.Translate.Y"] = Input { Value = -0.301561409525185, },
            ["LineRgn.End.Y"] = Input { Value = -0.220036008230453, },
            ["RectRgn.Width"] = Input { Value = 0.228, },
            ["CubeRgn.Translate.X"] = Input { Value = -0.0043859649122807, },
            ["RectRgn.Height"] = Input { Value = 0.425, },
            ["LineRgn.Start.X"] = Input { Value = -0.134868421052632, },
            RandomSeed = Input { Value = 21998, },
            Input = Input {
               SourceOp = "pAvoid1_1",
               Source = "Output",
            },
            Distance = Input { Value = 0.228, },
            Strength = Input { Value = 0.087, },
            Region = Input { Value = FuID { "SphereRgn" }, },
            ["SphereRgn.Translate.X"] = Input { Value = -0.0658078677682579, },
            ["SphereRgn.Translate.Y"] = Input { Value = -0.258384951302997, },
         },
         ViewInfo = OperatorInfo { Pos = { 1759.36, 97.5233 } },
      },
      pTangentForce1 = pTangentForce {
         ID = 15,
         Inputs = {
            RandomSeed = Input { Value = 25216, },
            ["Translate.X"] = Input { Value = -0.729731368031409, },
            ["Translate.Y"] = Input { Value = -0.00965913626549029, },
            Input = Input {
               SourceOp = "pAvoid1_2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1893.75, 97.5233 } },
      },
      pTurbulence1 = pTurbulence {
         ID = 11,
         Inputs = {
            XStrength = Input { Value = 0.5, },
            StrengthOverLife = Input { Value = 1, },
            StrengthOverLifeLUT = Input {
               SourceOp = "pTurbulence1StrengthOverLifeLUT",
               Source = "Value",
            },
            Input = Input {
               SourceOp = "pDirectionalForce1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1360.07, 97.5233 } },
      },
      pTurbulence1StrengthOverLifeLUT = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0.0310880829015544] = { 0.968085106382979, RH = { 0.546285948325059, 0.172956827795538 }, Flags = { Linear = true } },
               [0.896373056994819] = { 0.592198581560284, LH = { 0.607944732297064, 0.486069803502885 } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      pDirectionalForce1 = pDirectionalForce {
         ID = 8,
         Inputs = {
            Strength = Input { Value = 0.01, },
            Direction = Input { Value = 90, },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
            Probability = Input { Value = 0.7, },
         },
         ViewInfo = OperatorInfo { Pos = { 1231.52, 97.5233 } },
      },
      VariBlur1 = VariBlur {
         Inputs = {
            Quality = Input { Value = 2, },
            BlurChannel = Input { Value = 3, },
            XBlurSize = Input { Value = 7.24, },
            YBlurSize = Input { Value = 10, },
            Input = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2352.38, 97.5233 } },
      },
      pRender1 = pRender {
         Inputs = {
            _MotionBlurWarning = Input { Disabled = true, },
            GlobalOut = Input { Value = 359, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            UseFrameFormatSettings = Input { Value = 1, },
            Depth = Input { Value = 3, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            OutputMode = Input {
               Value = FuID { "TwoD" },
               Disabled = true,
            },
            Blur = Input { Value = 1, },
            Glow = Input { Value = 0.094, },
            NewIntegrationMethod = Input { Value = FuID { "RK4" }, },
            KillParticlesThatLeaveTheView = Input { Value = 1, },
            ["MaterialID.MaterialID"] = Input { Value = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Translation = Input { Value = 1, },
            Input = Input {
               SourceOp = "pTurbulence2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2195.89, 97.5233 } },
      },
      pEmitter1 = pEmitter {
         ID = 4,
         Inputs = {
            ["ParticleStyleNGon.NGonType"] = Input { Value = 1, },
            Number = Input { Value = 500, },
            NumberVariance = Input { Value = 100, },
            Lifespan = Input { Value = 18, },
            LifespanVariance = Input { Value = 10, },
            TemporalDistribution = Input { Value = 1, },
            VelocityControls = Input { Value = 1, },
            Velocity = Input { Value = 0.01, },
            InheritVelocityVariance = Input { Value = 0.827, },
            Angle = Input { Value = 90, },
            RotationControls = Input { Value = 1, },
            RotationMode = Input { Value = 1, },
            SpinControls = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStyleLine" }, },
            Region = Input { Value = FuID { "LineRgn" }, },
            ["ParticleStyle.ColorControls"] = Input { Value = 1, },
            ["ParticleStyle.Green"] = Input { Value = 0.666666666666667, },
            ["ParticleStyle.Blue"] = Input { Value = 0, },
            ["ParticleStyle.ColorVariance"] = Input { Value = 1, },
            ["ParticleStyle.RedLow"] = Input { Value = 0.35, },
            ["ParticleStyle.RedHigh"] = Input { Value = 1, },
            ["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
            ["ParticleStyle.ColorOverLife"] = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0.87530637254902, 0.750919117647059, 0.370710784313726, 1 },
                     [0.353591160220994] = { 1, 0.666666666666667, 0, 1 },
                     [0.740331491712707] = { 0.784313725490196, 0.596078431372549, 0.125490196078431, 1 },
                     [1] = { 0.72156862745098, 0.419607843137255, 0, 1 }
                  }
               },
            },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 1.5, },
            ["ParticleStyle.SizeVariance"] = Input { Value = 0.2323, },
            ["ParticleStyle.SizeToVelocity"] = Input { Value = -0.281, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeOverLife",
               Source = "Value",
            },
            ["ParticleStyle.FadeControls"] = Input { Value = 1, },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BlurOverLife2D",
               Source = "Value",
            },
            ["LineRgn.StartNest"] = Input { Value = -1, },
            ["LineRgn.Start.X"] = Input { Value = -0.0153916768665849, },
            ["LineRgn.Start.Y"] = Input { Value = -0.230469102749844, },
            ["LineRgn.End.X"] = Input { Value = -0.07891166870665, },
            ["LineRgn.End.Y"] = Input { Value = -0.229065212758663, },
         },
         ViewInfo = OperatorInfo { Pos = { 1068.51, 97.5233 } },
      },
      pEmitter1SizeOverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.365248226950355, RH = { 0.332257247666442, 0.43641471977723 }, Flags = { Linear = true } },
               [0.996771742999326] = { 0.57874770543098, LH = { 0.664514495332884, 0.507581212604105 }, RH = { 1.01857321726725, 0.7108909052755 }, Flags = { Linear = true } },
               [1.06217616580311] = { 0.975177304964539, LH = { 1.04037469153518, 0.843034105120019 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      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,
      },
      pEmitter1_1 = pEmitter {
         ID = 529,
         CtrlWZoom = false,
         Inputs = {
            ["ParticleStyleNGon.NGonType"] = Input { Value = 1, },
            ["ParticleStylePoint.ApplyMode"] = Input { Value = 1, },
            Number = Input { Value = 25, },
            NumberVariance = Input { Value = 22.8, },
            Lifespan = Input { Value = 5, },
            VelocityControls = Input { Value = 1, },
            Velocity = Input { Value = 0.01, },
            Angle = Input { Value = 90, },
            RotationControls = Input { Value = 1, },
            RotationMode = Input { Value = 1, },
            SpinControls = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStylePointCluster" }, },
            ["ParticleStylePointCluster.ApplyMode"] = Input { Value = 1, },
            Region = Input { Value = FuID { "LineRgn" }, },
            ["ParticleStyle.ColorControls"] = Input { Value = 1, },
            ["ParticleStyle.Green"] = Input { Value = 0.666666666666667, },
            ["ParticleStyle.Blue"] = Input { Value = 0, },
            ["ParticleStyle.ColorVariance"] = Input { Value = 1, },
            ["ParticleStyle.RedLow"] = Input { Value = 0.35, },
            ["ParticleStyle.RedHigh"] = Input { Value = 0.35, },
            ["ParticleStyle.ColorOverLifeControls"] = Input { Value = 1, },
            ["ParticleStyle.ColorOverLife"] = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 1, 0.666666666666667, 0, 1 },
                     [0.353591160220994] = { 1, 0.666666666666667, 0, 1 },
                     [0.740331491712707] = { 0.784313725490196, 0.596078431372549, 0.125490196078431, 1 },
                     [1] = { 0.72156862745098, 0.419607843137255, 0, 1 }
                  }
               },
            },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 1.2, },
            ["ParticleStyle.SizeVariance"] = Input { Value = 0.1654, },
            ["ParticleStyle.SizeToVelocity"] = Input { Value = -0.375, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1_1SizeOverLife",
               Source = "Value",
            },
            ["ParticleStyle.FadeControls"] = Input { Value = 1, },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1_1BlurOverLife2D",
               Source = "Value",
            },
            ["LineRgn.StartNest"] = Input { Value = -1, },
            ["LineRgn.Start.X"] = Input { Value = -0.0131986944104446, },
            ["LineRgn.Start.Y"] = Input { Value = -0.23126775029709, },
            ["LineRgn.End.X"] = Input { Value = -0.0541819665442672, },
            ["LineRgn.End.Y"] = Input { Value = -0.228689334096614, },
         },
         ViewInfo = OperatorInfo { Pos = { 1058.92, 224.635 } },
      },
      pEmitter1_1SizeOverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0.0103626943005181] = { 0.471631205673759, RH = { 0.340241796200345, 0.545161764694488 }, Flags = { Linear = true } },
               [1] = { 0.692222882735945, LH = { 0.670120898100173, 0.618692323715216 }, RH = { 1.02072538860104, 0.78654102347881 }, Flags = { Linear = true } },
               [1.06217616580311] = { 0.975177304964539, LH = { 1.04145077720207, 0.880859164221674 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
      },
      pEmitter1_1BlurOverLife2D = 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,
      }
   }
}


P.S.
I hope it works in your version of Fusion. I don't think I've used any special nodes or anything.

fire4torch-web.jpg
fire4torch-web.jpg (687.44 KiB) Viewed 1051 times


Basically I took two images. One of Olympic torch and a photo of mountains. I used depth mask tool to generate depth mask and DepthDefocus macro to get shallow depth of field. I use blinn, reflect node and bump map to create shader for the torch so it would react to lights in 3D.

I put the torch and mountain image on image plane 3D and animated slow push in dolly zoom move with a camera.

I put a point light where the fire should be, and used probe modifier to match the intensity of the point light with the flickering flame of the fire.

I also used some heat distortion for the background, behind the flame to give it some more interaction.

The two tutorials for probe modifier and heat distortion can be found here in case someone is interested.

Con-Fusion Quicky - The Probe Modifier



The Probe Modifier - Davinci Resolve / Fusion Tutorial - "Camping with the Shark"



HeatDistortion for Blackmagic Fusion

Offline

Kel Philm

  • Posts: 613
  • Joined: Sat Nov 19, 2016 6:21 am

Re: Realistic Fire in Fusion with Particle System.

PostTue May 07, 2024 8:18 pm

Nice work!
Offline

Max Seredkin

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

Re: Realistic Fire in Fusion with Particle System.

PostTue May 07, 2024 9:47 pm

I tried to solve this problem once too. Unfortunately nothing has changed in the particle system since then, so it should still work. But to work you need Krokodove plugin, which exists only before Fusion 18.5. So if you want to play with it you need Fusion version before 18.5.

https://www.steakunderwater.com/wesuckl ... 625#p38625
Behance https://www.behance.net/max_seredkin
Vimeo https://vimeo.com/user66756392
https://www.mrpost.ru/en
Offline
User avatar

KrunoSmithy

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

Re: Realistic Fire in Fusion with Particle System.

PostTue May 07, 2024 11:31 pm

Kel Philm wrote:Nice work!


Thank you.

Max Seredkin wrote:I tried to solve this problem once too. Unfortunately nothing has changed in the particle system since then, so it should still work. But to work you need Krokodove plugin, which exists only before Fusion 18.5. So if you want to play with it you need Fusion version before 18.5.

https://www.steakunderwater.com/wesuckl ... 625#p38625


Ah, yes. Krokodove plug in is awesome, I hear. I never got to use it, since I only started when it was already incompatible, and by the time it was updates I was already on 18.6. Really love what you do in Fusion by the way. I didn't realize it was you at first, but saw your Vimeo channel. Truly impressive work. My compliments.

You said for the fire you did: "To make the fire look plausible, you need a large number of particles, so it is desirable that the computer is powerful. It takes me about an hour to simulation and rendering the sequence. I did this in version 17, only because vectors are considered many times faster."

I tried some complex stuff too and a fairly low powered machine. Any tips to deal with complex sequences and not kill the workstation? The stuff you did on your channel looks really intense, so I imagine you had similar problems and probably try to find ways to reduce the rendering time.

The things I've tried is using loaders and savers instead of media in and media out in Resolve Fusion Page. That was faster.

I tried to use DOD and ROI when I can. I tried to also use Float 16 instead of 32 bit. I tried rendering out larger sequence in sections with saver nodes. I know its possible to cache it on disk too, but it takes a lot of hard drive space.

Any other tips you may know about. Thank you.
Offline

Max Seredkin

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

Re: Realistic Fire in Fusion with Particle System.

PostWed May 08, 2024 12:00 pm

The advice is simple any 2D node can be cached and use the cache files as loader, so as not to overwrite the cache (fusion has this sin, sometimes it deletes cache files, although the update is lock). You can also cache particles.
Optimize the script logic, make sure there are no unnecessary computational processes or use them after caching. Try to work in proxy (I don't know if this feature is in DVR, it is definitely in Fusion studio, it is very useful when you work in resolutions greater than 2K or if you have a resource-intensive process. (some plugins don't work well in proxy, may give wrong results, especially DOF nodes)

My computer is not the latest either. You can always put multiple versions of Fusion in different directories. I personally have 3 or 4 versions.
Behance https://www.behance.net/max_seredkin
Vimeo https://vimeo.com/user66756392
https://www.mrpost.ru/en
Offline
User avatar

KrunoSmithy

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

Re: Realistic Fire in Fusion with Particle System.

PostWed May 08, 2024 12:23 pm

Max Seredkin wrote:The advice is simple any 2D node can be cached and use the cache files as loader, so as not to overwrite the cache (fusion has this sin, sometimes it deletes cache files, although the update is lock). You can also cache particles.
Optimize the script logic, make sure there are no unnecessary computational processes or use them after caching. Try to work in proxy (I don't know if this feature is in DVR, it is definitely in Fusion studio, it is very useful when you work in resolutions greater than 2K or if you have a resource-intensive process. (some plugins don't work well in proxy, may give wrong results, especially DOF nodes)

My computer is not the latest either. You can always put multiple versions of Fusion in different directories. I personally have 3 or 4 versions.


I didn't know some of them. Thank you. Will give it a try. Proxy workflow is available, but its in a hidden menu in Fusion Resolve, next to the beginning of the timeline. So its not noticeable unless one knows where it is.

Also another question if you don't mind.

Accumulation effects or DOF in Fusion render is really slow but looks pretty good. So I often try to use Z-Depth mask out of a renderer to use something like DepthDefocus macro or something similar to blur in 2D after the render node. But of course there are problems with the edges, especially when there is quick drop off between how far z-depth values are. Are you aware of any solution or way to reduce this problem? Thank you.

This is the closest solution I found, this macro and edge extenuation, but still creates problems for me. Are you by any chance aware of some better method or resources to check out. Thanks again.

https://www.steakunderwater.com/VFXPedi ... escription
Offline

Max Seredkin

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

Re: Realistic Fire in Fusion with Particle System.

PostWed May 08, 2024 5:30 pm

Depth of field and Exponential glow (Xglow or SWAG ) are the most expensive (in terms of render time) processes. I personally sacrifice time for quality, I use Z channel and Freeschluft Depth of Field. Edge problems are often solved with Erode Z channel.

I don't use Accumulation eff. In Render3D it is horrible and almost uncontrollable.

Freeschluft Depth of Field plugin. The best thing so far, although it is very old and has not been updated for a long time. (by the way, its developer is somewhere on the WSL forum). It is slow, it renders only on CPU and it is long overdue to expand in the functional part. But it makes the most beautiful DOF and bokeh. And most importantly it is controllable and predictable. Although there were many attempts to write DOF plugins. This is my subjective opinion, personally for me it looks like this.

I'd say what's missing is a really new plugin that will allow fine control of DoF. Not just blur across layers, but will give control to bokeh their size, texture, rotation relative to the center, brightness, etc. No other plugin has this yet.

P.S. DepthDefocus is a good solution, it knows how to solve edge problems.
Behance https://www.behance.net/max_seredkin
Vimeo https://vimeo.com/user66756392
https://www.mrpost.ru/en
Offline
User avatar

KrunoSmithy

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

Re: Realistic Fire in Fusion with Particle System.

PostWed May 08, 2024 9:54 pm

Max Seredkin wrote:Depth of field and Exponential glow (Xglow or SWAG ) are the most expensive (in terms of render time) processes. I personally sacrifice time for quality, I use Z channel and Freeschluft Depth of Field. Edge problems are often solved with Erode Z channel.

I don't use Accumulation eff. In Render3D it is horrible and almost uncontrollable.

Freeschluft Depth of Field plugin. The best thing so far, although it is very old and has not been updated for a long time. (by the way, its developer is somewhere on the WSL forum). It is slow, it renders only on CPU and it is long overdue to expand in the functional part. But it makes the most beautiful DOF and bokeh. And most importantly it is controllable and predictable. Although there were many attempts to write DOF plugins. This is my subjective opinion, personally for me it looks like this.

I'd say what's missing is a really new plugin that will allow fine control of DoF. Not just blur across layers, but will give control to bokeh their size, texture, rotation relative to the center, brightness, etc. No other plugin has this yet.

P.S. DepthDefocus is a good solution, it knows how to solve edge problems.



Thank you for the advice. Good points you make. I have used Freeschluft Depth of Field as part of Photoshop package and it does indeed create beautiful looking bokeh, almost out of the box. But you are right, there is no real customizable but realistic and easy to use solution out there for even Photoshop, much less Fusion. I haven't yet tried one from Sapphire of BorisFX, but its not cheap.

Thank you for inspiration and advice. I actually started working on something similar to your fire project, but using this fire I made, and looking good so far, but I need to build the reflective floor and all that. If I turns out good, I'll post it here.

Cheers!
Offline

Max Seredkin

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

Re: Realistic Fire in Fusion with Particle System.

PostWed May 08, 2024 11:04 pm

Good luck to you. Don't forget to show the result.

Sapphire DoF is pretty fast but not flexible. I rarely use it.
Behance https://www.behance.net/max_seredkin
Vimeo https://vimeo.com/user66756392
https://www.mrpost.ru/en
Offline
User avatar

KrunoSmithy

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

Re: Realistic Fire in Fusion with Particle System.

PostWed May 08, 2024 11:49 pm

Max Seredkin wrote:Good luck to you. Don't forget to show the result.

Sapphire DoF is pretty fast but not flexible. I rarely use it.


Thanks. Will do.
Offline
User avatar

KrunoSmithy

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

Re: Realistic Fire in Fusion with Particle System.

PostSat May 11, 2024 8:21 pm

Max Seredkin wrote:Good luck to you. Don't forget to show the result.


It looks like for not the project will have to be put on ice, pun intended. Speaking of ice, I was attempting to put together fire on text and ice on the ground, for contrast. But I run into performance issues on my machine and few things need more work before I can continue, plus other things in life happen, so for now it will be on ice, I may come back to it later. Or switch places, and do ice text and fire something else.

Here is work in progress from the 3D preview mode.

sshot-4016.jpg
sshot-4016.jpg (66.7 KiB) Viewed 407 times


sshot-3983.jpg
sshot-3983.jpg (74.61 KiB) Viewed 407 times


metal_0056_metallic_4ks.jpg
metal_0056_metallic_4ks.jpg (416.4 KiB) Viewed 407 times
Offline
User avatar

KrunoSmithy

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

Re: Realistic Fire in Fusion with Particle System.

PostTue May 14, 2024 12:46 am

I ended up trying something a bit different.

Fire & Ice Test In Resolve Fusion



I took a short video clip of a candle flame on a black background. Used luma keyer to isolate the flame on a transparent background. Hooked that into an image plane 3D and hook the image plane into a point light 3D. I than used probe modifier for the intensity of the light to reference the flame video for more realistic sync between flame video going into image plane 3D and point light 3D reacting to the flame itself and by extension to the rest of the 3D scene.

By feeding video or image to image plane 3D we essentially turn 2D asset into 3D asset. But in this case we have interacting video that should interact with the rest of the 3D environment. So probe modifier takes care of that, and by feeding the image plane directedly into the point light, I can than move the light anywhere I want and it will move the flame on an image plane along with it, effectively using 2D video clip of a flame to now become 3D interactive light but we don't see the light itself, only the effect of the light, we instead see the video clip of the flame.

This effectively turns 2D video clip of a flame on a black background into interactive 3D flame in our 3D scene. Real simple and quick and very interactive, not only in 3D but also in 2D. Because I can change the video at any point, weather its adding soft glow, changing color of the flame or adjusting luma mask, its immediately updated in the 3D. This also works if you need a quick swap for another flame video or something else. It will work and update immediately. Great for iteration testing or demanding last minute client changes.

This is convenient because all I have to do is move the point light around the scene, and candle moves and interacts with the rest of the scene. You can use this set up if you have light sources that you imported as 2D assets but you need to sell them as believable 3D assets. Candles, fire, muzzle flashes, explosions, laser and other sci-fi effects, lighting etc. You can use 2D assets and make them interactive. And if you combine it with other 2D assets you project on the 3D geometry you can fake a lot of stuff that will look believable. And if you later composite it with 2D live action or real 3D models or all of it, with some color grading you can create a nice little scene that looks far greater than it really is . This little experiment of mine, was to test some of these ideas in fusion.

I than used a shape 3D to create a sphere and used a ice texture I found online to create a shader with a Cook Torrance. I than simply used duplicate 3D node to create random 25 sphere duplicates. Just to fill out the scene.

I used also shape 3D to create a cylinder and used bend 3D node to create a slightly modified shape for the base model of the candle, which I used Blinn lighting model with some fast noise and bump map to get the shader for that.

That is pretty much it. I added one spot light and animated the camera and candle to move around the scene. Since its essentially a 2D flame in 3D environment. if you move around it, the illusion will break and it will be clearly 2D image of a flame, so to get around that, just publish the transform coordinates of where Camera3D is facing, and use the same coordinates in the image plane, the one with the flame to connect to it remotely. That way the flame will always be facing camera, hiding the fact its 2D.

At the end I added the ambient occlusion node to improve shading a bit, making the scene a bit more moody and some color grading at the end for finishing touches.

Essentially this was a short little project that I used to test a bunch of techniques I've been experimenting lately.

Return to Fusion

Who is online

Users browsing this forum: Cindrivani and 14 guests