Jump to: Board index » General » Fusion

Making a video wall (or whatever it is called)?

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

Darren Cook

  • Posts: 23
  • Joined: Fri Sep 29, 2017 3:31 pm

Making a video wall (or whatever it is called)?

PostFri Jan 12, 2018 1:22 pm

I've dragged, say, 16 video clips into Fusion (by default they get joined up in a long merge sequence) and would like to arrange them in a 4x4 grid, each scaled, and each looping. Is there an easy way to do this?

Currently all I've come up with is that I will need to go through the Merge of each pair of clips, and set size and centre for each. By hand. Then rearrange all the merges into a binary tree, instead of a pipeline.

(I had thought this would be trivially easy, as I was hoping I could then go even further and map them on to a spinning globe, and other fancy stuff like that.)
Offline

Sander de Regt

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

Re: Making a video wall (or whatever it is called)?

PostFri Jan 12, 2018 2:57 pm

How could this be trivally easy? Can you give us an example of the workflow you had in mind?
For example: you could start by making one merge(or transform tool) the size you want to and then copy/paste that 16 times. Even better paste it as an instance and you can adjust all sizes the same way at the same time.
If you want to map them on a spinning globe you can make one background in your intended size, merge all loaders on top of that and use the result as the texture for a 3D sphere.

There are some options to make your life easier, but when you're working with 16 different source, some manual adjustments will be part of the deal.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

Okke Verbart

  • Posts: 103
  • Joined: Tue Jan 17, 2017 8:40 pm

Re: Making a video wall (or whatever it is called)?

PostFri Jan 12, 2018 4:01 pm

Maybe a bit overkill, but you could use a particle system to generate the matrix/wall. I actually recently did a tutorial on that (see below) and provided some templates, including what I call a "bare bones" template. I adapted this one to display an example 3x3 video wall. In the pCustom (in the numbers tab) you can change the size of the matrix/wall and the distance between the screens). The individual "screens" are essentially 3D Imageplanes (added in via a replicate 3D). For now just 2 "screens", but add as many as you want (but ensure that the pCustom creates a big enough matrix to show them all).

