Jump to: Board index » General » Fusion

Looking for 3D (un)folding map animations

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

pinthenet

  • Posts: 143
  • Joined: Mon May 18, 2020 3:23 pm
  • Real Name: John Payne

Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 7:16 am

I've tried to find Fusion examples but have failed. I found 2 Ae solutions


and I get the general idea but my Fusion skills are not far enough.
Can anyone help?
[size=85]
PC: Intel i5-12600K /32GB/RTX3060-12GB
Windows 11 Pro; NVIDIA 552.22 Studio; Resolve+Fusion 19B
Offline

Sander de Regt

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

Re: Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 9:51 am

It's not as easy as shown in these tutorials, but I managed to set up something similar in about 20 minutes. The way Fusion's parenting works is quite different from AEs, so I got lost in thinking what to connect to what, so I worked around it. I'm considering doing a walkthrough video, because it's kind of a fun way of showing the capabilities of Fusion.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

pinthenet

  • Posts: 143
  • Joined: Mon May 18, 2020 3:23 pm
  • Real Name: John Payne

Re: Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 11:18 am

Looking forward to that. I also found some blender tuts too, i'm more at home there
[size=85]
PC: Intel i5-12600K /32GB/RTX3060-12GB
Windows 11 Pro; NVIDIA 552.22 Studio; Resolve+Fusion 19B
Offline

pinthenet

  • Posts: 143
  • Joined: Mon May 18, 2020 3:23 pm
  • Real Name: John Payne

Re: Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 3:39 pm

I started with Fusion but I reached the parenting point and don't know how to proceed. I'll wait for your walkthrough
[size=85]
PC: Intel i5-12600K /32GB/RTX3060-12GB
Windows 11 Pro; NVIDIA 552.22 Studio; Resolve+Fusion 19B
Offline

Sander de Regt

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

Re: Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 3:46 pm

I don't know yet, when I'll have time to do the video, so give this a try to get you started.

Code: Select all
{
   Tools = ordered() {
      Part1 = Shape3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            ["MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, }
         },
         ViewInfo = OperatorInfo { Pos = { 220, -16.5 } },
      },
      Part2 = Shape3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 1, },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            ["MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, }
         },
         ViewInfo = OperatorInfo { Pos = { 220, 16.5 } },
      },
      Part3 = Shape3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 2, },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            ["MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, }
         },
         ViewInfo = OperatorInfo { Pos = { 220, 49.5 } },
      },
      Part4 = Shape3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 3, },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            ["MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 4, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 4, }
         },
         ViewInfo = OperatorInfo { Pos = { 220, 82.5 } },
      },
      DezeDraait3_4_5_samen = Merge3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Rotate.Y"] = Input {
               Value = -63.6492,
               Expression = "(FoldingTheMap.FoldingSlider*-89.9)*2",
            },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = 1.5, },
            SceneInput1 = Input {
               SourceOp = "Part3",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "DezeDraait_4_en_5_samen",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 495, 49.5 } },
      },
      DezeDraait5 = Shape3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 4, },
            ["Transform3DOp.Rotate.Y"] = Input {
               Value = -63.6492,
               Expression = "(FoldingTheMap.FoldingSlider*-89.9)*2",
            },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            ["MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 5, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 5, }
         },
         ViewInfo = OperatorInfo { Pos = { 220, 115.5 } },
      },
      DezeDraait_4_en_5_samen = Merge3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Rotate.Y"] = Input {
               Value = 63.6492,
               Expression = "(FoldingTheMap.FoldingSlider*89.9)*2",
            },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = 2.5, },
            SceneInput1 = Input {
               SourceOp = "Part4",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "DezeDraait5",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 385, 115.5 } },
      },
      DezeDraait_2_3_4_en_5_samen = Merge3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Rotate.Y"] = Input {
               Value = 63.6492,
               Expression = "(FoldingTheMap.FoldingSlider*89.9)*2",
            },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = 0.5, },
            SceneInput1 = Input {
               SourceOp = "Part2",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "DezeDraait3_4_5_samen",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 605, 16.5 } },
      },
      DezeDraaitAlles = Merge3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Rotate.Y"] = Input {
               Value = -31.8246,
               Expression = "FoldingTheMap.FoldingSlider*-89.9",
            },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            SceneInput1 = Input {
               SourceOp = "Part1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "DezeDraait_2_3_4_en_5_samen",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 715, -16.5 } },
      },
      FoldingTheMap = Transform3D {
         CtrlWZoom = false,
         NameSet = true,
         Inputs = {
            SceneInput = Input {
               SourceOp = "DezeDraaitAlles",
               Source = "Output",
            },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -0.5, },
            ["Transform3DOp.ScaleLock"] = Input { Value = 0, },
            FoldingSlider = Input { Value = 0.354, }
         },
         ViewInfo = OperatorInfo { Pos = { 935, -16.5 } },
         UserControls = ordered() {
            FoldingSlider = {
               INP_Default = 0,
               INP_Integer = false,
               ICS_ControlPage = "3D",
               LINKID_DataType = "Number",
               INP_MinScale = 0,
               INPID_InputControl = "SliderControl",
               INP_MaxScale = 1,
               LINKS_Name = "FoldingSlider",
            }
         }
      }
   }
}
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

pinthenet

  • Posts: 143
  • Joined: Mon May 18, 2020 3:23 pm
  • Real Name: John Payne

Re: Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 4:22 pm

That's clever, thanks very much. I'll play around with this and try to work out your logic.
[size=85]
PC: Intel i5-12600K /32GB/RTX3060-12GB
Windows 11 Pro; NVIDIA 552.22 Studio; Resolve+Fusion 19B
Offline

KrunoSmithy

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

Re: Looking for 3D (un)folding map animations

PostFri Apr 26, 2024 7:22 pm

pinthenet wrote:I've tried to find Fusion examples but have failed. I found 2 Ae solutions
and I get the general idea but my Fusion skills are not far enough.
Can anyone help?


You can use image plane 3D nodes and just animate simple unfolding, but you might not get smooth seems, so I would suggest displace 3D node and a gradient.

You can do it easily with a displace3D node. Just animate it. Here are some examples or something similar I did. Use a gradient like background node in gradient mode and displace your map image and animate the process of displacement. Use a blur node in between displace3D and gradient for smoother gradient. Make sure you have enough subdivisions set high enough on your image plane 3D node.

sshot-3816.jpg
sshot-3816.jpg (153.78 KiB) Viewed 993 times


sshot-3815.jpg
sshot-3815.jpg (168.17 KiB) Viewed 993 times


sshot-3814.jpg
sshot-3814.jpg (176.59 KiB) Viewed 993 times


Or here is with UV mapping.

UV Camera Mapping

Offline

KrunoSmithy

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

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 1:05 am

pinthenet wrote:I've tried to find Fusion examples but have failed. I found 2 Ae solutions
and I get the general idea but my Fusion skills are not far enough.
Can anyone help?


Testing Folding Map Animation



Here I did a quick version to illustrate how it can be done. I've never posted a node composition in this forum, so I hope this works. Anyway, all you need for folding animation itself, is ImagePlane3D, Displace3D and Background node for gradient. That's all. Super simple.

I've added a bunch of other stuff, but you can do so much more than this. You can add extrusions to the mountains or 3D buildings if its urban area, you can add reflections on the water but not mountains, you can add anything you want really. Super tiny details, or make it more stylized. You can do with this anything really. Just depends how much you want to add to this.

Anyway, its in my opinion better approach than doing everything with many layers, or parts, this way its just one element, And you can bring in any images or even video and it will fold like that. And you can easily adjust the folds if you need to.

Anyway, I'll post a node tree of this, but I don't know if it will work over here. I hope so. Otherwise I will try to upload it to some sharing service.

I haven't spend much time on this, so there are stuff you can tweak on your own or I would if I spend more time on it. I'm also not much of a motion graphics guy, so probably animations and all that could be better done. Maybe make the map pin bounce of the map few times when it hits or something. Anyway, like I said, there is no limit to this, you can expand or simplify it as much as you need to.

I used some random low resolution map of Europe here, but if you use higher quality photo or you use it to create shader like if you download information from NASA or something, about all the information how height the mountains are, where water is etc. You can create a proper looking 3D scene.

Also you could make the camera orbit the map pin, or you could have the map pin fall on specific location on the map, and set it up so that the camera is always facing the pin, weather its Paris of London or Berlin.

Like I said, there is no limit to how far you can take this. Which is why I prefer this method over stuff you can do in After effects, where if you want to make all this and changes you would quickly be faced with harsh limitations of the layer based system and the way After Effects works. With simpler scene, however I would say After Effects has the edge, because its simpler set up and learning curve is less steep and there are many tutorials for it. But one problem I see is that many people coming over from After Effects to Fusion try to make Fusion work not as intended but as After Effects replacement. This is something that limits people from exploring so much more that Fusion offers.

folding-map-animations.jpg
folding-map-animations.jpg (444.05 KiB) Viewed 771 times


sshot-3919.jpg
sshot-3919.jpg (186.57 KiB) Viewed 771 times


sshot-3918.jpg
sshot-3918.jpg (172.35 KiB) Viewed 771 times



