Jump to: Board index » General » Fusion

Importing an FBX file into Fusion

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

jdsglobal

  • Posts: 37
  • Joined: Fri Nov 02, 2018 1:09 am
  • Real Name: Jeff Schwisow

Importing an FBX file into Fusion

PostThu Apr 16, 2020 12:27 am

I decided that I wanted to composite some 3D animation with my video clips so I began looking at bringing 3D objects into Fusion. Based on my research on YT, it appeared that importing an FBX file would be a relatively straightforward process and that the bigger challenges would be setting up the animation and doing the rotoscoping and masking required to get the look that I wanted. WRONG! I stumbled at the very first hurdle so I could use some guidance from this learned forum.

I thought the best way to get informed feedback would to walk you through the steps that I've gone through and show you the results that I've gotten. By way of background, I'm using Resolve Studio 16.2. Also, these are the files that I got when I purchased the 3D image - yes, its our new best friend the coronavirus...

3D Model files.JPG
3D Model files.JPG (138.03 KiB) Viewed 2573 times


I started with the basics of dropping a Fusion composition into the timeline (its on a blank project for now as I wanted to get 3D animation sorted before fussing around with video clips). I then moved over to the Fusion tab and went to Fusion/Import/FBX scene to import the FBX file. These are the setting I used for the import:

FBX import settings.JPG
FBX import settings.JPG (40.71 KiB) Viewed 2573 times


Once the file was imported, this is the node tree that came in. Obviously, it requires a Render3D node in order to view anything and it needs to be connected to the MediaOut node. Note that I renamed the nodes so you could get some sense of what each node is (I don't really know what each does but used the node description when I hover over the node). The ones I didn't rename are DM (Texture 2D,3Tx) and Mapxxx (BumpMap, 3Bu).

Import node tree.JPG
Import node tree.JPG (153.38 KiB) Viewed 2573 times


Next, I imported all of the image texture files like I'd seen in the instructional YT vids I watched - basically, all of the jpg files in the model files (dragged and dropped). Each of the 4 model parts, I actually had 4 jpg files associated with it that DM, CV, AO and NM in their title (that is except for Part 3 which didn't an AO image). When I imported the files I got a node tree that connect the resulting nodes together with Merge nodes. Once again, per my YT education, I deleted the Merge nodes and connect the image texture nodes to the Blinn node for its corresponding component of the model (e.g., Part 1 nodes to Part1_blinn, Part 2 nodes to Part2_blinn). I was led to believe that the order mattered so I connected up each component in the following order - DM, CV, AO, then NM. Note that there were not enough connection points to leave the initial DM node connected (except on Part 3) so I disconnected that node in favour of the DM image for each specific part.

I also added a Camera3D node and a Render3D.

The resulting node tree looked like this...oops, exceeded my attachment limit...the link to the final node tree image is: https://www.dropbox.com/s/cwf4yr9z9ae1i ... e.JPG?dl=0

The resulting composition that I get looks like this: https://www.dropbox.com/s/f8w1t3544any8 ... l.JPG?dl=0

Instead of like this: https://www.dropbox.com/s/7b96zgtwabi5c ... e.JPG?dl=0

I hoping that you can give me some guidance in turning what I've got into what I was looking for.

Thanks in advance for helping out a newbie!

Cheers,
Jeff.
2020 Custom-build PC, Intel i9-10900X CPU, 10 Core(s) @ 3.70 GHz, 4.30 GHz OC, 128GB RAM, 2-2TB NVMe SSDs, 20TB Internal HDD Raid, Dual Nvidia RTX 2080 Super 8GB
Two BMPCC4K
Resolve Speed Editor, BM ATEM Mini Pro
Current Resolve Studio Ver. 17.2
Offline
User avatar

Bryan Ray

  • Posts: 2491
  • Joined: Mon Nov 28, 2016 5:32 am
  • Location: Los Angeles, CA, USA

Re: Importing an FBX file into Fusion

PostThu Apr 16, 2020 3:34 pm

Okay, those two-letter codes mean something, and most of them won't be simply plugged into the Blinn the way you've done. Actually, I think none of them will.

AO = Ambient Occlusion. This map is intended to show where bits of the model are close to one another and will therefore block ambient light. It should be applied as the Diffuse to a Blinn that has its specular turned all the way down. Fusion doesn't have a proper AO setup, so it's a little convoluted to apply this shader properly. I'll talk about it in a bit.