Code: Select all
{
   Tools = ordered() {
      Background2 = Background {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Type = Input { Value = FuID { "Gradient" }, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 1, 0, 0, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 413.956, -148.366 } },
      },
      Background3 = Background {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Type = Input { Value = FuID { "Gradient" }, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 1, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 414.956, -70.366 } },
      },
      ImagePlane3D2 = ImagePlane3D {
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 4, },
            MaterialInput = Input {
               SourceOp = "Background3",
               Source = "Output",
            },
            ["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 524.956, -70.366 } },
      },
      ImagePlane3D1 = ImagePlane3D {
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
            MaterialInput = Input {
               SourceOp = "Background2",
               Source = "Output",
            },
            ["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 523.956, -148.366 } },
      },
      Background1 = Background {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 1, },
            TopLeftGreen = Input { Value = 1, },
            TopLeftBlue = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 350.956, -28.366 } },
      },
      pCustom1 = pCustom {
         ID = 4,
         CtrlWZoom = false,
         EnabledRegion = TimeRegion { { Start = 0, End = 1007.9999 } },
         Inputs = {
            Setup1 = Input { Value = "((n1-1)/2*n4)", },
            Setup2 = Input { Value = "((n2-1)/2)*n5)", },
            Setup3 = Input { Value = "((n3-1)/2*n6)", },
            Intermediate1 = Input { Value = "id-2", },
            PositionXExpression = Input { Value = "(i1%n1)*n4 -s1", },
            PositionYExpression = Input { Value = "((( floor(i1/n1) )%n2)*n5)-s2", },
            PositionZExpression = Input { Value = "((floor(i1/(n1*n2)))*n6)-s3", },
            RedExpression = Input { Value = "getr1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))", },
            GreenExpression = Input { Value = "getg1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))", },
            BlueExpression = Input { Value = "getb1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))", },
            AlphaExpression = Input { Value = "if(geta1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))<0.7,0,1)", },
            MassExpression = Input { Value = "mass ", },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
            Image1 = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            NumberIn1 = Input { Value = 3, },
            NumberIn2 = Input { Value = 3, },
            NumberIn3 = Input { Value = 1, },
            NumberIn4 = Input { Value = 1, },
            NumberIn5 = Input { Value = 0.5625, },
            NumberIn6 = Input { Value = 0.2, }
         },
         ViewInfo = OperatorInfo { Pos = { 357, 81.5 } },
         UserControls = ordered() {
            NumberIn1 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 100,
               INP_Default = 10,
               INP_MinScale = 1,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 1 - Width"
            },
            NumberIn2 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 100,
               INP_Default = 10,
               INP_MinScale = 1,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 2 - Height"
            },
            NumberIn3 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 100,
               INP_Default = 10,
               INP_MinScale = 1,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 3 - Depth"
            },
            NumberIn4 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = false,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 20,
               INP_Default = 0.200000002980232,
               INP_MinScale = 0,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 4 - Distance Width"
            },
            NumberIn5 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = false,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 20,
               INP_Default = 0.200000002980232,
               INP_MinScale = 0,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 5 - Distance Height"
            },
            NumberIn6 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = false,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 20,
               INP_Default = 0.200000002980232,
               INP_MinScale = 0.00999999977648258,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 6 - Distance Depth"
            }
         }
      },
      pEmitter1 = pEmitter {
         ID = 1,
         Inputs = {
            Number = Input {
               Value = 9,
               Expression = "iif(time==0, pCustom1.NumberIn1*pCustom1.NumberIn2*pCustom1.NumberIn3,0)",
            },
            Lifespan = Input { Value = 350, },
            RotationControls = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStyleBlob" }, },
            ["ParticleStyle.ColorControls"] = Input { Value = 1, },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 1, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeoverLife",
               Source = "Value",
            },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BluroverLife2D",
               Source = "Value",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 219, 82.5 } },
      },
      pEmitter1SizeoverLife = 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 },
         NameSet = true,
      },
      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 },
         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 = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Input = Input {
               SourceOp = "pCustom1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 503, 83.5 } },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Replicate3D1",
               Source = "Data3D",
            },
            SceneInput6 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 770, 84.5 } },
      },
      Replicate3D1 = Replicate3D {
         Inputs = {
            ScaleNest = Input { Value = 1, },
            ScaleLock = Input { Value = 0, },
            Destination = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
            Input1 = Input {
               SourceOp = "ImagePlane3D2",
               Source = "Output",
            },
            Input2 = Input {
               SourceOp = "ImagePlane3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 634, 84.5 } },
      },
      Renderer3D1 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            ["RendererSoftware.ShadowsEnabled"] = Input { Value = 1, },
            ["RendererSoftware.Channels.Nest"] = Input { Value = 1, },
            ["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            RendererType = Input { Value = FuID { "RendererOpenGL" }, },
            ["RendererOpenGL.Channels.Nest"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.RGBASS"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.ZSS"] = Input { Value = 1, },
            ["RendererOpenGL.AccumQuality"] = Input { Value = 7, },
            ["RendererOpenGL.DoFBlur"] = Input { Value = 0.075, },
            ["RendererOpenGL.Texturing"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 958.75, 83.5 } },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input { Value = 2.61, },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
            AoV = Input { Value = 36.0073770775589, },
            FLength = Input { Value = 23.2123443, },
            PlaneOfFocus = Input { Value = 2.895, },
            ["Stereo.Mode"] = Input { Value = FuID { "Mono" }, },
            FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
            ControlVis = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 5, },
         },
         ViewInfo = OperatorInfo { Pos = { 672.42, 175.015 } },
      }
   }
}


My tutorial:

www.ablackbirdcalledsue.com
Offline

Darren Cook

  • Posts: 23
  • Joined: Fri Sep 29, 2017 3:31 pm

Re: Making a video wall (or whatever it is called)?

PostFri Jan 12, 2018 4:47 pm

> How could this be trivally easy? Can you give us an example of the workflow you had in mind?

The ideal UX might be something like this:

Connect the 16 clips up to a "Grid Layout" node. (It'd be like the Replicate3D node in allowing any number of inputs.) In settings, choose 4 rows and 4 columns. It would take care of working out the offset and resizing of each clip. Maybe options for margins. Maybe an "advanced layout" where you can specify rowspan/colspan (like in HTML tables)??

Just tried Okke Verbart's solution, and after dragging in 9 images, cloning the ImagePlane, and joining them to the Replicate3D node, it does indeed work. (I also had to check "loop" on each clip loader.)
A bit complex to configure and understand and, as you say, it is overkill if I just wanted 2D. On the other hand, I just swapped in a different pEmitter, and created a video fountain :-) Thanks for the idea!
Offline

Okke Verbart

  • Posts: 103
  • Joined: Tue Jan 17, 2017 8:40 pm

Re: Making a video wall (or whatever it is called)?

PostFri Jan 12, 2018 5:58 pm

Hey Darren - glad you got some ideas from it :-)

Whilst it may seem overkill etc, the more I think about it, the more sense it makes: especially if you need to do these things more than once. You can easily build a little front-end for the flow (i.e. a macro) with the key parameters, and off you go. Also, with this approach, animating the wall (if required) would be easy. In the example below I added another input to the Pcustom: a FastNoiseTool. I updated the Z-position expression of the pCustom to essentially read red channel info from the FastNoise based on the Particle ID. This then creates a (semi-)random Z-position that you can vary in strenght via the Numberin7 (1 is full 0 is no variation --> all planes aligned on the z-axis).