Code: Select all
{
   Tools = ordered() {
      path1_6 = sPolygon {
         DrawMode = "ModifyOnly",
         CtrlWShown = false,
         Inputs = {
            PaintMode = Input { Value = FuID { "Invert" }, },
            MaskWidth = Input { Value = 320, },
            PixelAspect = Input {
               Value = Point {
                  X = 1,
                  Y = 1
               },
            },
            MaskHeight = Input { Value = 240, },
            Polyline2 = Input {
               Value = Polyline {
               },
            },
            JoinStyle = Input { Value = 2, },
            MiterLimit = Input { Value = 4, },
            CapStyle = Input { Value = 0, },
            Polyline = Input {
               Value = Polyline {
                  Closed = true,
                  Points = {
                     { X = 0, Y = 0.0078715730191522, LX = 0.0984952306926575, LY = 0, RX = -0.0984952306926575, RY = 0 },
                     { X = -0.178339367410529, Y = 0.186210940429681, LX = 0, LY = -0.0984952306926576, RX = 0, RY = 0.0984781852768516 },
                     { X = 0, Y = 0.364529853341242, LX = -0.0984952306926575, LY = 0, RX = 0.0984952306926575, RY = 0 },
                     { X = 0.178339367410529, Y = 0.186210940429681, LX = 0, LY = 0.0984747761936904, RX = -1.11022302462516e-16, RY = -0.0984986397758187 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1402.49, 1531.91 } },
      },
      Extrude3D1_1 = Extrude3D {
         Inputs = {
            ShapeInput = Input {
               SourceOp = "sMerge1_1",
               Source = "Output",
            },
            ExtrusionStyle = Input { Value = 1, },
            ExtrusionProfile = Input {
               SourceOp = "Extrude3D1_1ExtrusionProfile",
               Source = "Value",
            },
            ExtrusionDepth = Input { Value = 0.0929, },
            ExtrusionSubdivisions = Input { Value = 10, },
            BevelWidth = Input { Value = 0.0299, },
            SmoothingAngle = Input { Value = 60, },
            OverrideColor = Input { Value = 1, },
            ["MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0.48, },
            ["MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["MtlStdInputs.Specular.Nest"] = Input { Value = 1, },
            ["MtlStdInputs.Specular.Intensity"] = Input { Value = 0.535, },
            ["MtlStdInputs.Specular.Exponent"] = Input { Value = 100, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 1646.98, 1577.34 } },
      },
      Extrude3D1_1ExtrusionProfile = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0, RH = { 0.138938766674307, 0.301914669610322 } },
               [0.416795456791944] = { 0.716775650889785, LH = { 0.277877533348614, 0.603829339220643 }, RH = { 0.56503984383414, 0.837304782963223 } },
               [0.983957219251337] = { 0.8, LH = { 0.774498531542739, 0.818652391481612 } }
            }
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64 },
         CtrlWZoom = false,
         NameSet = true,
      },
      Text3D1_1 = Text3D {
         Inputs = {
            ["Transform3DOp.Translate.Y"] = Input { Value = 0.108510123703163, },
            ["Transform3DOp.Rotate.X"] = Input { Value = 15, },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            LayoutRotation = Input { Value = 1, },
            TransformRotation = Input { Value = 1, },
            Opacity1 = Input {
               SourceOp = "Text3D1_1Opacity",
               Source = "Value",
            },
            Red1 = Input { Value = 0.317647058823529, },
            Green1 = Input { Value = 0.317647058823529, },
            Blue1 = Input { Value = 0.952941176470588, },
            SpecularIntensity = Input { Value = 0.244, },
            StyledText = Input { Value = "LOCATION", },
            Font = Input { Value = "Arial Nova", },
            Style = Input { Value = "Bold", },
            Size = Input {
               SourceOp = "Text3D1_1Size",
               Source = "Value",
            },
            VerticalTopCenterBottom = Input { Value = 1, },
            VerticalJustification = Input { Value = 3, },
            VerticalJustificationNew = Input { Value = 3, },
            HorizontalJustificationNew = Input { Value = 3, },
            Extrusion = Input { Value = 1, },
            ExtrusionProfile = Input {
               SourceOp = "Text3D1_1ExtrusionProfile",
               Source = "Value",
            },
            ExtrusionDepth = Input { Value = 0.1512, },
            AdvancedFontControls = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1487.68, 1707.24 } },
      },
      Text3D1_1Opacity = BezierSpline {
         SplineColor = { Red = 179, Green = 28, Blue = 244 },
         NameSet = true,
         KeyFrames = {
            [135] = { 0, RH = { 158.333333333333, 0 } },
            [205] = { 1, LH = { 181.666666666667, 1 } }
         }
      },
      Text3D1_1Size = BezierSpline {
         SplineColor = { Red = 225, Green = 0, Blue = 157 },
         NameSet = true,
         KeyFrames = {
            [205] = { 0.06, RH = { 256.333333333333, 0.06 } },
            [359] = { 0.07, LH = { 307.666666666667, 0.07 } }
         }
      },
      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 },
         CtrlWZoom = false,
      },
      Transform3D1_1 = Transform3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Extrude3D1_1",
               Source = "Output",
            },
            ["Transform3DOp.Translate.Y"] = Input {
               SourceOp = "Transform3D1_1YOffset",
               Source = "Value",
            },
            ["Transform3DOp.Rotate.Y"] = Input {
               SourceOp = "Transform3D1_1YRotation",
               Source = "Value",
            },
            ["Transform3DOp.Scale.X"] = Input {
               SourceOp = "Transform3D1_1XScale",
               Source = "Value",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1646.98, 1622.17 } },
      },
      Transform3D1_1YOffset = BezierSpline {
         SplineColor = { Red = 252, Green = 57, Blue = 47 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1.55, RH = { 39.6666666666667, 1.55 } },
            [119] = { 0.043, LH = { 79.3333333333333, 0.043 } }
         }
      },
      Transform3D1_1YRotation = BezierSpline {
         SplineColor = { Red = 128, Green = 255, Blue = 128 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 360, LH = { 79.3333333333333, 360 } }
         }
      },
      Transform3D1_1XScale = BezierSpline {
         SplineColor = { Red = 251, Green = 22, Blue = 119 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0.2, RH = { 39.6666666666667, 0.2 } },
            [119] = { 0.08, LH = { 79.3333333333333, 0.08 } }
         }
      },
      path1_7 = sPolygon {
         DrawMode = "ModifyOnly",
         CtrlWShown = false,
         Inputs = {
            MaskWidth = Input { Value = 320, },
            PixelAspect = Input {
               Value = Point {
                  X = 1,
                  Y = 1
               },
            },
            MaskHeight = Input { Value = 240, },
            Polyline2 = Input {
               Value = Polyline {
               },
            },
            JoinStyle = Input { Value = 2, },
            MiterLimit = Input { Value = 4, },
            CapStyle = Input { Value = 0, },
            Polyline = Input {
               Value = Polyline {
                  Closed = true,
                  Points = {
                     { X = 0, Y = 0.5, LX = 0.176464371671883, LY = 0, RX = -0.176467780755044, RY = 0 },
                     { X = -0.319502682948448, Y = 0.180497317051552, LX = 0, LY = 0.176467780755044, RX = 0, RY = -0.0760975543237402 },
                     { X = -0.248283526628349, Y = -0.0202226813120879, LX = -0.0444612625880395, LY = 0.0548487389801387, RX = 0.0143317856095782, RY = -0.0176522326085622 },
                     { X = -0.197477960277363, Y = -0.0846748075572555, LX = -0.0124976988688663, LY = 0.0190056386235486, RX = 0.0719623364492353, RY = -0.109325887895709 },
                     { X = -0.00628975843236718, Y = -0.483073902104768, LX = -0.0269044843079902, LY = 0.130298567503256, RX = 0.00461589860023048, RY = -0.0222510857929867 },
                     { X = 0.00987952300108408, Y = -0.483796627734937, LX = -0.00598975911418387, LY = -0.0219169956431919, RX = 0.019189729114252, RY = 0.0702577948686479 },
                     { X = 0.181618905411579, Y = -0.0993986377303688, LX = -0.102780448226254, LY = -0.160629180388226, RX = 0.0122556539644229, RY = 0.0191556382826402 },
                     { X = 0.234149467842119, Y = -0.0367430983111403, LX = -0.0154261013043151, LY = -0.016690871157111, RX = 0.0223431310383386, RY = 0.0241976722780176 },
                     { X = 0.289219797227734, Y = 0.0453612605425896, LX = -0.0141306497030689, LY = -0.0302044768080073, RX = 0.0192647289437978, RY = 0.0412021790859566 },
                     { X = 0.319499273865287, Y = 0.180459817136779, LX = 0, LY = -0.0482828448117162, RX = 0, RY = 0.176488235254011 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1523.42, 1471.04 } },
      },
      sBoolean1_1 = sBoolean {
         Inputs = {
            Operation = Input { Value = FuID { "Subtract" }, },
            Input1 = Input {
               SourceOp = "path1_7",
               Source = "Output",
            },
            Input2 = Input {
               SourceOp = "path1_6",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1523.42, 1531.91 } },
      },
      sMerge1_1 = sMerge {
         CtrlWZoom = false,
         Inputs = {
            Input1 = Input {
               SourceOp = "sBoolean1_1",
               Source = "Output",
            },
            Input2 = Input {
               SourceOp = "path2_2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1646.98, 1531.91 } },
      },
      path2_2 = sPolygon {
         DrawMode = "ModifyOnly",
         Inputs = {
            MaskWidth = Input { Value = 320, },
            PixelAspect = Input {
               Value = Point {
                  X = 1,
                  Y = 1
               },
            },
            MaskHeight = Input { Value = 240, },
            Polyline2 = Input {
               Value = Polyline {
               },
            },
            JoinStyle = Input { Value = 2, },
            MiterLimit = Input { Value = 4, },
            CapStyle = Input { Value = 0, },
            Polyline = Input {
               Value = Polyline {
                  Closed = true,
                  Points = {
                     { X = 0.0741680132545154, Y = 0.192514335194693, LX = 0, LY = 0.0409618626457169, RX = 0, RY = -0.040961862645717 },
                     { X = 0, Y = 0.118346321940177, LX = 0.040961862645717, LY = 0, RX = -0.040961862645717, RY = 0 },
                     { X = -0.0741680132545153, Y = 0.192514335194693, LX = 0, LY = -0.040961862645717, RX = 0, RY = 0.0409618626457169 },
                     { X = 0, Y = 0.266682348449208, LX = -0.040961862645717, LY = 0, RX = 0.040961862645717, RY = 0 }
                  }
               },
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1646.98, 1468.52 } },
      },
      Override3D1_1 = Override3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Text3D1_1",
               Source = "Output",
            },
            ["Lighting.DoAffectedByLights"] = Input {
               SourceOp = "Override3D1_1DoAffectedByLights",
               Source = "Value",
            },
            ["Lighting.IsAffectedByLights"] = Input {
               SourceOp = "Override3D1_1AffectedbyLights",
               Source = "Value",
            },
            ["Lighting.DoShadowCaster"] = Input {
               SourceOp = "Override3D1_1DoShadowCaster",
               Source = "Value",
            },
            ["Lighting.IsShadowCaster"] = Input {
               SourceOp = "Override3D1_1ShadowCaster",
               Source = "Value",
            },
            ["Lighting.DoShadowReceiver"] = Input {
               SourceOp = "Override3D1_1DoShadowReceiver",
               Source = "Value",
            },
            ["Lighting.IsShadowReceiver"] = Input {
               SourceOp = "Override3D1_1ShadowReceiver",
               Source = "Value",
            },
            ["ObjectID.DoObjectID"] = Input { Value = 1, },
            ["ObjectID.NewObjectID"] = Input { Value = 16, },
         },
         ViewInfo = OperatorInfo { Pos = { 1487.68, 1745.7 } },
      },
      Override3D1_1DoAffectedByLights = BezierSpline {
         SplineColor = { Red = 146, Green = 219, Blue = 112 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1, RH = { 61.3333333333333, 1 } },
            [184] = { 1, LH = { 122.666666666667, 1 } }
         }
      },
      Override3D1_1AffectedbyLights = BezierSpline {
         SplineColor = { Red = 11, Green = 217, Blue = 217 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1 }
         }
      },
      Override3D1_1DoShadowCaster = BezierSpline {
         SplineColor = { Red = 55, Green = 112, Blue = 235 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1, RH = { 61.3333333333333, 1 } },
            [184] = { 1, LH = { 122.666666666667, 1 } }
         }
      },
      Override3D1_1ShadowCaster = BezierSpline {
         SplineColor = { Red = 241, Green = 46, Blue = 27 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 61.3333333333333, 0 } },
            [184] = { 0, LH = { 122.666666666667, 0 }, RH = { 242.3275, 0 } },
            [359] = { 0, LH = { 300.666666666667, 0 } }
         }
      },
      Override3D1_1DoShadowReceiver = BezierSpline {
         SplineColor = { Red = 55, Green = 33, Blue = 235 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1, RH = { 61.3333333333333, 1 } },
            [184] = { 1, LH = { 122.666666666667, 1 } }
         }
      },
      Override3D1_1ShadowReceiver = BezierSpline {
         SplineColor = { Red = 241, Green = 46, Blue = 227 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0 }
         }
      },
      MapPin1 = Underlay {
         NameSet = true,
         ViewInfo = UnderlayInfo {
            Pos = { 1524.74, 1449.12 },
            Size = { 416.49, 234.869 }
         },
         Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, }
      },
      Transform3D2_1 = Transform3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Override3D1_1",
               Source = "Output",
            },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1487.68, 1784.2 } },
      },
      GradientFold_1 = Background {
         NameSet = true,
         Inputs = {
            GlobalOut = Input { Value = 359, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            UseFrameFormatSettings = Input { Value = 1, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Type = Input { Value = FuID { "Gradient" }, },
            TopLeftRed = Input { Value = 1, },
            TopLeftGreen = Input { Value = 1, },
            TopLeftBlue = Input { Value = 1, },
            TopRightRed = Input { Value = 1, },
            TopRightGreen = Input { Value = 1, },
            TopRightBlue = Input { Value = 1, },
            Gradient = Input {
               SourceOp = "GradientFold_1Gradient",
               Source = "Value",
            },
            Offset = Input { Value = 0.507, },
            Repeat = Input { Value = FuID { "Repeat" }, },
            SubPixel = Input { Value = FuID { "5x5" }, },
         },
         ViewInfo = OperatorInfo { Pos = { 1090.84, 1790.04 } },
      },
      GradientFold_1Gradient = BezierSpline {
         SplineColor = { Red = 221, Green = 109, Blue = 14 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0.333333333333333 }, Flags = { LockedY = true }, Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1 },
                     [0.25] = { 1, 1, 1, 1 },
                     [0.5] = { 0, 0, 0, 1 },
                     [0.75] = { 1, 1, 1, 1 },
                     [1] = { 0, 0, 0, 1 }
                  }
               } },
            [119] = { 1, LH = { 79.3333333333333, 0.666666666666667 }, Flags = { LockedY = true }, Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1 },
                     [0.25] = { 0, 0, 0, 1 },
                     [0.5] = { 0, 0, 0, 1 },
                     [0.75] = { 0, 0, 0, 1 },
                     [1] = { 0, 0, 0, 1 }
                  }
               } }
         }
      },
      SpotLight1_1 = LightSpot {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = -0.858832379714523, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 0.773026281631504, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 2.50931325491409, },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
            Intensity = Input { Value = 8, },
            DecayType = Input { Value = 2, },
            ConeAngle = Input { Value = 90, },
            PenumbraAngle = Input { Value = 0, },
            ["ShadowLightInputs3D.Nest"] = Input { Value = 1, },
            ["ShadowLightInputs3D.ShadowsEnabled"] = Input { Value = 1, },
            ["ShadowLightInputs3D.ShadowDensity"] = Input { Value = 1, },
            ["ShadowLightInputs3D.ShadowMapSize"] = Input { Value = 2048, },
            ["ShadowLightInputs3D.SoftnessType"] = Input { Value = FuID { "Variable" }, },
         },
         ViewInfo = OperatorInfo { Pos = { 1911.27, 1776.43 } },
      },
      AmbientLight1_1 = LightAmbient {
         PassThrough = true,
         Inputs = {
            Intensity = Input { Value = 0.2, },
         },
         ViewInfo = OperatorInfo { Pos = { 1808.53, 1806.14 } },
      },
      Loader1_1 = Loader {
         Clips = {
            Clip {
               ID = "Clip1",
               Filename = "H:/--- Tempory AD/New folder/Honeyview_relief-map-of-europe.jpg",
               FormatID = "JpegFormat",
               StartFrame = -1,
               LengthSetManually = true,
               TrimIn = 0,
               TrimOut = 0,
               ExtendFirst = 0,
               ExtendLast = 0,
               Loop = 0,
               AspectMode = 0,
               Depth = 0,
               TimeCode = 0,
               GlobalStart = 0,
               GlobalEnd = 0
            }
         },
         CustomData = {
            source = "H:\\--- Tempory AD\\New folder\\Honeyview_relief-map-of-europe.jpg",
         },
         ViewInfo = OperatorInfo { Pos = { 531.129, 1828.47 } },
         UserControls = ordered() {
            MakeLocal = {
               LINKS_Name = "Make Local",
               INPID_InputControl = "ButtonControl",
               BTNCS_Execute = "                  args = { tool = comp.ActiveTool, copyTree = true }\n                  path = comp:MapPath(\"Scripts:support/Loader_MakeLocal.lua\")\n                  comp:RunScript(path, args)\n               ",
               IC_ControlPage = 0,
               LINKID_DataType = "Number",
               INP_Default = 0,
            }
         }
      },
      Gamut1_3 = GamutConvert {
         Inputs = {
            SourceSpace = Input { Value = FuID { "Rec709" }, },
            PreDividePostMultiply = Input { Value = 1, },
            Input = Input {
               SourceOp = "Loader1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 693.927, 1828.47 } },
      },
      PutYourMapHere_1 = ImagePlane3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input {
               SourceOp = "PutYourMapHere_1XOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Y"] = Input {
               SourceOp = "PutYourMapHere_1YOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Z"] = Input {
               SourceOp = "PutYourMapHere_1ZOffset",
               Source = "Value",
            },
            ["Transform3DOp.Rotate.RotOrder"] = Input {
               SourceOp = "PutYourMapHere_1RotationOrder",
               Source = "Value",
            },
            ["Transform3DOp.Rotate.X"] = Input {
               SourceOp = "PutYourMapHere_1XRotation",
               Source = "Value",
            },
            ["Transform3DOp.Rotate.Y"] = Input {
               SourceOp = "PutYourMapHere_1YRotation",
               Source = "Value",
            },
            ["Transform3DOp.Rotate.Z"] = Input {
               SourceOp = "PutYourMapHere_1ZRotation",
               Source = "Value",
            },
            ["Transform3DOp.ScaleLock"] = Input { Value = 0, },
            ["Transform3DOp.Scale.X"] = Input {
               SourceOp = "PutYourMapHere_1XScale",
               Source = "Value",
            },
            ["Transform3DOp.Scale.Y"] = Input { Value = 1.5, },
            ["SurfacePlaneInputs.SizeLock"] = Input { Value = 0, },
            ["SurfacePlaneInputs.SubdivisionWidth"] = Input { Value = 250, },
            ["SurfacePlaneInputs.SubdivisionHeight"] = Input { Value = 250, },
            ["SurfacePlaneInputs.Visibility.Nest"] = Input { Value = 1, },
            ["SurfacePlaneInputs.Visibility.CullBackFace"] = Input { Value = 1, },
            ["SurfacePlaneInputs.Lighting.Nest"] = Input { Value = 1, },
            ["SurfacePlaneInputs.BlendMode.Nest"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            MaterialInput = Input {
               SourceOp = "Gamut1_3",
               Source = "Output",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 929.5, 1828.47 } },
      },
      PutYourMapHere_1XOffset = BezierSpline {
         SplineColor = { Red = 250, Green = 59, Blue = 49 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 0, LH = { 79.3333333333333, 0 } }
         }
      },
      PutYourMapHere_1YOffset = BezierSpline {
         SplineColor = { Red = 252, Green = 131, Blue = 47 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 0, LH = { 79.3333333333333, 0 } }
         }
      },
      PutYourMapHere_1ZOffset = BezierSpline {
         SplineColor = { Red = 254, Green = 207, Blue = 46 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 0, LH = { 79.3333333333333, 0 } }
         }
      },
      PutYourMapHere_1RotationOrder = BezierSpline {
         SplineColor = { Red = 240, Green = 8, Blue = 198 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, Flags = { LockedY = true }, Value = FuID { "XYZ" } }
         }
      },
      PutYourMapHere_1XRotation = BezierSpline {
         SplineColor = { Red = 255, Green = 128, Blue = 128 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { -55, LH = { 79.3333333333333, -55 }, RH = { 158.996, -55 } },
            [239] = { -60, LH = { 199, -60 } }
         }
      },
      PutYourMapHere_1YRotation = BezierSpline {
         SplineColor = { Red = 128, Green = 255, Blue = 128 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 0, LH = { 79.3333333333333, 0 } }
         }
      },
      PutYourMapHere_1ZRotation = BezierSpline {
         SplineColor = { Red = 128, Green = 128, Blue = 255 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 0, LH = { 79.3333333333333, 0 } }
         }
      },
      PutYourMapHere_1XScale = BezierSpline {
         SplineColor = { Red = 251, Green = 22, Blue = 119 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 0.001, RH = { 39.6666666666667, 0.001 } },
            [119] = { 2, LH = { 79.3333333333333, 2 } }
         }
      },
      Displace3D1_1 = Displace3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "PutYourMapHere_1",
               Source = "Output",
            },
            Scale = Input { Value = 0.5, },
            Input = Input {
               SourceOp = "GradientFold_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1090.84, 1828.47 } },
      },
      Text3D_1 = Underlay {
         NameSet = true,
         ViewInfo = UnderlayInfo {
            Pos = { 1487.35, 1681.97 },
            Size = { 219.333, 162.235 }
         },
         Colors = { TileColor = { R = 0, G = 0.596078431372549, B = 0.6 }, }
      },
      Merge3D2_1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Displace3D1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1090.84, 1870.66 } },
      },
      ReplaceMaterial3D1_1 = ReplaceMaterial3D {
         PassThrough = true,
         Inputs = {
            SceneInput = Input {
               SourceOp = "Merge3D2_1",
               Source = "Output",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
            Comments = Input { Value = "Put your custom materials for the map image here. Normals, Rougness, Hight and or bump map, reflections etc.", },
         },
         ViewInfo = OperatorInfo { Pos = { 1298.46, 1870.66 } },
      },
      Merge3D4_1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "ReplaceMaterial3D1_1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Transform3D2_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1487.68, 1870.66 } },
      },
      Renderer3D1_1 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            ["RendererSoftware.ShadowsEnabled"] = Input { Value = 1, },
            ["RendererSoftware.Channels.Nest"] = Input { Value = 1, },
            ["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
            GlobalOut = Input { Value = 359, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            UseFrameFormatSettings = Input { Value = 1, },
            AutoCropDataWindow = Input { Value = 1, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D3_1",
               Source = "Output",
            },
            RendererType = Input { Value = FuID { "RendererOpenGL" }, },
            ["RendererOpenGL.Channels.Nest"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.Z"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.Normal"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.ObjectID"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.Vector"] = Input { Value = 1, },
            ["RendererOpenGL.AntiAliasing.Channels.RGBA.HighQuality.Enable"] = Input { Value = 1, },
            ["RendererOpenGL.AntiAliasing.Presets.Nest"] = Input { Value = 1, },
            ["RendererOpenGL.AntiAliasing.Presets.Color.Supersampling.HighQuality.Rate"] = Input { Value = 5, },
            ["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.Rate"] = 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, },
            ["RendererOpenGL.LightingEnabled"] = Input { Value = 1, },
            ["RendererOpenGL.ShadowsEnabled"] = Input { Value = 1, },
            ["RendererOpenGL.MaximumTextureDepth"] = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 2143.26, 1870.66 } },
         SubInputsData = {
            RendererOpenGL = {
               Version = 1
            }
         }
      },
      Merge3D1_1 = Merge3D {
         Inputs = {
            PassThroughLights = Input { Value = 1, },
            SceneInput1 = Input {
               SourceOp = "Merge3D4_1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Transform3D1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1647.92, 1870.66 } },
      },
      Merge3D3_1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Merge3D1_1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Camera3D1_1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "SpotLight1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1889.93, 1870.66 } },
      },
      CopyAux1 = Dimension.CopyAux {
         Inputs = {
            Channel = Input { Value = FuID { "Vector" }, },
            ["Vector.Remap.From.MinX"] = Input { Value = -50.4249992370605, },
            ["Vector.Remap.From.MaxX"] = Input { Value = 50.8419418334961, },
            ["Vector.Remap.From.MinY"] = Input { Value = -13.3741407394409, },
            ["Vector.Remap.From.MaxY"] = Input { Value = 4.91566133499146, },
            Input = Input {
               SourceOp = "Renderer3D1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2383.5, 1745.09 } },
      },
      Merge2_1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Renderer3D1_1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "AmbientOcclusion1_1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 2368.65, 1870.66 } },
      },
      DisplayAnimation_1 = Underlay {
         NameSet = true,
         ViewInfo = UnderlayInfo {
            Pos = { 1010.17, 1771.18 },
            Size = { 333.338, 169.543 }
         },
         Colors = { TileColor = { R = 0.584313725490196, G = 0.294117647058824, B = 0.803921568627451 }, }
      },
      AmbientOcclusion1_1 = SSAO {
         Inputs = {
            OutputMode = Input { Value = 0, },
            KernelRadius = Input { Value = 1.1, },
            Lift = Input { Value = -0.66, },
            Gamma = Input { Value = 0.59, },
            Camera = Input {
               SourceOp = "Camera3D1_1",
               Source = "Output",
            },
            CameraSelector = Input { Value = FuID { "Camera3D1_1" }, },
            Input = Input {
               SourceOp = "Renderer3D1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2341.98, 1986.06 } },
      },
      Camera3D1_1 = 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 {
               SourceOp = "Camera3D1_1XOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Y"] = Input {
               SourceOp = "Camera3D1_1YOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Z"] = Input {
               SourceOp = "Camera3D1_1ZOffset",
               Source = "Value",
            },
            ["Transform3DOp.Rotate.X"] = Input {
               SourceOp = "Camera3D1_1XRotation",
               Source = "Value",
            },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
            AoV = Input { Value = 42.3086544626872, },
            FLength = Input {
               SourceOp = "Camera3D1_1FocalLengthmm",
               Source = "Value",
            },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" }, },
            FilmBack = Input { Value = 1, },
            FilmGate = Input { Value = FuID { "ArriAlexa16x9" }, },
            PlaneOfFocusVis = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1837.27, 1986.06 } },
      },
      Camera3D1_1XOffset = BezierSpline {
         SplineColor = { Red = 250, Green = 59, Blue = 49 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0 }
         }
      },
      Camera3D1_1YOffset = BezierSpline {
         SplineColor = { Red = 252, Green = 131, Blue = 47 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0 }
         }
      },
      Camera3D1_1ZOffset = BezierSpline {
         SplineColor = { Red = 254, Green = 207, Blue = 46 },
         NameSet = true,
         KeyFrames = {
            [0] = { 3, RH = { 39.6666666666667, 3 } },
            [119] = { 0.5, LH = { 79.3333333333333, 0.5 } }
         }
      },
      Camera3D1_1XRotation = BezierSpline {
         SplineColor = { Red = 255, Green = 128, Blue = 128 },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 39.6666666666667, 0 } },
            [119] = { 5, LH = { 79.3373, 5 }, RH = { 199, 5 } },
            [359] = { 5.5, LH = { 279, 5.5 } }
         }
      },
      Camera3D1_1FocalLengthmm = BezierSpline {
         SplineColor = { Red = 219, Green = 16, Blue = 179 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 18, RH = { 119.666666666667, 18 } },
            [359] = { 22, LH = { 239.333333333333, 22 } }
         }
      },
      Background1_1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 359, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            UseFrameFormatSettings = Input { Value = 1, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Comments = Input { Value = "Simple black background. It can be replaced with any image you like. Or you can make the bacground trasnparent by just reducing alpha slider to 0.", },
         },
         ViewInfo = OperatorInfo { Pos = { 2641.8, 1933.27 } },
      },
      Merge1_1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Background1_1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Merge2_1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 2641.8, 1870.66 } },
      },
      StickyNote1_1 = Note {
         Inputs = {
            Comments = Input { Value = "Simple black background. It can be replaced with any image you like. Or you can make the bacground trasnparent by just reducing alpha slider to 0.", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 2641.88, 1974.58 },
            Size = { 140, 181.364 }
         },
      },
      Merge3 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Merge1_1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "VectorMotionBlur1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 2834.79, 1870.66 } },
      },
      VectorMotionBlur1 = VectorMotionBlur {
         Inputs = {
            Input = Input {
               SourceOp = "Merge1_1",
               Source = "Output",
            },
            Vectors = Input {
               SourceOp = "CopyAux1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 2816.12, 1745.09 } },
      },
      MotionBlur = Underlay {
         NameSet = true,
         ViewInfo = UnderlayInfo {
            Pos = { 2592.48, 1718.49 },
            Size = { 613.957, 102.97 }
         },
         Colors = { TileColor = { R = 0.0823529411764706, G = 0.384313725490196, B = 0.517647058823529 }, }
      },
      ColorCorrector2 = ColorCorrector {
         Inputs = {
            WheelSaturation1 = Input { Value = 1.1, },
            MasterRGBGamma = Input { Value = 0.9, },
            ColorRanges = Input {
               Value = ColorCurves {
                  Curves = {
                     {
                        Points = {
                           { 0, 1 },
                           { 0.4, 0.2 },
                           { 0.6, 0 },
                           { 1, 0 }
                        }
                     },
                     {
                        Points = {
                           { 0, 0 },
                           { 0.4, 0 },
                           { 0.6, 0.2 },
                           { 1, 1 }
                        }
                     }
                  }
               },
            },
            HistogramIgnoreTransparent = Input { Value = 1, },
            Input = Input {
               SourceOp = "Merge3",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 3041.93, 1870.66 } },
      },
      Gamut1_4 = GamutConvert {
         Inputs = {
            OutputSpace = Input { Value = FuID { "Rec709" }, },
            PreDividePostMultiply = Input { Value = 1, },
            Input = Input {
               SourceOp = "ColorCorrector2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 3289.35, 1870.66 } },
      }
   },
   ActiveTool = "sMerge1_1"
}

Offline

Sander de Regt

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

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 7:16 am

What an excellent post! Sharing the node tree went flawlessly and it's great you took your time to document the flow! It's a very convincing look, even better than the paneled option since you can really see the folds and you could even make the creases a little more natural with very little effort! Well done!
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

pinthenet

  • Posts: 143
  • Joined: Mon May 18, 2020 3:23 pm
  • Real Name: John Payne

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 8:07 am

I agree, and much more than I had envisioned. I'll definitely look at that and hopefully understand.

Thanks for your inputs Kruno & Sander
[size=85]
PC: Intel i5-12600K /32GB/RTX3060-12GB
Windows 11 Pro; NVIDIA 552.22 Studio; Resolve+Fusion 19B
Offline

KrunoSmithy

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

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 8:17 am

Sander de Regt wrote:What an excellent post! Sharing the node tree went flawlessly and it's great you took your time to document the flow! It's a very convincing look, even better than the paneled option since you can really see the folds and you could even make the creases a little more natural with very little effort! Well done!


Thank you.

I was actually inspired to do all kind of things with extrusions and bump maps to take 2D and make it 3D. Someone on this forum asked about something similar so I tried a lot of stuff and got better at it. Here is a whole thread to supplement this one.

viewtopic.php?f=22&t=199801&p=1040733#p1040733

Originally for this map unfolding comp, I made it a lot more complex with dynamic extrusion of the map, Fusions awesome ability to make shaders out of 2D images and video. Really powerful. But it took too long to render and was getting out of hand in complexity and I'm leaning on a trip on Monday so I left a little less complex version. But at least I figured out why my other comps won't export.

It turns out leaving motion blur in renderer 3D just kills the PC and dances on its grave. Too slow. But in the comp about this unfolding map thingy, I realized I could use render out vector information like you would in third party 3D package, and than use vector and other information from 3D to drive 2D effects like motion blur for example. This is a lot faster.

So in the comp I posted I left how to do that. With a simple copyAux node and Vector Motion Blur. Super simple. And I love CopyAux node. I used to try to do this with complicated Channel Booleans operations, but fusion developers were merciful on us so we got CopyAux that does the same in a much simpler way and has more specialized options.

I really like that about Fusion. Going from 2D to 3D and back, using information from both is really well made so its easy to extract masks from 3D and information like world pass position, z depth, vector information, material and object ID is like crypomat, super useful. But also like example with this gradient in 2D to drive distortions and sculpt in 2D is really easy to. Of course one could design something on a 2D map from top down view. Arrow following a travel path, or add glow effects or animate bending of 2D image or even use a video and just apply same process to fold it as a map. So it really becomes flexible to do something in 2D and something in 3D and always be able to change a node or parameter and get an update across the node tree. With layers that is not possible in most cases.

pinthenet wrote:I agree, and much more than I had envisioned. I'll definitely look at that and hopefully understand.

Thanks for your inputs Kruno & Sander



Your are welcome. People asking questions on this forum helped me try things I would not think of myself to try to solve and that led to new solutions so I'm sharing some of that back.

Cheers!
Offline

KrunoSmithy

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

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 8:20 am

Sander de Regt wrote:What an excellent post! Sharing the node tree went flawlessly and it's great you took your time to document the flow! It's a very convincing look, even better than the paneled option since you can really see the folds and you could even make the creases a little more natural with very little effort! Well done!


By the way. I wanted to thank you for this. I think you are behind this. Bless you. Really helpful.

fusion - ability to connect multiple nodes at once

PostMon Feb 05, 2024 10:41 pm

Check out the WSL forum. Andrew, just posted a first version of a script to deal with this.

https://www.steakunderwater.com/wesuckl ... php?t=6421

fusion - ability to connect multiple nodes at once

PostMon Feb 05, 2024 10:41 pm

Check out the WSL forum. Andrew, just posted a first version of a script to deal with this.

https://www.steakunderwater.com/wesuckl ... php?t=6421

...................................

A great supplement to this. :)

Auto-Rename-for-DaVinci-Resolve by neezr

Never get confused by generically named Fusion nodes in DaVinci Resolve again.

Automatically rename:

'MediaIn' nodes to their file names,
'Background' nodes to their colors and
'Text+'/'Text3D' nodes to their text contents
All layers of a 'MultiMerge' node to the names of their input nodes

All with a single click!
Usage:

Open the Fusion page

Run this script from DaVinci Resolve's dropdown menu (Workspace > Scripts)

This will automatically rename all unnamed "MediaIn", "Background", "Text+" and "Text 3D" nodes to logical display names
This will also rename all layers in the LayerList of a "MultiMerge" node to the names of their input nodes

This works best if bound to a hotkey! (open hotkey settings with CTRL+ALT+K)


https://github.com/neezr/Auto-Rename-fo ... ci-Resolve
Offline

bentheanimator

  • Posts: 467
  • Joined: Mon May 13, 2019 10:38 pm
  • Location: Minneapolis, MN
  • Real Name: Ben Hall

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 3:39 pm

As soon as this was asked, I thought of your that depth map post. Awesome job! Wonder, of you can fold this over in quarters to?
Resolve & Fusion Studio 19b1
Windows 11
Intel 6850K @ 3.4GHz | 32GB RAM | 2xGTX1080

MacOS 12.7.2
MacBook Pro 13,3 | 16GB | Radeon 460 4GB | 256GB System | 256GB Scratch
Offline

KrunoSmithy

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

Re: Looking for 3D (un)folding map animations

PostSat Apr 27, 2024 4:06 pm

bentheanimator wrote:As soon as this was asked, I thought of your that depth map post. Awesome job! Wonder, of you can fold this over in quarters to?


Hehe. Yeah, I've been really excited about stuff you can do with gradients and displace3D tool. Now, I haven't done it here on this example, but you can also extrude the map, make the water reaction to reflections and not the mountains and do that while the map is folding. You just use one displace 3D node for height map or the map, sort to speak, and you use another displace 3D node after that for folding action. However you can also use create bump map and bump map nodes to get all the little details that displace node is too rough to handle. So you use displace node for big stuff and create bump map for small stuff.

Since that is something I've done. I'm pretty sure you could fold it in quarters as well, either with one or two displace3D nodes. With 2 nodes it should be easy, to simply use same folding action and flip it by 90 degrees and match the timing. If instance is used than they would react to any changes in sync.

Maybe it could be done with one node, but you would have to figure out the gradient to fold it in such a way. Probably could be done.

As for the kind of details you can get from a map and also than apply folding I just posted, here is another example.

Its 3D so it reacts to reflections, light and motion blur etc. This was spinning action and some parts of the ocean retreating. it was Panonian Sea in Europe a shallow sea that went away about a million years ago or so, and I was doing an animation stuff to see how to illustrate it. I downloaded map of the area and also height map you can get for regions of the world. And than did the rest in Fusion. Still needs to work but going along nicely. Of course if you did that and apply second displace 3D you can make what I did and put it on a folding action, and make the mountains grow as it unfolds or something.

PanonianSeaTest_prob3.mp4_snapshot_00.00_[2024-04-27_17.55.33].jpg
PanonianSeaTest_prob3.mp4_snapshot_00.00_[2024-04-27_17.55.33].jpg (128.91 KiB) Viewed 646 times


PanonianSeaTest_prob3.mp4_snapshot_00.03_[2024-04-27_17.55.46].jpg
PanonianSeaTest_prob3.mp4_snapshot_00.03_[2024-04-27_17.55.46].jpg (105.31 KiB) Viewed 646 times


PanonianSeaTest_prob3.mp4_snapshot_00.07_[2024-04-27_17.56.02].jpg
PanonianSeaTest_prob3.mp4_snapshot_00.07_[2024-04-27_17.56.02].jpg (317.92 KiB) Viewed 646 times


Also if you animate a path on your 2D image before folding it, it will fold of course, but you can also use a height map to draw along the path in darker or lighter stroke, and it will seem on the map as if its either digging a tunnel or rising the ground as its moving along the path. Pretty powerful stuff you can do.

And of course you can also use a video to displace. Or some other per-rendered animation.
Offline

birdseye

  • Posts: 365
  • Joined: Fri Jun 12, 2020 2:36 pm
  • Real Name: Iain Fisher

Re: Looking for 3D (un)folding map animations

PostMon Apr 29, 2024 7:27 am

I couldn't get your comp to work, so I assume you did it in Resolve. I rarely do anything with 3d but I was wondering how you got the hinge effect at the corners, assuming you did, so that the letters don't stretch over stretching surfaces?
Offline

birdseye

  • Posts: 365
  • Joined: Fri Jun 12, 2020 2:36 pm
  • Real Name: Iain Fisher

Re: Looking for 3D (un)folding map animations

PostMon Apr 29, 2024 8:00 am

I had a quick punt at it using Simon Ubsdell's ExtrudeIndentSU macro. It looks a bit agricultural but something is happening. It folds like a set of curtains that haven't been washed for 100 years. What is the best way to smooth that out to look like flat panels, maybe double keyframes at each fold or something. The answer sould be in your comp, I'll check out the nodes, maybe attaching my big map will get something to happen. :D

Code: Select all
{
   Tools = ordered() {
      Background2 = Background {
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 0.85, },
            TopLeftGreen = Input { Value = 0.701, },
            TopLeftBlue = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 213.825, 73.2058 } },
      },
      Text1 = TextPlus {
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            StyledText = Input { Value = "ACME BIG \nWORLD MAP", },
            Font = Input { Value = "Open Sans", },
            Style = Input { Value = "Bold", },
            Size = Input { Value = 0.2691, },
            VerticalJustificationNew = Input { Value = 3, },
            HorizontalJustificationNew = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 332.977, 32.1586 } },
      },
      Background1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            Type = Input { Value = FuID { "Gradient" }, },
            Gradient = Input {
               SourceOp = "Background1Gradient",
               Source = "Value",
            },
            SubPixel = Input { Value = FuID { "5x5" }, },
         },
         ViewInfo = OperatorInfo { Pos = { 333.149, 133.536 } },
      },
      Background1Gradient = BezierSpline {
         SplineColor = { Red = 221, Green = 109, Blue = 14 },
         CtrlWZoom = false,
         KeyFrames = {
            [0] = { 0, RH = { 33.3333333333333, 0.333333333333333 }, Flags = { Linear = true, LockedY = true }, Value = Gradient {
                  Colors = {
                     [0] = { 1, 1, 1, 1 },
                     [0.218905472636816] = { 1, 1, 1, 1 },
                     [0.358208955223881] = { 1, 1, 1, 1 },
                     [0.517412935323383] = { 1, 1, 1, 1 },
                     [0.681592039800995] = { 1, 1, 1, 1 },
                     [0.81592039801] = { 1, 1, 1, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               } },
            [100] = { 1, LH = { 66.6666666666667, 0.666666666666667 }, Flags = { Linear = true, LockedY = true }, Value = Gradient {
                  Colors = {
                     [0] = { 1, 1, 1, 1 },
                     [0.218905472636816] = { 0, 0, 0, 1 },
                     [0.358208955223881] = { 1, 1, 1, 1 },
                     [0.517412935323383] = { 0, 0, 0, 1 },
                     [0.681592039800995] = { 1, 1, 1, 1 },
                     [0.81592039800995] = { 0, 0, 0, 1 },
                     [1] = { 1, 1, 1, 1 }
                  }
               } }
         }
      },
      Merge2 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Background2",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Text1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 333.253, 74.0629 } },
      },
      Transform1 = Transform {
         CtrlWZoom = false,
         Inputs = {
            Size = Input {
               SourceOp = "Transform1Size",
               Source = "Value",
            },
            Aspect = Input {
               Value = 1.21921482565228,
               Expression = "1/Size",
            },
            Edges = Input { Value = 2, },
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 449.108, 74.4179 } },
      },
      Transform1Size = BezierSpline {
         SplineColor = { Red = 225, Green = 0, Blue = 225 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 1, RH = { 33.3333333333333, 0.9 }, Flags = { Linear = true } },
            [100] = { 0.7, LH = { 66.6666666666667, 0.8 }, Flags = { Linear = true } }
         }
      },
      Instance_Transform1 = Transform {
         SourceOp = "Transform1",
         Inputs = {
            SettingsNest = Input { },
            TransformNest = Input { },
            Aspect = Input { Expression = "1/Size", },
            ReferenceSize = Input { },
            Input = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            CommentsNest = Input { },
            FrameRenderScriptNest = Input { },
            StartRenderScripts = Input { },
            EndRenderScripts = Input { },
            EffectMask = Input { }
         },
         ViewInfo = OperatorInfo { Pos = { 448.165, 133.558 } },
      },
      Shape3D1 = Shape3D {
         Inputs = {
            ["Transform3DOp.ScaleLock"] = Input { Value = 0, },
            ["Transform3DOp.Scale.X"] = Input {
               SourceOp = "Shape3D1XScale",
               Source = "Value",
            },
            MaterialInput = Input {
               SourceOp = "Transform1",
               Source = "Output",
            },
            ["MtlStdInputs.MaterialIDNest"] = Input { Value = 1, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, }
         },
         ViewInfo = OperatorInfo { Pos = { 632.296, 74.3139 } },
      },
      Shape3D1XScale = BezierSpline {
         SplineColor = { Red = 251, Green = 22, Blue = 119 },
         CtrlWZoom = false,
         NameSet = true,
         KeyFrames = {
            [0] = { 1, RH = { 33.3333333333333, 0.9 }, Flags = { Linear = true } },
            [100] = { 0.7, LH = { 66.6666666666667, 0.8 }, Flags = { Linear = true } }
         }
      },
      ExtrudeIndent = MacroOperator {
         CustomData = {
            Path = {
               Map = {
                  ["Setting:"] = "Macros:\\"
               }
            },
         },
         Inputs = ordered() {
            Input4 = InstanceInput {
               SourceOp = "CV_1",
               Source = "Number3",
            },
            Input1 = InstanceInput {
               SourceOp = "ReplaceNormals3D1_1",
               Source = "PreWeld",
               Default = 1,
            },
            Input2 = InstanceInput {
               SourceOp = "ReplaceNormals3D1_1",
               Source = "Normals.SmoothingAngle",
               Default = 45,
            },
            Input3 = InstanceInput {
               SourceOp = "ReplaceNormals3D1_1",
               Source = "Normals.IgnoreSmoothGroups",
               Default = 0,
            },
            MainInput1 = InstanceInput {
               SourceOp = "CV_1",
               Source = "Image1",
               Name = "Displace Map",
            },
            Input5 = InstanceInput {
               SourceOp = "CV_1",
               Source = "Number1",
               Page = "Controls",
               Default = 0.25,
            },
            Input6 = InstanceInput {
               SourceOp = "CV_1",
               Source = "Number2",
               Page = "Controls",
               Default = 0.45,
            },
            MainInput2 = InstanceInput {
               SourceOp = "UVs_1",
               Source = "SceneInput",
            }
         },
         Outputs = {
            MainOutput1 = InstanceOutput {
               SourceOp = "ReplaceNormals3D1_1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo { Pos = { 632.962, 133.421 } },
         Tools = ordered() {
            ReplaceNormals3D1_1 = ReplaceNormals3D {
               CtrlWShown = false,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "Transform3D2_1_1",
                     Source = "Output",
                  },
               },
               ViewInfo = OperatorInfo { Pos = { 338, 9.06063 } },
            },
            Transform3D2_1_1 = Transform3D {
               CtrlWShown = false,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "Transform3D2_2",
                     Source = "Output",
                  },
                  ["Transform3DOp.Rotate.Y"] = Input { Expression = "-XfB_1.Transform3DOp.Rotate.Y", },
               },
               ViewInfo = OperatorInfo { Pos = { 217.334, 9.06063 } },
            },
            Transform3D2_2 = Transform3D {
               CtrlWShown = false,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "CV_1",
                     Source = "Output",
                  },
                  ["Transform3DOp.Rotate.X"] = Input { Expression = "-XfA_1.Transform3DOp.Rotate.X", },
                  ["Transform3DOp.Rotate.Y"] = Input { Expression = "-XfA_1.Transform3DOp.Rotate.Y", },
                  ["Transform3DOp.Rotate.Z"] = Input { Expression = "-XfA_1.Transform3DOp.Rotate.Z", },
               },
               ViewInfo = OperatorInfo { Pos = { 107.334, 9.06063 } },
            },
            CV_1 = CustomVertex3D {
               CtrlWShown = false,
               NameSet = true,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "XfB_1",
                     Source = "Output",
                  },
                  ["Position.X"] = Input { Value = "if(n3==0 & px<n2, px-(i1*n1), \nif(n3==1 & px<n2, px-(i1*n1), \npx))\n", },
                  ["Position.Y"] = Input { Value = "if(n3==2 & py>n2, py+(i1*n1), \nif(n3==3 & py>n2, py+(i1*n1), \npy))", },
                  ["Position.Z"] = Input { Value = "if(n3==4 & pz>n2, pz+(i1*n1), \nif(n3==5 & pz>n2, pz+(i1*n1), \npz))", },
                  Number8 = Input { Value = 1, },
                  Image1 = Input {
                     SourceOp = "Instance_Transform1",
                     Source = "Output",
                  },
                  LUT1 = Input {
                     SourceOp = "CustomVertex3D1LUT1_1",
                     Source = "Value",
                  },
                  LUT2 = Input {
                     SourceOp = "CustomVertex3D1LUT2_1",
                     Source = "Value",
                  },
                  LUT3 = Input {
                     SourceOp = "CustomVertex3D1LUT3_1",
                     Source = "Value",
                  },
                  LUT4 = Input {
                     SourceOp = "CustomVertex3D1LUT4_1",
                     Source = "Value",
                  },
                  Intermediate1 = Input { Value = "getr1d(tu, tv)", },
                  NumberControls = Input { Value = 1, },
                  NameForNumber1 = Input { Value = "Indent/Extrude", },
                  NameForNumber2 = Input { Value = "Threshold", },
                  NameForNumber3 = Input { Value = "Face Select", },
                  ShowNumber4 = Input { Value = 0, },
                  ShowNumber5 = Input { Value = 0, },
                  ShowNumber6 = Input { Value = 0, },
                  ShowNumber7 = Input { Value = 0, },
                  ShowNumber8 = Input { Value = 0, },
                  Number3 = Input { Value = 4, },
                  Number1 = Input { Value = 0.2, },
                  Number2 = Input { Value = -0.1, }
               },
               ViewInfo = OperatorInfo { Pos = { -1.72302, 8.45453 } },
               UserControls = ordered() {
                  Number3 = {
                     INP_MaxAllowed = 1000000,
                     INP_Integer = true,
                     INPID_InputControl = "SliderControl",
                     IC_Steps = 6,
                     INP_MaxScale = 5,
                     INP_Default = 0,
                     INP_MinScale = 0,
                     INP_MinAllowed = -1000000,
                     LINKID_DataType = "Number",
                     INP_External = false,
                     ICS_ControlPage = "Controls",
                     LINKS_Name = "Face Select"
                  },
                  Number1 = {
                     INP_MaxAllowed = 1000000,
                     INP_Integer = false,
                     INPID_InputControl = "SliderControl",
                     INP_MaxScale = 2,
                     INP_MinScale = -2,
                     INP_MinAllowed = -1000000,
                     LINKID_DataType = "Number",
                     ICS_ControlPage = "Controls",
                     LINKS_Name = "Indent/Extrude"
                  },
                  Number2 = {
                     INP_MaxAllowed = 1000000,
                     INP_Integer = false,
                     INPID_InputControl = "SliderControl",
                     INP_MaxScale = 2,
                     INP_Default = 0.45,
                     INP_MinScale = -2,
                     INP_MinAllowed = -1000000,
                     LINKID_DataType = "Number",
                     INP_External = false,
                     ICS_ControlPage = "Controls",
                     LINKS_Name = "Threshold"
                  }
               }
            },
            CustomVertex3D1LUT1_1 = LUTBezier {
               KeyColorSplines = {
                  [0] = {
                     [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
                     [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
                  }
               },
               SplineColor = { Red = 0, Green = 0, Blue = 0 },
               CtrlWZoom = false,
            },
            CustomVertex3D1LUT2_1 = LUTBezier {
               KeyColorSplines = {
                  [0] = {
                     [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
                     [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
                  }
               },
               SplineColor = { Red = 0, Green = 0, Blue = 0 },
               CtrlWZoom = false,
            },
            CustomVertex3D1LUT3_1 = LUTBezier {
               KeyColorSplines = {
                  [0] = {
                     [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
                     [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
                  }
               },
               SplineColor = { Red = 0, Green = 0, Blue = 0 },
               CtrlWZoom = false,
            },
            CustomVertex3D1LUT4_1 = LUTBezier {
               KeyColorSplines = {
                  [0] = {
                     [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
                     [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
                  }
               },
               SplineColor = { Red = 0, Green = 0, Blue = 0 },
               CtrlWZoom = false,
            },
            XfB_1 = Transform3D {
               CtrlWShown = false,
               NameSet = true,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "XfA_1",
                     Source = "Output",
                  },
                  ["Transform3DOp.Rotate.Y"] = Input { Expression = "iif(CV_1.Number3==5, 180, 0)", },
               },
               ViewInfo = OperatorInfo { Pos = { -112.666, 8.45453 } },
            },
            XfA_1 = Transform3D {
               CtrlWShown = false,
               NameSet = true,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "UVs_1",
                     Source = "Output",
                  },
                  ["Transform3DOp.Rotate.X"] = Input { Expression = "iif(CV_1.Number3==3, 180, 0)", },
                  ["Transform3DOp.Rotate.Y"] = Input { Expression = "iif(CV_1.Number3==1, 180, 0)", },
               },
               ViewInfo = OperatorInfo { Pos = { -222.666, 8.45453 } },
            },
            UVs_1 = UVMap {
               CtrlWZoom = false,
               CtrlWShown = false,
               NameSet = true,
               Inputs = {
                  SceneInput = Input {
                     SourceOp = "Shape3D1",
                     Source = "Output",
                  },
                  Orientation = Input {
                     Value = 2,
                     Expression = "floor(CV_1.Number3/2)",
                  },
                  ["Size.X"] = Input { Value = 1, },
                  ["Size.Y"] = Input { Value = 1, },
                  ["Size.Z"] = Input { Value = 1, },
               },
               ViewInfo = OperatorInfo { Pos = { -338.26, 8.80953 } },
            }
         },
         UserControls = ordered() {
            Input4 = {
               { CCS_AddString = "Left" },
               { CCS_AddString = "Right" },
               { CCS_AddString = "Up" },
               { CCS_AddString = "Down" },
               { CCS_AddString = "Front" },
               { CCS_AddString = "Back" },
               INP_MaxAllowed = 1000000,
               INP_Integer = true,
               INPID_InputControl = "ComboControl",
               CC_LabelPosition = "Horizontal",
               INP_MaxScale = 5,
               INP_Default = 0,
               INP_MinScale = 0,
               INP_MinAllowed = -1000000,
               LINKID_DataType = "Number",
               INP_External = false,
               ICS_ControlPage = "Controls",
               LINKS_Name = "Face Select"
            }
         }
      },
      Merge3D1 = Merge3D {
         CtrlWZoom = false,
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "ReplaceNormals3D1_1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "SpotLight1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "SpotLight1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 830.647, 133.672 } },
      },
      SpotLight1 = LightSpot {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = -0.806, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 2.58, },
            ["Transform3DOp.Rotate.X"] = Input { Value = 2.3, },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
            ["Transform3DOp.Target.X"] = Input { Value = -0.261342426292233, },
            ["Transform3DOp.Target.Y"] = Input { Value = -0.0151408980461147, },
            ["Transform3DOp.Target.Z"] = Input { Value = -0.0288308414465824, },
            Intensity = Input { Value = 0.698, },
            DecayType = Input { Value = 1, },
            ConeAngle = Input { Value = 42.52, },
            ["ShadowLightInputs3D.ShadowsEnabled"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 789.515, 87.5254 } },
      },
      SpotLight1_1 = LightSpot {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 0.87, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 2.6393597, },
            ["Transform3DOp.UseTarget"] = Input { Value = 1, },
            ["Transform3DOp.Target.X"] = Input { Value = 0.247077303629885, },
            ["Transform3DOp.Target.Y"] = Input { Value = 0.0103719838401051, },
            ["Transform3DOp.Target.Z"] = Input { Value = 0.0301049058108268, },
            Intensity = Input { Value = 0.638, },
            DecayType = Input { Value = 1, },
            ConeAngle = Input { Value = 42.52, },
            ["ShadowLightInputs3D.ShadowsEnabled"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 905.428, 86.4173 } },
      }
   },
   ActiveTool = "Merge3D1"
}
Offline