CV = probably a Curvature Map or Cavity Map. It's hard to tell from the thumbnail which one it is. Look up both of those terms and see which one is more likely. If it's a Cavity Map, you'd Overlay it with the AO Map and apply both at the same time. If it's Curvature, there's not much reason to use it in Fusion... Well, you could do some trickery to fake subsurface scattering, I guess.

DM = Displacement Map. This is used the with the Displace3D node to add additional geometry detail to the object—it actually moves the vertices around to create shapes that don't exist in the model itself. This is typically done before shading.

NM = Normal Map. This, used in conjunction with the BumpMap3D node, will add some illusory detail to the model. To apply it, NM -> BumpMap (set Image Type to BumpMap) -> Bumpmap input on your Blinn.

With these maps, the only slot on the Blinn that will be connected is the Bumpmap. Since you don't have a Diffuse Map, the actual color of your virus will need to be set using the Blinn's own Color control.

I'm going to provide an example node graph (just copy the code below then paste it into your node graph). It's not going to really look like anything since I don't have any assets to work with, but it should give you an idea of how things might wire together. This is not the only way to do it, and I'm not as good with Fusion's 3D system as some other artists. For some really good training in this area, I recommend Con-Fusion: https://www.con-fusion.net/home
or Max Seredkin: https://www.patreon.com/mseredkin

Max is a really good source for this sort of thing—he's done some really cool medical animation rendering.