If you play this (0-60) you see a simple animation illustrating the above.

Code: Select all
{
   Tools = ordered() {
      Background3 = Background {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Type = Input { Value = FuID { "Gradient" }, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 1, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 414.956, -70.366 } },
      },
      Background1 = Background {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 1, },
            TopLeftGreen = Input { Value = 1, },
            TopLeftBlue = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 350.956, -28.366 } },
      },
      Background2 = Background {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Type = Input { Value = FuID { "Gradient" }, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 1, 0, 0, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 413.956, -148.366 } },
      },
      pCustom1 = pCustom {
         ID = 4,
         CtrlWZoom = false,
         EnabledRegion = TimeRegion { { Start = 0, End = 1007.9999 } },
         Inputs = {
            NumberIn7 = Input {
               SourceOp = "pCustom1NumberIn7",
               Source = "Value",
            },
            Setup1 = Input { Value = "((n1-1)/2*n4)", },
            Setup2 = Input { Value = "((n2-1)/2)*n5)", },
            Setup3 = Input { Value = "((n3-1)/2*n6)", },
            Intermediate1 = Input { Value = "id-2", },
            PositionXExpression = Input { Value = "(i1%n1)*n4 -s1", },
            PositionYExpression = Input { Value = "((( floor(i1/n1) )%n2)*n5)-s2", },
            PositionZExpression = Input { Value = "n7 * 4 * getr2w(i1/100,i1/100)", },
            RedExpression = Input { Value = "getr1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))", },
            GreenExpression = Input { Value = "getg1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))", },
            BlueExpression = Input { Value = "getb1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))", },
            AlphaExpression = Input { Value = "if(geta1d((i1%n1)/(n1-1), floor((i1/n1)%n2)/(n2-1))<0.7,0,1)", },
            MassExpression = Input { Value = "mass ", },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
            Image1 = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Image2 = Input {
               SourceOp = "FastNoise1",
               Source = "Output",
            },
            NumberIn1 = Input { Value = 3, },
            NumberIn2 = Input { Value = 3, },
            NumberIn3 = Input { Value = 1, },
            NumberIn4 = Input {
               SourceOp = "pCustom1NumberIn4DistanceWidth",
               Source = "Value",
            },
            NumberIn5 = Input {
               SourceOp = "pCustom1NumberIn5DistanceHeight",
               Source = "Value",
            },
            NumberIn6 = Input { Value = 0.2, }
         },
         ViewInfo = OperatorInfo { Pos = { 357, 81.5 } },
         UserControls = ordered() {
            NumberIn1 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 100,
               INP_Default = 10,
               INP_MinScale = 1,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 1 - Width"
            },
            NumberIn2 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 100,
               INP_Default = 10,
               INP_MinScale = 1,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 2 - Height"
            },
            NumberIn3 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 100,
               INP_Default = 10,
               INP_MinScale = 1,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 3 - Depth"
            },
            NumberIn4 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = false,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 20,
               INP_Default = 0.200000002980232,
               INP_MinScale = 0,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 4 - Distance Width"
            },
            NumberIn5 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = false,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 20,
               INP_Default = 0.200000002980232,
               INP_MinScale = 0,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 5 - Distance Height"
            },
            NumberIn6 = {
               INP_MaxAllowed = 1000000,
               INP_Integer = false,
               INPID_InputControl = "ScrewControl",
               INP_MaxScale = 20,
               INP_Default = 0.200000002980232,
               INP_MinScale = 0.00999999977648258,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               ICS_ControlPage = "Numbers",
               LINKS_Name = "Number In 6 - Distance Depth"
            }
         }
      },
      pCustom1NumberIn7 = BezierSpline {
         SplineColor = { Red = 233, Green = 19, Blue = 5 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1, RH = { 20, 0.666666666666667 }, Flags = { Linear = true } },
            [60] = { 0, LH = { 40, 0.333333333333333 }, Flags = { Linear = true } }
         }
      },
      pCustom1NumberIn4DistanceWidth = BezierSpline {
         SplineColor = { Red = 233, Green = 19, Blue = 61 },
         NameSet = true,
         KeyFrames = {
            [0] = { 3.28, RH = { 20, 2.52 }, Flags = { Linear = true } },
            [60] = { 1, LH = { 40, 1.76 }, Flags = { Linear = true } }
         }
      },
      pCustom1NumberIn5DistanceHeight = BezierSpline {
         SplineColor = { Red = 233, Green = 19, Blue = 144 },
         NameSet = true,
         KeyFrames = {
            [0] = { 2.4, RH = { 20, 1.7875 }, Flags = { Linear = true } },
            [60] = { 0.5625, LH = { 40, 1.175 }, Flags = { Linear = true } }
         }
      },
      pEmitter1 = pEmitter {
         ID = 1,
         Inputs = {
            Number = Input {
               Value = 0,
               Expression = "iif(time==0, pCustom1.NumberIn1*pCustom1.NumberIn2*pCustom1.NumberIn3,0)",
            },
            Lifespan = Input { Value = 350, },
            RotationControls = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStyleBlob" }, },
            ["ParticleStyle.ColorControls"] = Input { Value = 1, },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 1, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeoverLife",
               Source = "Value",
            },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BluroverLife2D",
               Source = "Value",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 219, 82.5 } },
      },
      pEmitter1SizeoverLife = 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 },
         NameSet = true,
      },
      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 },
         NameSet = true,
      },
      ImagePlane3D2 = ImagePlane3D {
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 4, },
            MaterialInput = Input {
               SourceOp = "Background3",
               Source = "Output",
            },
            ["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 524.956, -70.366 } },
      },
      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 = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Input = Input {
               SourceOp = "pCustom1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 503, 83.5 } },
      },
      ImagePlane3D1 = ImagePlane3D {
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
            MaterialInput = Input {
               SourceOp = "Background2",
               Source = "Output",
            },
            ["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 523.956, -148.366 } },
      },
      FastNoise1 = FastNoise {
         Inputs = {
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Detail = Input { Value = 4.15, },
            Contrast = Input { Value = 2.812, },
            Brightness = Input { Value = 0.137, },
            XScale = Input { Value = 16.84, },
            Seethe = Input { Value = 0.035, },
         },
         ViewInfo = OperatorInfo { Pos = { 341.412, 152.546 } },
      },
      Replicate3D1 = Replicate3D {
         Inputs = {
            ScaleNest = Input { Value = 1, },
            ScaleLock = Input { Value = 0, },
            Destination = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
            Input1 = Input {
               SourceOp = "ImagePlane3D2",
               Source = "Output",
            },
            Input2 = Input {
               SourceOp = "ImagePlane3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 634, 84.5 } },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Replicate3D1",
               Source = "Data3D",
            },
            SceneInput6 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 770, 84.5 } },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input { Value = 2.61, },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
            AoV = Input { Value = 36.0073770775589, },
            FLength = Input { Value = 23.2123443, },
            PlaneOfFocus = Input { Value = 2.895, },
            ["Stereo.Mode"] = Input { Value = FuID { "Mono" }, },
            FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
            ControlVis = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 5, },
         },
         ViewInfo = OperatorInfo { Pos = { 895.42, 180.015 } },
      },
      Renderer3D1 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            ["RendererSoftware.ShadowsEnabled"] = Input { Value = 1, },
            ["RendererSoftware.Channels.Nest"] = Input { Value = 1, },
            ["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            RendererType = Input { Value = FuID { "RendererOpenGL" }, },
            ["RendererOpenGL.Channels.Nest"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.RGBASS"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.ZSS"] = Input { Value = 1, },
            ["RendererOpenGL.AccumQuality"] = Input { Value = 7, },
            ["RendererOpenGL.DoFBlur"] = Input { Value = 0.075, },
            ["RendererOpenGL.Texturing"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 958.75, 83.5 } },
      }
   }
}
www.ablackbirdcalledsue.com
Offline