birdseye

  • Posts: 365
  • Joined: Fri Jun 12, 2020 2:36 pm
  • Real Name: Iain Fisher

Re: Looking for 3D (un)folding map animations

PostMon Apr 29, 2024 8:39 am

This computer only runs v18.0.4 so there's no MultiMerge but if you use the PlanarTracker like a MultiMerge you could do something like this and pull the panels about on screen to keyframe them as you wish.

Edit maybe this was a bad idea or maybe it just needs wired up differently. I think it would work if I could link the top and bottom x coordinate but not the y coordinate of each corner pin but I can't remember how to do it.

Code: Select all
{
   Tools = ordered() {
      Background2 = Background {
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftRed = Input { Value = 0.85, },
            TopLeftGreen = Input { Value = 0.701, },
            TopLeftBlue = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 114.572, 105.9 } },
      },
      Merge2 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Background2",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Text1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 230.667, 106.152 } },
      },
      Text1 = TextPlus {
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            StyledText = Input { Value = "ACME BIG \nWORLD MAP", },
            Font = Input { Value = "Open Sans", },
            Style = Input { Value = "Bold", },
            Size = Input { Value = 0.2691, },
            VerticalJustificationNew = Input { Value = 3, },
            HorizontalJustificationNew = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 230.391, 64.2472 } },
      },
      Crop1 = Crop {
         Inputs = {
            XSize = Input { Value = 384, },
            YSize = Input { Value = 1080, },
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 371.333, 35.2424 } },
      },
      Instance_Crop1 = Crop {
         SourceOp = "Crop1",
         Inputs = {
            SettingsNest = Input { },
            XOffset = Input { Value = 384, },
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            CommentsNest = Input { },
            FrameRenderScriptNest = Input { },
            StartRenderScripts = Input { },
            EndRenderScripts = Input { },
         },
         ViewInfo = OperatorInfo { Pos = { 390, 69.7879 } },
      },
      Instance_Crop1_2 = Crop {
         SourceOp = "Crop1",
         Inputs = {
            SettingsNest = Input { },
            XOffset = Input { Value = 1152, },
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            CommentsNest = Input { },
            FrameRenderScriptNest = Input { },
            StartRenderScripts = Input { },
            EndRenderScripts = Input { },
         },
         ViewInfo = OperatorInfo { Pos = { 415.333, 134.03 } },
      },
      Instance_Crop1_1 = Crop {
         SourceOp = "Crop1",
         Inputs = {
            SettingsNest = Input { },
            XOffset = Input { Value = 768, },
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            CommentsNest = Input { },
            FrameRenderScriptNest = Input { },
            StartRenderScripts = Input { },
            EndRenderScripts = Input { },
         },
         ViewInfo = OperatorInfo { Pos = { 401.333, 102.515 } },
      },
      Instance_Crop1_3 = Crop {
         SourceOp = "Crop1",
         Inputs = {
            SettingsNest = Input { },
            XOffset = Input { Value = 1536, },
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            CommentsNest = Input { },
            FrameRenderScriptNest = Input { },
            StartRenderScripts = Input { },
            EndRenderScripts = Input { },
         },
         ViewInfo = OperatorInfo { Pos = { 434.667, 167.97 } },
      },
      PlanarTracker1 = Dimension.PlanarTracker {
         CtrlWZoom = false,
         Inputs = {
            Background = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Operation = Input { Value = FuID { "CornerPin" }, },
            ["Pattern.Polygon"] = Input {
               Value = Polyline {
               },
            },
            Track = Input {
               SourceOp = "PlanarTracker1Track",
               Source = "Value",
            },
            TrackDummy = Input { Value = Matrix { RefTime = 0, IsBogus = true, ToRef = { [0] = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 } }, },
            NumberOfCornerPins = Input { Value = 5, },
            ["CornerPin1.Nest"] = Input { Value = 1, },
            ["CornerPin1.Image"] = Input {
               SourceOp = "Crop1",
               Source = "Output",
            },
            ["CornerPin1.TopLeft"] = Input { Value = { 0.0922004008016032, 0.938996996996997 }, },
            ["CornerPin1.TopRight"] = Input { Value = { 0.275168336673347, 0.972966966966967 }, },
            ["CornerPin1.BottomLeft"] = Input { Value = { 0.0921843687374749, 0.077033033033033 }, },
            ["CornerPin1.BottomRight"] = Input { Value = { 0.292124248496994, 0.0540540540540541 }, },
            StableTrack = Input { Value = Matrix { RefTime = 0, IsBogus = true, ToRef = { [0] = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 } }, },
            ["CornerPin2.Nest"] = Input { Value = 1, },
            ["CornerPin2.Image"] = Input {
               SourceOp = "Instance_Crop1",
               Source = "Output",
            },
            ["CornerPin2.TopLeft"] = Input {
               Value = { 0.275168336673347, 0.972966966966967 },
               Expression = "CornerPin1.TopRight",
            },
            ["CornerPin2.TopRight"] = Input { Value = { 0.424, 0.936 }, },
            ["CornerPin2.BottomLeft"] = Input {
               Value = { 0.292124248496994, 0.0540540540540541 },
               Expression = "CornerPin1.BottomRight",
            },
            ["CornerPin2.BottomRight"] = Input { Value = { 0.445, 0.115 }, },
            ["CornerPin3.Nest"] = Input { Value = 1, },
            ["CornerPin3.Image"] = Input {
               SourceOp = "Instance_Crop1_1",
               Source = "Output",
            },
            ["CornerPin3.TopLeft"] = Input {
               Value = { 0.424, 0.936 },
               Expression = "CornerPin2.TopRight",
            },
            ["CornerPin3.TopRight"] = Input { Value = { 0.574911823647295, 0.969975975975976 }, },
            ["CornerPin3.BottomLeft"] = Input {
               Value = { 0.445, 0.115 },
               Expression = "CornerPin2.BottomRight",
            },
            ["CornerPin3.BottomRight"] = Input { Value = { 0.599899799599198, 0.048027027027027 }, },
            ["CornerPin4.Nest"] = Input { Value = 1, },
            ["CornerPin4.Image"] = Input {
               SourceOp = "Instance_Crop1_2",
               Source = "Output",
            },
            ["CornerPin4.TopLeft"] = Input {
               Value = { 0.574911823647295, 0.969975975975976 },
               Expression = "CornerPin3.TopRight",
            },
            ["CornerPin4.TopRight"] = Input { Value = { 0.744959919839679, 0.953957957957958 }, },
            ["CornerPin4.BottomLeft"] = Input {
               Value = { 0.599899799599198, 0.048027027027027 },
               Expression = "CornerPin3.BottomRight",
            },
            ["CornerPin4.BottomRight"] = Input { Value = { 0.763915831663327, 0.0900810810810811 }, },
            ["CornerPin5.Nest"] = Input { Value = 1, },
            ["CornerPin5.Image"] = Input {
               SourceOp = "Instance_Crop1_3",
               Source = "Output",
            },
            ["CornerPin5.TopLeft"] = Input {
               Value = { 0.744959919839679, 0.953957957957958 },
               Expression = "CornerPin4.TopRight",
            },
            ["CornerPin5.TopRight"] = Input { Value = { 0.925823647294589, 0.96296996996997 }, },
            ["CornerPin5.BottomLeft"] = Input {
               Value = { 0.763915831663327, 0.0900810810810811 },
               Expression = "CornerPin4.BottomRight",
            },
            ["CornerPin5.BottomRight"] = Input { Value = { 0.936895791583166, 0.063039039039039 }, },
         },
         ViewInfo = OperatorInfo { Pos = { 618, 109.788 } },
      },
      PlanarTracker1Track = BezierSpline {
         SplineColor = { Red = 244, Green = 1, Blue = 129 },
         CtrlWZoom = false,
         KeyFrames = {
            [240] = { 0, Flags = { Linear = true, LockedY = true }, Value = Matrix { RefTime = 0, IsBogus = true, ToRef = { [0] = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 } } }
         }
      },
      Background1 = Background {
         CtrlWZoom = false,
         Inputs = {
            GlobalOut = Input { Value = 500, },
            Width = Input { Value = 3000, },
            Height = Input { Value = 2000, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            TopLeftAlpha = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 618, 154.03 } },
      }
   },
   ActiveTool = "Background1"
}

Return to Fusion

Who is online

Users browsing this forum: Hendrik Proosa and 19 guests