Code: Select all
{
   Tools = ordered() {
      Plane = Shape3D {
         NameSet = true,
         Inputs = {
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
            ["SurfacePlaneInputs.Width"] = Input { Value = 10, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, }
         },
         ViewInfo = OperatorInfo { Pos = { 385, -82.5 } },
      },
      PipeRouter2 = PipeRouter {
         Inputs = {
            Input = Input {
               SourceOp = "Sphere",
               Source = "Output",
            },
         },
         ViewInfo = PipeRouterInfo { Pos = { 495, -49.5 } },
      },
      PipeRouter1 = PipeRouter {
         Inputs = {
            Input = Input {
               SourceOp = "Plane",
               Source = "Output",
            },
         },
         ViewInfo = PipeRouterInfo { Pos = { 880, -82.5 } },
      },
      BumpMap2 = BumpMap {
         Inputs = {
            SourceImageType = Input { Value = 1, },
            Input = Input {
               SourceOp = "CreateBumpMap1",
               Source = "Output",
            },
            MaterialID = Input { Value = 5, },
         },
         ViewInfo = OperatorInfo { Pos = { 660, 16.5 } },
      },
      NormalMap = GroupOperator {
         NameSet = true,
         Outputs = {
            Output1 = InstanceOutput {
               SourceOp = "CreateBumpMap1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo {
            Pos = { 660, -16.5 },
            Flags = {
               AllowPan = false,
               AutoSnap = true,
               RemoveRouters = true
            },
            Size = { 236, 66.3636, 118, 24.2424 },
            Direction = "Horizontal",
            PipeStyle = "Direct",
            Scale = 1,
            Offset = { -652.333, -144.182 }
         },
         Tools = ordered() {
            CreateBumpMap1 = CreateBumpMap {
               Inputs = {
                  Input = Input {
                     SourceOp = "FastNoise1",
                     Source = "Output",
                  },
                  HeightScale = Input { Value = 12.6, },
               },
               ViewInfo = OperatorInfo { Pos = { 707.333, 152.818 } },
            },
            FastNoise1 = FastNoise {
               Inputs = {
                  Width = Input { Value = 1920, },
                  Height = Input { Value = 1080, },
                  ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                  XScale = Input { Value = 80, },
               },
               ViewInfo = OperatorInfo { Pos = { 597.333, 152.818 } },
            }
         },
      },
      DaySky1 = DaySky {
         CtrlWZoom = false,
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 480, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { 770, 82.5 } },
      },
      Reflect1 = MtlReflect {
         Inputs = {
            BackgroundMaterial = Input {
               SourceOp = "Blinn1",
               Source = "MaterialOutput",
            },
            ["Reflection.GlancingStrength"] = Input { Value = 0.354, },
            ["Reflection.Falloff"] = Input { Value = 3.654, },
            ["Reflection.Color.Material"] = Input {
               SourceOp = "DaySky1",
               Source = "Output",
            },
            ["Bumpmap.Material"] = Input {
               SourceOp = "BumpMap2",
               Source = "MaterialOutput",
            },
            MaterialID = Input { Value = 9, },
         },
         ViewInfo = OperatorInfo { Pos = { 660, 82.5 } },
      },
      Blinn1 = MtlBlinn {
         Inputs = {
            ["Diffuse.Color.Red"] = Input { Value = 0.09159, },
            ["Diffuse.Color.Green"] = Input { Value = 0.645, },
            ["Diffuse.Color.Blue"] = Input { Value = 0.25982664, },
            ["Specular.Nest"] = Input { Value = 1, },
            ["Specular.Intensity"] = Input { Value = 0, },
            ["Bumpmap.Material"] = Input {
               SourceOp = "BumpMap2",
               Source = "MaterialOutput",
            },
            MaterialID = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 605, 49.5 } },
      },
      Camera3D1 = Camera3D {
         NameSet = true,
         CustomData = {
            Settings = {
               [1] = {
                  Tools = ordered() {
                     Camera3D1 = Camera3D {
                        Inputs = {
                           ApertureW = Input { Value = 0.831496062992126 },
                           AoV = Input { Value = 19.2642683071402 },
                           ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" } },
                           ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1 },
                           ApertureH = Input { Value = 0.467716535433071 },
                           FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" } },
                           ["MtlStdInputs.MaterialID"] = Input { Value = 1 }
                        },
                        Name = "Camera3D1",
                        CtrlWZoom = false,
                        NameSet = true,
                        ViewInfo = OperatorInfo { Pos = { 550, 214.5 } },
                        CustomData = {
                        }
                     }
                  }
               },
               [6] = {
                  Tools = ordered() {
                     Camera3D1 = Camera3D {
                        Inputs = {
                           FLength = Input { Value = 49.0568334445481 },
                           ["Transform3DOp.Translate.Z"] = Input { Expression = "self.ImageInput.Metadata.Translate.Z" },
                           ImagePlaneEnabled = Input { Value = 0 },
                           AoV = Input {
                              Value = 19.2642683071402,
                              Expression = "self.ImageInput.Metadata.RSCameraFOV or self.ImageInput.Metadata['rs/camera/fov']"
                           },
                           AovType = Input { Value = 1 },
                           ["Transform3DOp.Rotate.Y"] = Input { Expression = "self.ImageInput.Metadata.Rotate.Y" },
                           ApertureH = Input { Value = 0.9 },
                           FilmGate = Input { Value = FuID { "HD" } },
                           ["Transform3DOp.Rotate.X"] = Input { Expression = "self.ImageInput.Metadata.Rotate.X" },
                           ["Transform3DOp.Translate.X"] = Input { Expression = "self.ImageInput.Metadata.Translate.X" },
                           PlaneOfFocus = Input { Expression = "self.ImageInput.Metadata.RSCameraDOFFocusDistance or self.ImageInput.Metadata['rs/camera/DOFFocusDistance']" },
                           FilmBack = Input { Value = 1 },
                           ["Transform3DOp.Rotate.RotOrder"] = Input { Value = FuID { "ZXY" } },
                           ["MtlStdInputs.MaterialID"] = Input { Value = 1 },
                           ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" } },
                           ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1 },
                           ["Transform3DOp.Translate.Y"] = Input { Expression = "self.ImageInput.Metadata.Translate.Y" },
                           ApertureW = Input { Value = 1.6 },
                           ["Transform3DOp.Rotate.Z"] = Input { Expression = "self.ImageInput.Metadata.Rotate.Z" }
                        },
                        CtrlWZoom = false,
                        NameSet = true,
                        ViewInfo = OperatorInfo { Pos = { 387, 145 } },
                        CustomData = {
                        }
                     }
                  }
               }
            }
         },
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = -2.31338742021756, },
            ["Transform3DOp.Translate.Y"] = Input { Value = -0.617125856741813, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 6.39473386079529, },
            ["Transform3DOp.Rotate.X"] = Input { Value = 7.60000038146973, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = -29.3999977111816, },
            FLength = Input { Value = 18.2123442718302, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" }, },
            FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1210, 82.5 } },
      },
      AmbientLight1 = LightAmbient {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 2.45581404608007, },
            ["Transform3DOp.Translate.Y"] = Input { Value = -0.0348311804304699, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 0.73020593408994, },
            Red = Input { Value = 0.938, },
            Green = Input { Value = 0.887895792, },
            Blue = Input { Value = 0.368634, },
            Intensity = Input { Value = 0.2, },
         },
         ViewInfo = OperatorInfo { Pos = { 990, 82.5 } },
      },
      SpotLight1 = LightSpot {
         Inputs = {
            ["Transform3DOp.Translate.Y"] = Input { Value = 3.65170635939449, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 8.05269124320319, },
            ["Transform3DOp.Rotate.X"] = Input { Value = -26.09, },
            Red = Input { Value = 0.02214, },
            Green = Input { Value = 0.1497976, },
            Blue = Input { Value = 0.82, },
            Intensity = Input { Value = 0.709, },
            PenumbraAngle = Input { Value = 20, },
            ["ShadowLightInputs3D.Nest"] = Input { Value = 1, },
            ["ShadowLightInputs3D.ShadowDensity"] = Input { Value = 1, },
            ["ShadowLightInputs3D.SoftnessType"] = Input { Value = FuID { "Variable" }, },
            ["ShadowLightInputs3D.Spread"] = Input { Value = 1.73, },
         },
         ViewInfo = OperatorInfo { Pos = { 1100, 82.5 } },
      },
      DisplacementMap = FastNoise {
         NameSet = true,
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Contrast = Input { Value = 3.29, },
            Brightness = Input { Value = -1, },
            XScale = Input { Value = 15.12, },
         },
         ViewInfo = OperatorInfo { Pos = { 495, 82.5 } },
      },
      Merge3D2 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "AmbientLight1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "SpotLight1",
               Source = "Output",
            },
            SceneInput4 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1100, 115.5 } },
      },
      ReplaceMaterial3D1 = ReplaceMaterial3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Displace3D1",
               Source = "Output",
            },
            MaterialInput = Input {
               SourceOp = "Reflect1",
               Source = "MaterialOutput",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 6, },
         },
         ViewInfo = OperatorInfo { Pos = { 660, 115.5 } },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "PipeRouter1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "ReplaceMaterial3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 880, 115.5 } },
      },
      Renderer3D1 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D2",
               Source = "Output",
            },
            ["RendererSoftware.Channels.Nest"] = Input { Value = 1, },
            ["RendererSoftware.Channels.Z"] = Input { Value = 1, },
            ["RendererSoftware.Channels.Normal"] = Input { Value = 1, },
            ["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
            ["RendererSoftware.ShadowsEnabled"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1375, 115.5 } },
      },
      Blinn2 = MtlBlinn {
         Inputs = {
            ["Diffuse.Color.Material"] = Input {
               SourceOp = "ChannelBooleans1_1",
               Source = "Output",
            },
            MaterialID = Input { Value = 7, },
         },
         ViewInfo = OperatorInfo { Pos = { 1430, -115.5 } },
      },
      Blinn2_1 = MtlBlinn {
         Inputs = {
            ["Diffuse.Color.Material"] = Input {
               SourceOp = "ChannelBooleans1",
               Source = "Output",
            },
            MaterialID = Input { Value = 7, },
         },
         ViewInfo = OperatorInfo { Pos = { 1430, -16.5 } },
      },
      AmbientOcclusionMap = GroupOperator {
         NameSet = true,
         Outputs = {
            Output1 = InstanceOutput {
               SourceOp = "ChannelBooleans1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo {
            Pos = { 1430, 16.5 },
            Flags = {
               AllowPan = false,
               GridSnap = true,
               AutoSnap = true,
               RemoveRouters = true
            },
            Size = { 337.938, 99.3636, 168.969, 24.2424 },
            Direction = "Horizontal",
            PipeStyle = "Direct",
            Scale = 1,
            Offset = { -1095.3, -271.864 }
         },
         Tools = ordered() {
            ChannelBooleans1 = ChannelBoolean {
               Inputs = {
                  Operation = Input { Value = 12, },
                  ToAlpha = Input { Value = 4, },
                  Background = Input {
                     SourceOp = "Background2",
                     Source = "Output",
                  },
                  EffectMask = Input {
                     SourceOp = "Rectangle1",
                     Source = "Mask",
                  },
               },
               ViewInfo = OperatorInfo { Pos = { 990, 280.5 } },
            },
            Background2 = Background {
               Inputs = {
                  Width = Input { Value = 512, },
                  Height = Input { Value = 512, },
                  ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                  TopLeftRed = Input { Value = 1, },
                  TopLeftGreen = Input { Value = 1, },
                  TopLeftBlue = Input { Value = 1, },
               },
               ViewInfo = OperatorInfo { Pos = { 990, 313.5 } },
            },
            Rectangle1 = RectangleMask {
               Inputs = {
                  Filter = Input { Value = FuID { "Fast Gaussian" }, },
                  SoftEdge = Input { Value = 0.0331, },
                  MaskWidth = Input { Value = 1920, },
                  MaskHeight = Input { Value = 1080, },
                  PixelAspect = Input { Value = { 1, 1 }, },
                  ClippingMode = Input { Value = FuID { "None" }, },
                  Center = Input { Value = { 0.551439650193878, 0.508935508935509 }, },
                  Width = Input { Value = 1.13783783783784, },
                  Height = Input { Value = 0.0576923076923077, },
               },
               ViewInfo = OperatorInfo { Pos = { 1100, 280.5 } },
            },
            Rectangle1_1 = RectangleMask {
               Inputs = {
                  Filter = Input { Value = FuID { "Fast Gaussian" }, },
                  SoftEdge = Input { Value = 0.0331, },
                  MaskWidth = Input { Value = 1920, },
                  MaskHeight = Input { Value = 1080, },
                  PixelAspect = Input { Value = { 1, 1 }, },
                  ClippingMode = Input { Value = FuID { "None" }, },
                  Center = Input { Value = { 0.484654731457801, 0.923076923076923 }, },
                  Width = Input { Value = 1.13783783783784, },
                  Height = Input { Value = 0.0576923076923077, },
                  Angle = Input { Value = 89.4934591068811, },
               },
               ViewInfo = OperatorInfo { Pos = { 1210, 313.5 } },
            }
         },
      },
      AmbientOcclusionMap_1 = GroupOperator {
         NameSet = true,
         Outputs = {
            Output1 = InstanceOutput {
               SourceOp = "ChannelBooleans1_1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo {
            Pos = { 1430, -148.5 },
            Flags = {
               AllowPan = false,
               GridSnap = true,
               AutoSnap = true,
               RemoveRouters = true
            },
            Size = { 337.938, 99.3636, 168.969, 24.2424 },
            Direction = "Horizontal",
            PipeStyle = "Direct",
            Scale = 1,
            Offset = { -1095.3, -271.864 }
         },
         Tools = ordered() {
            ChannelBooleans1_1 = ChannelBoolean {
               CtrlWShown = false,
               Inputs = {
                  EffectMask = Input {
                     SourceOp = "Ellipse1",
                     Source = "Mask",
                  },
                  Operation = Input { Value = 12, },
                  ToAlpha = Input { Value = 4, },
                  Background = Input {
                     SourceOp = "Background2_1",
                     Source = "Output",
                  },
               },
               ViewInfo = OperatorInfo { Pos = { 990, 280.5 } },
            },
            Background2_1 = Background {
               Inputs = {
                  Width = Input { Value = 512, },
                  Height = Input { Value = 512, },
                  ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                  TopLeftRed = Input { Value = 1, },
                  TopLeftGreen = Input { Value = 1, },
                  TopLeftBlue = Input { Value = 1, },
               },
               ViewInfo = OperatorInfo { Pos = { 990, 313.5 } },
            },
            Ellipse1 = EllipseMask {
               Inputs = {
                  Filter = Input { Value = FuID { "Fast Gaussian" }, },
                  SoftEdge = Input { Value = 0.0488, },
                  BorderWidth = Input { Value = 0.0121, },
                  OutputSize = Input { Value = FuID { "Custom" }, },
                  MaskWidth = Input { Value = 512, },
                  MaskHeight = Input { Value = 512, },
                  PixelAspect = Input { Value = { 1, 1 }, },
                  ClippingMode = Input { Value = FuID { "None" }, },
                  Width = Input { Value = 0.296622676798089, },
                  Height = Input { Value = 0.296622676798089, },
               },
               ViewInfo = OperatorInfo { Pos = { 1155, 280.5 } },
            }
         },
      },
      ReplaceMaterial3D2 = ReplaceMaterial3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "PipeRouter2",
               Source = "Output",
            },
            MaterialInput = Input {
               SourceOp = "Blinn2_1",
               Source = "MaterialOutput",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 8, },
         },
         ViewInfo = OperatorInfo { Pos = { 1430, -49.5 } },
      },
      ReplaceMaterial3D2_1 = ReplaceMaterial3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "PipeRouter1",
               Source = "Output",
            },
            MaterialInput = Input {
               SourceOp = "Blinn2",
               Source = "MaterialOutput",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 8, },
         },
         ViewInfo = OperatorInfo { Pos = { 1430, -82.5 } },
      },
      Displace3D1 = Displace3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Sphere",
               Source = "Output",
            },
            Scale = Input { Value = 0.331, },
            Bias = Input { Value = 1, },
            Input = Input {
               SourceOp = "DisplacementMap",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 495, 115.5 } },
      },
      Sphere = Shape3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Rotate.X"] = Input { Value = -90, },
            Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 4, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["SurfaceSphereInputs.SubdivisionLevelBase"] = Input { Value = 100, },
            ["SurfaceSphereInputs.SubdivisionLevelHeight"] = Input { Value = 100, },
            ["SurfaceSphereInputs.ObjectID.Nest"] = Input { Value = 1, },
            ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 3, }
         },
         ViewInfo = OperatorInfo { Pos = { 385, 115.5 } },
      },
      Note5 = Note {
         Inputs = {
            Comments = Input { Value = "Baked Ambient Occlusion, using an AO Map. Faster to render, but more complex to apply. This kind of approach could also be used to make a shadow pass.", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 1430, -214.5 },
            Flags = {
               Expanded = true
            },
            Size = { 485.333, 39.5455 }
         },
      },
      AmbientOcclusion1 = SSAO {
         Inputs = {
            KernelRadius = Input { Value = 0.397, },
            Camera = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
            Input = Input {
               SourceOp = "Renderer3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1375, 181.5 } },
      },
      ChannelBooleans2 = ChannelBoolean {
         Inputs = {
            Operation = Input { Value = 6, },
            ToAlpha = Input { Value = 4, },
            Background = Input {
               SourceOp = "Renderer3D1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "AmbientOcclusion1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1485, 181.5 } },
      },
      Note2 = Note {
         Inputs = {
            Comments = Input { Value = "Shading. Doing this after Displacement ensures the bump map texture does not get stretched. Depending on how the model was created, that might have been accounted for, in which case you'd apply shading directly to the Sphere instead of using a ReplaceMaterial", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 660, 181.5 },
            Flags = {
               Expanded = true
            },
            Size = { 114, 108.636 }
         },
      },
      Note3 = Note {
         Inputs = {
            Comments = Input { Value = "Lighting and Camera", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 990, 181.5 },
            Flags = {
               Expanded = true
            },
            Size = { 306, 40.7576 }
         },
      },
      Note1 = Note {
         Inputs = {
            Comments = Input { Value = "Modify Geometry", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 385, 181.5 },
            Flags = {
               Expanded = true
            },
            Size = { 206.667, 48.6364 }
         },
      },
      Displace3D1_1 = Displace3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "ReplaceMaterial3D2",
               Source = "Output",
            },
            Scale = Input { Value = 0.331, },
            Bias = Input { Value = 1, },
            Input = Input {
               SourceOp = "DisplacementMap_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1595, -49.5 } },
      },
      DisplacementMap_1 = FastNoise {
         NameSet = true,
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Contrast = Input { Value = 3.29, },
            Brightness = Input { Value = -1, },
            XScale = Input { Value = 15.12, },
         },
         ViewInfo = OperatorInfo { Pos = { 1595, -16.5 } },
      },
      Note4 = Note {
         Inputs = {
            Comments = Input { Value = "Fusion-generated AO. Can be slow to render, but it produces nice results. You need to turn on the Z and Normals outputs in the Renderer.", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 1320, 214.5 },
            Flags = {
               Expanded = true
            },
            Size = { 334.667, 61.3636 }
         },
      },
      Merge3D3 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Displace3D1_1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "ReplaceMaterial3D2_1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "PipeRouter3",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1705, -49.5 } },
      },
      PipeRouter3 = PipeRouter {
         Inputs = {
            Input = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = PipeRouterInfo { Pos = { 1705, 82.5 } },
      },
      Renderer3D2 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D3",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1815, -49.5 } },
      },
      ChannelBooleans2_1 = ChannelBoolean {
         Inputs = {
            Blend = Input { Value = 0.496, },
            Operation = Input { Value = 6, },
            ToAlpha = Input { Value = 4, },
            Background = Input {
               SourceOp = "Renderer3D1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Renderer3D2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1815, 115.5 } },
      }
   }
}
Bryan Ray
http://www.bryanray.name
http://www.sidefx.com
Offline