Abdul Majeed

  • Posts: 36
  • Joined: Fri Aug 05, 2016 3:44 pm

Making a video wall (or whatever it is called)?

PostMon Jan 15, 2018 8:05 pm

Few days back i made a 64 clip video wall in fusion, it was hard, after I completed it, I made exactly same again in after effects, it was much much easier, but I liked the fusion version because of the “overview” i have on the whole project.
And no there is no easy way, its all one by one alignment resizing masking etc.
OS: Windows 10 Pro v1803 OS Build 16299.371 64-bit
Motherboard: ASUS X99-E WS CPU: Intel Xeon E5-1650 v3 3.50GHz RAM: 4x 16 Kingston DDR4 2133MHz ECC
GPU: GeForce GTX 780 / DaVinci Resolve 15.4b
Offline

Okke Verbart

  • Posts: 103
  • Joined: Tue Jan 17, 2017 8:40 pm

Re: Making a video wall (or whatever it is called)?

PostTue Jan 16, 2018 7:36 am

I'd still say that if you have a repeated need, the way I indicated is flexible and doesn't require manual adjustment of the inputs --> only requirement is a one time alignment of the X and Y distance in the pCustom and then position the Camera in Z-Space as required (even that could easily be automated).

That said, I haven't tried it with "real" video inputs, just with a bunch of background nodes, but I currently can't see a downside.
www.ablackbirdcalledsue.com

Return to Fusion

Who is online

Users browsing this forum: Fernando Vargas and 7 guests