Jump to: Board index » General » Fusion

Question about attachng a particle system to a 3d model.

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

Bob Place

  • Posts: 54
  • Joined: Thu Jan 21, 2016 10:13 pm
  • Location: Atlanta, Ga. USA

Question about attachng a particle system to a 3d model.

PostThu Jan 28, 2016 1:23 am

Hi all,

Newbie here. I imported a model of a jet and I would like to make some small vapor trails from the ends of the wings while the plane if rolling. I can make the trails with the particle system, but I need to know how to attache the particle systems to the ends of the wings so they move appropriately with the Jet wing.

Is there a tutorial or something you can point me to? Or even tell me why my idea could be done a better way.

Thanks!
Bob Place
Offline

Ryan Bloomer

  • Posts: 903
  • Joined: Tue Jul 09, 2013 6:58 pm

Re: Question about attachng a particle system to a 3d model.

PostThu Jan 28, 2016 5:30 pm

It can depend if you've animated your object already, but if you haven't you can set up a 3D merge with your particles and geometry together, and then a 3Dtransform after and use the 3Dtransfor to animate the geo and particles together so they are connected.

Copy and paste this in to Fusion, this is a very basic setup describing this. If you already animated the geometry, I believe you have to set expressions between the transform coordinates.

Code: Select all
{
   Tools = ordered() {
      pEmitter1 = pEmitter {
         ID = 7,
         Inputs = {
            Number = Input { Value = 100, },
            VelocityControls = Input { Value = 1, },
            Velocity = Input { Value = 0.22, },
            Angle = Input { Value = 1.8181818, },
            AngleVariance = Input { Value = -1.8181818, },
            AngleZ = Input { Value = 134.5454545, },
            AngleZVariance = Input { Value = 60, },
            ["ParticleStyle.ColorOverLife"] = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 1, 1, 1, 1, },
                  },
               },
            },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeoverLife",
               Source = "Value",
            },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BluroverLife2D",
               Source = "Value",
            },
            ["SphereRgn.Translate.X"] = Input { Value = -0.479153356002691, },
            ["SphereRgn.Translate.Y"] = Input { Value = 0.0681085487640921, },
            ["SphereRgn.Translate.Z"] = Input { Value = -1.22280679570455, },
         },
         ViewInfo = OperatorInfo { Pos = { 567, 28, }, },
      },
      pEmitter1SizeoverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.3, 0.5, }, Flags = { Linear = true, }, },
               [1] = { 0.5, LH = { 0.7, 0.5, }, Flags = { Linear = true, }, },
            },
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64, },
         NameSet = true,
      },
      pEmitter1BluroverLife2D = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.3, 0.5, }, Flags = { Linear = true, }, },
               [1] = { 0.5, LH = { 0.7, 0.5, }, Flags = { Linear = true, }, },
            },
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64, },
         NameSet = true,
      },
      pRender1 = pRender {
         Inputs = {
            ["_MotionBlurWarning"] = Input { Disabled = true, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            OutputMode = Input { Disabled = true, },
            IntegrationMethod = Input { Value = FuID { "RK4", }, },
            ["MaterialID.MaterialID"] = Input { Value = 8, },
            ["ObjectID.ObjectID"] = Input { Value = 3, },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 565, 61, }, },
      },
      Cube3D1 = Cube3D {
         CtrlWZoom = false,
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input { Value = -1.44192250067386, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = 13.3680450646207, },
            ["SurfaceCubeInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["Front.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0.5, },
            ["Front.MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["Front.MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["Right.MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0.200000002980232, },
            ["Right.MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["Right.MtlStdInputs.MaterialID"] = Input { Value = 2, },
            ["Left.MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0.699999988079071, },
            ["Left.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0.400000005960464, },
            ["Left.MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0.699999988079071, },
            ["Left.MtlStdInputs.MaterialID"] = Input { Value = 3, },
            ["Bottom.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["Bottom.MtlStdInputs.MaterialID"] = Input { Value = 4, },
            ["Top.MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0, },
            ["Top.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["Top.MtlStdInputs.MaterialID"] = Input { Value = 5, },
            ["Back.MtlStdInputs.MaterialID"] = Input { Value = 6, },
         },
         ViewInfo = OperatorInfo { Pos = { 703, 13, }, },
      },
      Transform3D1 = Transform3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Merge3D2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 692, 141, }, },
      },
      Merge3D2 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Cube3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 702, 62, }, },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Transform3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 709, 206, }, },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = -0.764694476237484, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 0.0889979768033593, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 1.8703650915314, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = -1.50899223377928, },
            ["Transform3DOp.Rotate.Z"] = Input { Value = -6.63842975767329, },
            AoV = Input { Value = 24.3265863475745, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 7, },
         },
         ViewInfo = OperatorInfo { Pos = { 443, 209, }, },
      },
      Renderer3D1 = Renderer3D {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            CameraSelector = Input { Value = FuID { "Camera3D1", }, },
         },
         ViewInfo = OperatorInfo { Pos = { 983, 208, }, },
      },
   },
}
Offline