jdsglobal

  • Posts: 37
  • Joined: Fri Nov 02, 2018 1:09 am
  • Real Name: Jeff Schwisow

Re: Importing an FBX file into Fusion

PostFri Apr 17, 2020 9:55 pm

Thanks, Bryan. This is amazingly helpful! I really appreciate your generosity. I’ll have a play with this today see what happens :o .

Btw, if I want 10 little coronaviruses floating through my clip, do I simply copy the node tree 9 more times and animate each one? From memory (not at my computer right now) I can create a compound node (or some such grouping of nodes) to clean up the node window...

I’ll also check out Max and Con-Fusion’s stuff as well.

Thanks again,
Jeff.
2020 Custom-build PC, Intel i9-10900X CPU, 10 Core(s) @ 3.70 GHz, 4.30 GHz OC, 128GB RAM, 2-2TB NVMe SSDs, 20TB Internal HDD Raid, Dual Nvidia RTX 2080 Super 8GB
Two BMPCC4K
Resolve Speed Editor, BM ATEM Mini Pro
Current Resolve Studio Ver. 17.2
Offline
User avatar

Bryan Ray

  • Posts: 2491
  • Joined: Mon Nov 28, 2016 5:32 am
  • Location: Los Angeles, CA, USA

Re: Importing an FBX file into Fusion

