Page 1 of 1

Tracking a panorama

PostPosted: Thu Dec 05, 2019 5:27 pm
by GrahamMYC
I have a project where I want to add names of places to a large(ish) map while I pan across the map. The names will eventually disappear off the edge as I pan across, and will not reappear.
Clearly I can track a map feature near the place.
Is there a 'best practice' procedure for doing this in Fusion?

Re: Tracking a panorama

PostPosted: Fri Dec 06, 2019 4:49 pm
by Yuri V. Nemets
Do it in 3D space (big image on an ImagePlane, and few 3Dtext layers) and panning camera.

Code: Select all
{
   Tools = ordered() {
      Text3D1_1_1 = Text3D {
         CtrlWZoom = false,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 0.167022480114074, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 0.0931848999709993, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 0.0634852927291943, },
            Green1 = Input { Value = 0, },
            Blue1 = Input { Value = 0, },
            StyledText = Input { Value = "Text Again", },
            Font = Input { Value = "Open Sans", },
            Style = Input { Value = "Bold", },
            Size = Input { Value = 0.04, },
            VerticalTopCenterBottom = Input { Value = 1, },
            VerticalJustification = Input { Value = 3, },
            VerticalJustificationNew = Input { Value = 3, },
            HorizontalJustificationNew = Input { Value = 3, },
            ExtrusionProfile = Input {
               SourceOp = "Text3D1_1_1ExtrusionProfile",
               Source = "Value",
            },
            ManualFontKerningPlacement = Input {
               Value = StyledText {
                  Array = {
                  },
                  Value = ""
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 550, 214.5 } },
      },
      Text3D1_1_1ExtrusionProfile = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0, RH = { 0.0666666666666667, 0.333333333333333 }, Flags = { Linear = true } },
               [0.2] = { 1, LH = { 0.133333333333333, 0.666666666666667 }, RH = { 0.4, 1 }, Flags = { Linear = true } },
               [0.8] = { 1, LH = { 0.6, 1 }, RH = { 0.866666666666667, 0.666666666666667 }, Flags = { Linear = true } },
               [1] = { 0, LH = { 0.933333333333333, 0.333333333333333 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         NameSet = true,
      },
      Text3D1_1 = Text3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 0.144679846526252, },
            ["Transform3DOp.Translate.Y"] = Input { Value = -0.378195669636839, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 0.0634852927291943, },
            Green1 = Input { Value = 0, },
            Blue1 = Input { Value = 0, },
            StyledText = Input { Value = "Another text", },
            Font = Input { Value = "Open Sans", },
            Style = Input { Value = "Bold", },
            Size = Input { Value = 0.04, },
            VerticalTopCenterBottom = Input { Value = 1, },
            VerticalJustification = Input { Value = 3, },
            VerticalJustificationNew = Input { Value = 3, },
            HorizontalJustificationNew = Input { Value = 3, },
            ExtrusionProfile = Input {
               SourceOp = "Text3D1_1ExtrusionProfile",
               Source = "Value",
            },
            ManualFontKerningPlacement = Input {
               Value = StyledText {
                  Array = {
                  },
                  Value = ""
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 440, 214.5 } },
      },
      Text3D1_1ExtrusionProfile = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0, RH = { 0.0666666666666667, 0.333333333333333 }, Flags = { Linear = true } },
               [0.2] = { 1, LH = { 0.133333333333333, 0.666666666666667 }, RH = { 0.4, 1 }, Flags = { Linear = true } },
               [0.8] = { 1, LH = { 0.6, 1 }, RH = { 0.866666666666667, 0.666666666666667 }, Flags = { Linear = true } },
               [1] = { 0, LH = { 0.933333333333333, 0.333333333333333 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         NameSet = true,
      },
      Text3D1 = Text3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = -0.266994988377281, },
            ["Transform3DOp.Translate.Y"] = Input { Value = -0.394827954927898, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 0.0634852927291943, },
            Green1 = Input { Value = 0, },
            Blue1 = Input { Value = 0, },
            StyledText = Input { Value = "Some words", },
            Font = Input { Value = "Open Sans", },
            Style = Input { Value = "Bold", },
            Size = Input { Value = 0.04, },
            VerticalTopCenterBottom = Input { Value = 1, },
            VerticalJustification = Input { Value = 3, },
            VerticalJustificationNew = Input { Value = 3, },
            HorizontalJustificationNew = Input { Value = 3, },
            ExtrusionProfile = Input {
               SourceOp = "Text3D1ExtrusionProfile",
               Source = "Value",
            },
            ManualFontKerningPlacement = Input {
               Value = StyledText {
                  Array = {
                  },
                  Value = ""
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 330, 181.5 } },
      },
      Text3D1ExtrusionProfile = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0, RH = { 0.0196116135138184, 0.098058067569092 }, Flags = { Linear = true } },
               [0.2] = { 1, LH = { 0.180388386486182, 0.901941932430908 }, RH = { 0.3, 1 }, Flags = { Linear = true } },
               [0.8] = { 1, LH = { 0.7, 1 }, RH = { 0.819611613513818, 0.901941932430908 }, Flags = { Linear = true } },
               [1] = { 0, LH = { 0.980388386486182, 0.098058067569092 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         NameSet = true,
      },
      Renderer3D1 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 2048, },
            Height = Input { Value = 1152, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            RendererType = Input { Value = FuID { "RendererOpenGL" }, },
            ["RendererOpenGL.AntiAliasing.Channels.RGBA.HighQuality.Enable"] = Input { Value = 1, },
            ["RendererOpenGL.AntiAliasing.Presets.Color.Supersampling.HighQuality.RateX"] = Input { Value = 3, },
            ["RendererOpenGL.AntiAliasing.Presets.Color.Supersampling.HighQuality.RateY"] = Input { Value = 3, },
            ["RendererOpenGL.AntiAliasing.Presets.Color.Multisampling.LowQuality.SampleCount"] = Input { Value = 2, },
            ["RendererOpenGL.AntiAliasing.Presets.Color.Multisampling.HighQuality.SampleCount"] = Input { Value = 3, },
            ["RendererOpenGL.AntiAliasing.Presets.Aux.Supersampling.HighQuality.RateX"] = Input { Value = 3, },
            ["RendererOpenGL.AntiAliasing.Presets.Aux.Supersampling.HighQuality.RateY"] = Input { Value = 3, },
            ["RendererOpenGL.AntiAliasing.Presets.Aux.Multisampling.LowQuality.SampleCount"] = Input { Value = 2, },
            ["RendererOpenGL.AntiAliasing.Presets.Aux.Multisampling.HighQuality.SampleCount"] = Input { Value = 3, },
            ["RendererOpenGL.AccumQuality"] = Input { Value = 32, },
         },
         ViewInfo = OperatorInfo { Pos = { 550, 115.5 } },
         SubInputsData = {
            RendererOpenGL = {
               Version = 1
            }
         }
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "ImagePlane3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "Text3D1",
               Source = "Output",
            },
            SceneInput4 = Input {
               SourceOp = "Text3D1_1",
               Source = "Output",
            },
            SceneInput5 = Input {
               SourceOp = "Text3D1_1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 440, 115.5 } },
      },
      ImagePlane3D1 = ImagePlane3D {
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            MaterialInput = Input {
               SourceOp = "FastNoise1",
               Source = "Output",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 330, 115.5 } },
      },
      FastNoise1 = FastNoise {
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 8000, },
            Height = Input { Value = 8000, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Detail = Input { Value = 1.1, },
            Contrast = Input { Value = 2.97, },
            XScale = Input { Value = 20, },
            Discontinuous = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 220, 115.5 } },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input {
               SourceOp = "Camera3D1XOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Y"] = Input {
               SourceOp = "Camera3D1YOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Z"] = Input {
               SourceOp = "Camera3D1ZOffset",
               Source = "Value",
            },
            AoV = Input { Value = 19.2642683071402, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" }, },
            FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
            ApertureW = Input { Value = 0.831496062992126, },
            ApertureH = Input { Value = 0.467716535433071, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 440, 49.5 } },
      },
      Camera3D1XOffset = BezierSpline {
         SplineColor = { Red = 250, Green = 59, Blue = 49 },
         NameSet = true,
         KeyFrames = {
            [0] = { -0.279926090517678, RH = { 8.33333333333333, -0.139896653595993 }, Flags = { Linear = true } },
            [25] = { 0.140162220247376, LH = { 16.6666666666667, 0.000132783325691166 }, RH = { 30, 0.140162220247376 }, Flags = { Linear = true } },
            [40] = { 0.140162220247376, LH = { 35, 0.140162220247376 }, RH = { 43, 0.140162220247376 }, Flags = { Linear = true } },
            [49] = { 0.140162220247376, LH = { 46, 0.140162220247376 }, RH = { 52.6666666666667, 0.00699235927121133 }, Flags = { Linear = true } },
            [60] = { -0.259347362681117, LH = { 56.3333333333333, -0.126177501704953 }, RH = { 63.3333333333333, -0.259347362681117 }, Flags = { Linear = true } },
            [70] = { -0.259347362681117, LH = { 66.6666666666667, -0.259347362681117 }, Flags = { Linear = true } }
         }
      },
      Camera3D1YOffset = BezierSpline {
         SplineColor = { Red = 252, Green = 131, Blue = 47 },
         NameSet = true,
         KeyFrames = {
            [0] = { -0.370793207930105, RH = { 8.33333333333333, -0.370793207930105 }, Flags = { Linear = true } },
            [25] = { -0.370793207930105, LH = { 16.6666666666667, -0.370793207930105 }, RH = { 27.6666666666667, -0.370793207930105 }, Flags = { Linear = true } },
            [33] = { -0.370793207930105, LH = { 30.3333333333333, -0.370793207930105 }, RH = { 35.3333333333333, -0.211266721877227 }, Flags = { Linear = true } },
            [40] = { 0.107786250228529, LH = { 37.6666666666667, -0.0517402358243487 }, RH = { 43, 0.107786250228529 }, Flags = { Linear = true } },
            [49] = { 0.107786250228529, LH = { 46, 0.107786250228529 }, RH = { 56, 0.107786250228529 }, Flags = { Linear = true } },
            [70] = { 0.107786250228529, LH = { 63, 0.107786250228529 }, RH = { 75.6666666666667, 0.190084272048649 }, Flags = { Linear = true } },
            [87] = { 0.354680315688888, LH = { 81.3333333333333, 0.272382293868768 }, Flags = { Linear = true } }
         }
      },
      Camera3D1ZOffset = BezierSpline {
         SplineColor = { Red = 254, Green = 207, Blue = 46 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0.725821352810863, RH = { 13.3333333333333, 0.725821352810863 }, Flags = { Linear = true } },
            [40] = { 0.725821352810863, LH = { 26.6666666666667, 0.725821352810863 }, RH = { 43, 0.725821352810863 }, Flags = { Linear = true } },
            [49] = { 0.725821352810863, LH = { 46, 0.725821352810863 }, RH = { 56, 0.725821352810863 }, Flags = { Linear = true } },
            [70] = { 0.725821352810863, LH = { 63, 0.725821352810863 }, Flags = { Linear = true } }
         }
      }
   }
}