Bob Place

  • Posts: 54
  • Joined: Thu Jan 21, 2016 10:13 pm
  • Location: Atlanta, Ga. USA

Re: Question about attachng a particle system to a 3d model.

PostFri Jan 29, 2016 9:14 pm

Thanks Ryan,

I had figured out I can use multiple merge3d nodes to control placement of things on the jet, and they lock on. For the particles it didn't help, but what I wanted to do did not require what I thought it did. I did figure out anything on the original model I wanted to move independently (say flaps) can be done with a merge3d node and using it's pivot to move the pivot to the correct location on the mesh.

I basically have the Jet FBX in a group. inside the group I use Merge 3d nodes to control pieces of the model, and outside I use Merge 3d nodes to control the entire model. I also started to grasp expressions and linking properties to attach things to the model. This has been a good week...

Thanks again!
Bob Place
Offline

Ryan Bloomer

  • Posts: 903
  • Joined: Tue Jul 09, 2013 6:58 pm

Re: Question about attachng a particle system to a 3d model.

PostFri Jan 29, 2016 10:09 pm

good to hear Bob,

Always interested in what people are working on if you can post anything it'd be great to see what you're working on.

cheers,
Offline

Bob Place

  • Posts: 54
  • Joined: Thu Jan 21, 2016 10:13 pm
  • Location: Atlanta, Ga. USA

Re: Question about attachng a particle system to a 3d model.

PostSun Jan 31, 2016 11:44 pm

I appreciate your help. As mentioned earlier this project is what I am using to teach myself Fusion. (I have been an After Effect user for about 13 years). I figured that a Dogfight would force me to use a wide variety of skills. I am not finding the move from AEX to Fusion that difficult. It's just a matter of learning what buttons to press. I'm 60 years old and have been creating training films for 15 years. In the last 3 or 4 years I have been moving to help the ultra low budget Indie film community here in Atlanta by offering my services for free (more or less). Fusion will be a big part of that offering.

A quick question. What 3d camera tracker would you recommend? I am leaning towards Mocha pro because it also integrates with After Effects, and I will not be giving that up. But I am not opposed to a fusion only solution. (And money is not an issue)

Thanks! And I will post a link to the Dogfight video as soon as I complete it. Thanks again!
Bob Place
Offline

Ryan Bloomer

  • Posts: 903
  • Joined: Tue Jul 09, 2013 6:58 pm

Re: Question about attachng a particle system to a 3d model.

PostMon Feb 01, 2016 3:31 am

I've come from an AE background as well, and have found the transition to Fusion be quite smooth, and the community has been extremely helpful in learning the software.

I haven't done much in 3D tracking, but have had a few jobs that required it. I've tried mocha Pro's 3D tracking feature, but never got the results I needed. I've used the AE 3D built-in tracker, the c4D built in tracker, the Foundry's 3D tracker plugin for AE, and SynthEyes. Of all of them I've had the best results with SynthEyes. I haven't used SynthEyes with Fusion yet, but have read quite a bit on it, and it looks like the two programs have quite a good workflow. Maybe someone else can chime in about Syntheyes.

The AE and C4d tracking methods unfortunately don't import point cloud data, and I have yet to figure out how to get nulls from C4d's tracker to come in yet. I end up having to do some really basic polygon modeling with the nulls, so I have location reference back in Fusion.

I'm interest what you find in your search, might be worth it's own topic, too.
Offline

Bob Place

  • Posts: 54
  • Joined: Thu Jan 21, 2016 10:13 pm
  • Location: Atlanta, Ga. USA

Re: Question about attachng a particle system to a 3d model.

PostWed Feb 03, 2016 1:41 pm

Just a quick update. I finally figured out how to attach a particle system to a 3d object, so it respects the movement of the 3d object and still spits out particles correctly. Specifically my application is jet streams and vapor trails off the wings.

Anyway, I have the jet model in a merge3d. This is what I use to move the entire plane around the 3d environment. Putting the particle system in this merge3d does not work because while the particle system is locked to the jet, it does not "see" any movement as it's world is the merge 3d. So I need the emitter outside of the Jet's merge3d, but I need it to follow the position and rotation of this merge3d. So I used an expression on the x,y,z, and rotation like this:

Jet1Merge.Transform3DOp.Translate.X
Jet1Merge.Transform3DOp.Translate.Y
Jet1Merge.Transform3DOp.Translate.Z

This put the emitter at the pivot point of the jet's merge 3d, which is not where I wanted it. I would have thought the "pivot" of the emitter would have moved it to the correct position, but I was wrong. I needed to change the expression so I added the correct offsets in the expression formula:

Jet1Merge.Transform3DOp.Translate.X -3
Jet1Merge.Transform3DOp.Translate.Y +.5
Jet1Merge.Transform3DOp.Translate.Z -2.7

This moved the emitter to the exact location on the jet model I needed so when the jet moves around in 3d space, the emitter emits the jet stream/vapor trails perfectly.