PostSat Apr 18, 2020 1:34 am

No, you just need to pull additional branches off and use a Transform3D into a Merge3D to combine the copies together. Or you can use Duplicate3D. Here's an example of each method:

Code: Select all
{
   Tools = ordered() {
      Blinn1 = MtlBlinn {
         Inputs = {
            ["Diffuse.Color.Red"] = Input { Value = 0.09159, },
            ["Diffuse.Color.Green"] = Input { Value = 0.645, },
            ["Diffuse.Color.Blue"] = Input { Value = 0.25982664, },
            ["Specular.Nest"] = Input { Value = 1, },
            ["Specular.Intensity"] = Input { Value = 0, },
            ["Bumpmap.Material"] = Input {
               SourceOp = "BumpMap2",
               Source = "MaterialOutput",
            },
            MaterialID = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 480, 181.788 } },
      },
      BumpMap2 = BumpMap {
         Inputs = {
            SourceImageType = Input { Value = 1, },
            Input = Input {
               SourceOp = "CreateBumpMap1",
               Source = "Output",
            },
            MaterialID = Input { Value = 5, },
         },
         ViewInfo = OperatorInfo { Pos = { 535, 148.788 } },
      },
      NormalMap = GroupOperator {
         NameSet = true,
         Outputs = {
            Output1 = InstanceOutput {
               SourceOp = "CreateBumpMap1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo {
            Pos = { 535, 115.788 },
            Flags = {
               AllowPan = false,
               AutoSnap = true,
               RemoveRouters = true
            },
            Size = { 236, 66.3636, 118, 24.2424 },
            Direction = "Horizontal",
            PipeStyle = "Direct",
            Scale = 1,
            Offset = { -652.333, -144.182 }
         },
         Tools = ordered() {
            CreateBumpMap1 = CreateBumpMap {
               CtrlWShown = false,
               Inputs = {
                  Input = Input {
                     SourceOp = "FastNoise1",
                     Source = "Output",
                  },
                  HeightScale = Input { Value = 12.6, },
               },
               ViewInfo = OperatorInfo { Pos = { 707.333, 152.818 } },
            },
            FastNoise1 = FastNoise {
               CtrlWShown = false,
               Inputs = {
                  Width = Input { Value = 1920, },
                  Height = Input { Value = 1080, },
                  ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                  XScale = Input { Value = 80, },
               },
               ViewInfo = OperatorInfo { Pos = { 597.333, 152.818 } },
            }
         },
      },
      Reflect1 = MtlReflect {
         Inputs = {
            BackgroundMaterial = Input {
               SourceOp = "Blinn1",
               Source = "MaterialOutput",
            },
            ["Reflection.GlancingStrength"] = Input { Value = 0.354, },
            ["Reflection.Falloff"] = Input { Value = 3.654, },
            ["Reflection.Color.Material"] = Input {
               SourceOp = "DaySky1",
               Source = "Output",
            },
            ["Bumpmap.Material"] = Input {
               SourceOp = "BumpMap2",
               Source = "MaterialOutput",
            },
            MaterialID = Input { Value = 9, },
         },
         ViewInfo = OperatorInfo { Pos = { 535, 214.788 } },
      },
      DaySky1 = DaySky {
         CtrlWZoom = false,
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 480, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { 645, 214.788 } },
      },
      DisplacementMap = FastNoise {
         NameSet = true,
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Contrast = Input { Value = 3.29, },
            Brightness = Input { Value = -1, },
            XScale = Input { Value = 15.12, },
         },
         ViewInfo = OperatorInfo { Pos = { 370, 214.788 } },
      },
      ReplaceMaterial3D1 = ReplaceMaterial3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Displace3D1",
               Source = "Output",
            },
            MaterialInput = Input {
               SourceOp = "Reflect1",
               Source = "MaterialOutput",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 6, },
         },
         ViewInfo = OperatorInfo { Pos = { 535, 247.788 } },
      },
      Transform3D1_1 = Transform3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "PipeRouter1",
               Source = "Output",
            },
            ["Transform3DOp.Translate.X"] = Input { Value = 4.5941926877167, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 3.14106041776554, },
            ["Transform3DOp.Translate.Z"] = Input { Value = -5.74578446631999, },
         },
         ViewInfo = OperatorInfo { Pos = { 825, 214.5 } },
      },
      Transform3D1 = Transform3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "PipeRouter1",
               Source = "Output",
            },
            ["Transform3DOp.Translate.X"] = Input { Value = 6.84650059751249, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 2.79606792163926, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 6.04083097061504, },
         },
         ViewInfo = OperatorInfo { Pos = { 825, 181.5 } },
      },
      Displace3D1 = Displace3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Sphere",
               Source = "Output",
            },
            Scale = Input { Value = 0.331, },
            Bias = Input { Value = 1, },
            Input = Input {
               SourceOp = "DisplacementMap",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 370, 247.788 } },
      },
      Sphere = Shape3D {
         NameSet = true,
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["Transform3DOp.Rotate.X"] = Input { Value = -90, },
            Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 4, },
            ["SurfaceSphereInputs.SubdivisionLevelBase"] = Input { Value = 100, },
            ["SurfaceSphereInputs.SubdivisionLevelHeight"] = Input { Value = 100, },
            ["SurfaceSphereInputs.ObjectID.Nest"] = Input { Value = 1, },
            ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 3, }
         },
         ViewInfo = OperatorInfo { Pos = { 260, 247.788 } },
      },
      PipeRouter1 = PipeRouter {
         Inputs = {
            Input = Input {
               SourceOp = "ReplaceMaterial3D1",
               Source = "Output",
            },
         },
         ViewInfo = PipeRouterInfo { Pos = { 715, 247.5 } },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Transform3D1_1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "PipeRouter1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "Transform3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1045, 247.5 } },
      },
      Duplicate3D1 = Duplicate3D {
         Inputs = {
            LastCopy = Input { Value = 10, },
            ["Translate.X"] = Input { Value = 5.81131616130043, },
            ["JitterTranslate.X"] = Input { Value = 10, },
            ["JitterTranslate.Y"] = Input { Value = 30, },
            ["JitterTranslate.Z"] = Input { Value = 30, },
            SceneInput = Input {
               SourceOp = "PipeRouter1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 825, 313.5 } },
      }
   }
}


The Translation controls in the Duplicate3D will evenly distribute the copies in the direction you move them. The Jitter controls will randomize the translations. Be aware that the result of the Duplicate3D makes all of the copies part of the same object—they can't easily be separated and treated individually.
Bryan Ray
http://www.bryanray.name
http://www.sidefx.com

Return to Fusion

Who is online

Users browsing this forum: No registered users and 28 guests