Re: Tracking a panorama

PostPosted: Tue Dec 10, 2019 5:26 am
by Nathan Shirley
I never would have guessed you have to do this in 3D, thanks! This has been driving me crazy trying to figure out why my image was getting cropped before. Now if Resolve just removed that 16k limit on image resolution... no images larger than 15,360 by 8,640 display in Resolve. So if your map is larger than that you're in for a serious work-around.

For anyone still not clear on how to set this up in Fusion:

Add a "Fusion Composition" to your timeline in "Edit"
With the playhead on that clip, open Fusion.
Import your image into Fusion, it will be generated in a "MediaIn" node.
You'll need to add and connect the following notes between "MediaIn" and "MediaOut" (left to right):
"ImagePlane3D"
"Renderer3D"
"Transform"

Once all 5 nodes are connected, you should be able to use the "Transform" node to zoom/pan. I tried to do this in "ImagePlane3D" directly, without the Transform node, but it seems to limit how far you can zoom in... before the image just disappears.

Re: Tracking a panorama

PostPosted: Tue Dec 10, 2019 9:19 am
by Sander de Regt
If you say 'pan across the map' do you mean you actully film a map with a camera that you need to track or do you have a large scan that you move around in Fusion.

If it's the former you need to actually track the plate, if it's the latter you can 'prebuild' the map with all the names on top of it and then move that intermediate result around in Fusion.

Re: Tracking a panorama

PostPosted: Sat Dec 21, 2019 3:30 pm
by GrahamMYC
In the end I opted for pre labelling the large map - 3D is a bit beyond me at present. In attempting to add and locate names as text nodes in fusion I quickly came up against the resource limit on my PC ( a fairly high end Dell laptop).

But many thanks for giving me the advice.