Thanks for pointing me in the right direction!
Bob Place
Offline

Bob Place

  • Posts: 54
  • Joined: Thu Jan 21, 2016 10:13 pm
  • Location: Atlanta, Ga. USA

Re: Question about attachng a particle system to a 3d model.

PostThu Feb 04, 2016 12:22 pm

Ryan,

Sorry to bother, but how did you capture your composition like this? I know how to put it on the board, but how did you capture it from Fusion?

Ryan Bloomer wrote:
Code: Select all
{
   Tools = ordered() {
      pEmitter1 = pEmitter {
         ID = 7,
         Inputs = {
            Number = Input { Value = 100, },
            VelocityControls = Input { Value = 1, },
            Velocity = Input { Value = 0.22, },
            Angle = Input { Value = 1.8181818, },
            AngleVariance = Input { Value = -1.8181818, },
            AngleZ = Input { Value = 134.5454545, },
            AngleZVariance = Input { Value = 60, },
            ["ParticleStyle.ColorOverLife"] = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 1, 1, 1, 1, },
                  },
               },
            },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeoverLife",
               Source = "Value",
            },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BluroverLife2D",
               Source = "Value",
            },
            ["SphereRgn.Translate.X"] = Input { Value = -0.479153356002691, },
            ["SphereRgn.Translate.Y"] = Input { Value = 0.0681085487640921, },
            ["SphereRgn.Translate.Z"] = Input { Value = -1.22280679570455, },
         },
         ViewInfo = OperatorInfo { Pos = { 567, 28, }, },
      },
      pEmitter1SizeoverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.3, 0.5, }, Flags = { Linear = true, }, },
               [1] = { 0.5, LH = { 0.7, 0.5, }, Flags = { Linear = true, }, },
            },
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64, },
         NameSet = true,
      },
      pEmitter1BluroverLife2D = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.3, 0.5, }, Flags = { Linear = true, }, },
               [1] = { 0.5, LH = { 0.7, 0.5, }, Flags = { Linear = true, }, },
            },
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64, },
         NameSet = true,
      },
      pRender1 = pRender {
         Inputs = {
            ["_MotionBlurWarning"] = Input { Disabled = true, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            OutputMode = Input { Disabled = true, },
            IntegrationMethod = Input { Value = FuID { "RK4", }, },
            ["MaterialID.MaterialID"] = Input { Value = 8, },
            ["ObjectID.ObjectID"] = Input { Value = 3, },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 565, 61, }, },
      },
      Cube3D1 = Cube3D {
         CtrlWZoom = false,
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input { Value = -1.44192250067386, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = 13.3680450646207, },
            ["SurfaceCubeInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["Front.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0.5, },
            ["Front.MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["Front.MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["Right.MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0.200000002980232, },
            ["Right.MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["Right.MtlStdInputs.MaterialID"] = Input { Value = 2, },
            ["Left.MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0.699999988079071, },
            ["Left.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0.400000005960464, },
            ["Left.MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0.699999988079071, },
            ["Left.MtlStdInputs.MaterialID"] = Input { Value = 3, },
            ["Bottom.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["Bottom.MtlStdInputs.MaterialID"] = Input { Value = 4, },
            ["Top.MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0, },
            ["Top.MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["Top.MtlStdInputs.MaterialID"] = Input { Value = 5, },
            ["Back.MtlStdInputs.MaterialID"] = Input { Value = 6, },
         },
         ViewInfo = OperatorInfo { Pos = { 703, 13, }, },
      },
      Transform3D1 = Transform3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Merge3D2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 692, 141, }, },
      },
      Merge3D2 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Cube3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 702, 62, }, },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Transform3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 709, 206, }, },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = -0.764694476237484, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 0.0889979768033593, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 1.8703650915314, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = -1.50899223377928, },
            ["Transform3DOp.Rotate.Z"] = Input { Value = -6.63842975767329, },
            AoV = Input { Value = 24.3265863475745, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 7, },
         },
         ViewInfo = OperatorInfo { Pos = { 443, 209, }, },
      },
      Renderer3D1 = Renderer3D {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            CameraSelector = Input { Value = FuID { "Camera3D1", }, },
         },
         ViewInfo = OperatorInfo { Pos = { 983, 208, }, },
      },
   },
}
Bob Place
Offline

Sander de Regt

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

Re: Question about attachng a particle system to a 3d model.

PostThu Feb 04, 2016 2:17 pm

Just select the nodes in your comp that you want to share, CTRL+ C and CTRL+V in this reply between the [code][/code] headers. Internally Fusion's comps are plain text, making it easy to copy/paste them.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

Bob Place

  • Posts: 54
  • Joined: Thu Jan 21, 2016 10:13 pm
  • Location: Atlanta, Ga. USA

Re: Question about attachng a particle system to a 3d model.

PostThu Feb 04, 2016 2:39 pm

Thanks Sander! I figured it was easy, but did not think it would be that easy!
Bob Place

Return to Fusion

Who is online

Users browsing this forum: No registered users and 18 guests