Page 1 of 1

Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 3:47 pm
by Ignacio de La Cierva
I need to make a 3D object slowly appear o disappear with a vertical wipe. But I need to do it in the 3D space, not wiping out the render. (I'll deal with the holes 8-) )

It's easy to do, just a white BG with an animated rectangle mask, applied to object material, adding a UVMap3D node, planar, to fit the animated mask to the object front.

The problem comes when the object already had UV's for texture. When you add the UVMap3D node to fit the wipe, you lose the previous mapping, and then the texture is messed.

Is it posible in any way to have different UVmapping for different channels?

Disclaimer: I'm in the first days of a project involving a lot of things I've never done in Fusion before, that's why I'm opening so many threads. Maybe a generic thread "Help me to start a project" where I post the so different issues I'm facing, could be cleaner and more appropiate. Just tell me.

I'm fighting to keep this project 100% Fusion (exceto object modelling). I know how to do all these things within Adsk 3DSMax; Advanced particles, real 3D booleans, mult-material with multi-UV's, real 3D volumetrics with shadows,etc... But then I'd lose interactivitywith the rest of the elements and I'd had to deal with camera import/export issues. I've read that's another headache source.

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 4:07 pm
by Naveen Vasanth
Do you mean a 3D matte object?

Code: Select all
{
   Tools = ordered() {
      Shape3D1 = Shape3D {
         Inputs = {
            Shape = Input { Value = FuID { "SurfaceConeInputs" }, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["SurfaceConeInputs.ObjectID.ObjectID"] = Input { Value = 2, }
         },
         ViewInfo = OperatorInfo { Pos = { 387, 82 } },
      },
      Shape3D2 = Shape3D {
         CtrlWZoom = false,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 0.230446246175056, },
            ["Transform3DOp.Translate.Z"] = Input {
               SourceOp = "Shape3D2ZOffset",
               Source = "Value",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
            ["SurfacePlaneInputs.Width"] = Input { Value = 2.14, },
            ["SurfacePlaneInputs.Matte.Nest"] = Input { Value = 1, },
            ["SurfacePlaneInputs.Matte.IsMatte"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, }
         },
         ViewInfo = OperatorInfo { Pos = { 391, 115 } },
      },
      Shape3D2ZOffset = BezierSpline {
         SplineColor = { Red = 254, Green = 56, Blue = 46 },
         NameSet = true,
         KeyFrames = {
            [0] = { 1.63570848836249, RH = { 16.6666666666667, 0.59598750555093 }, Flags = { Linear = true } },
            [50] = { -1.4834544600722, LH = { 33.3333333333333, -0.443733477260634 }, RH = { 66.6666666666667, -0.465430771831517 }, Flags = { Linear = true } },
            [100] = { 1.57061660464984, LH = { 83.3333333333333, 0.552592916409163 }, Flags = { Linear = true } }
         }
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Shape3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Shape3D2",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 497, 115 } },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 0.631314283470456, },
            ["Transform3DOp.Translate.Y"] = Input { Value = 0.271486410409949, },
            ["Transform3DOp.Translate.Z"] = Input { Value = 5.14163621566249, },
            ["Transform3DOp.Rotate.X"] = Input { Value = -3.00001168251038, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = 7.00000810623169, },
            FLength = Input { Value = 18.2123442718302, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" }, },
            FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 4, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 391, 148 } },
      },
      Renderer3D1 = Renderer3D {
         CustomData = {
            ToolVersion = 2,
         },
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 607, 115 } },
      }
   }
}

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 4:17 pm
by Ignacio de La Cierva
Thanks Naveen

I tested, but I need the wipe to work from any point of view.

I can put a matte box bounding my object, and animate it up, revealing the geometry.

That works from a "Front" or lower view, but, as you raise angle, the matte starts blocking undesired parts. From a cenital view, the matte object blocks the entire geometry. The object is uncovered but yu can't see it.

I need a camera flying around while the 3Dobject appears from bottom to top. I'll see the hole, but I'll cover it with glowing particles.

(Im trying to simulate 3D printing, where an object is created layer by layer.)

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 4:19 pm
by Okke Verbart
Have you tried playing around with the CustomVertex tool. Simple example below. May be hard to do more complex shapes etc, but worth having a play.

Code: Select all
{
   Tools = ordered() {
      Shape3D1 = Shape3D {
         Inputs = {
            Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 2, }
         },
         ViewInfo = OperatorInfo { Pos = { 282, 157.5 } },
      },
      CustomVertex3D1 = CustomVertex3D {
         CtrlWZoom = false,
         Inputs = {
            SceneInput = Input {
               SourceOp = "Shape3D1",
               Source = "Output",
            },
            ["Position.X"] = Input { Value = "if(px>-0, 0,px)", },
            ["Position.Y"] = Input { Value = "if(px>-0, 0,py)", },
            ["VertexColor.Nest"] = Input { Value = 1, },
            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",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 421, 160.5 } },
      },
      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 },
         NameSet = true,
      },
      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 },
         NameSet = true,
      },
      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 },
         NameSet = true,
      },
      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 },
         NameSet = true,
      }
   }
}

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 4:41 pm
by Bryan Ray
I'd do it by manipulating the vertex alpha by position, instead:

Code: Select all
{
   Tools = ordered() {
      Shape3D1 = Shape3D {
         CtrlWZoom = false,
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 2, }
         },
         ViewInfo = OperatorInfo { Pos = { 470, 219 } },
      },
      CustomVertex3D2 = CustomVertex3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Shape3D1",
               Source = "Output",
            },
            ["VertexColor.Nest"] = Input { Value = 1, },
            ["VertexColor.A"] = Input { Value = "if(py<n1,1,0)", },
            Number1 = Input { Value = 0.2703862, },
            LUT1 = Input {
               SourceOp = "CustomVertex3D2LUT1",
               Source = "Value",
            },
            LUT2 = Input {
               SourceOp = "CustomVertex3D2LUT2",
               Source = "Value",
            },
            LUT3 = Input {
               SourceOp = "CustomVertex3D2LUT3",
               Source = "Value",
            },
            LUT4 = Input {
               SourceOp = "CustomVertex3D2LUT4",
               Source = "Value",
            },
            Intermediate1 = Input { Value = "(n1 - n2) / (n3 - n2)", },
            Intermediate2 = Input { Value = "math.min(math.max(i1, 0), 1.0)", },
         },
         ViewInfo = OperatorInfo { Pos = { 653, 220 } },
      },
      CustomVertex3D2LUT1 = 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 },
         NameSet = true,
      },
      CustomVertex3D2LUT2 = 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 },
         NameSet = true,
      },
      CustomVertex3D2LUT3 = 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 },
         NameSet = true,
      },
      CustomVertex3D2LUT4 = 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 },
         NameSet = true,
      }
   }
}

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 4:45 pm
by Okke Verbart
hmmm, yes had thought of that too, but then you can't see geometry where the cut is? If you do it with the position ones (at least in my simple example) you can make a virtual cut.

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 5:11 pm
by Ignacio de La Cierva
Impressive!!

Bryan, that works perfect for me, as I'll cover the holes with a glowing particle system. Its perfect for 1st 1/3 of my object printing.

The last 2/3 of the printing process, due to my object shape, is compatible with Okke's variant, that leaves no holes and really looks like a real-3D-geometry-animated-boolean so I can give very close shots of that final part.

So in this project of simulate a 3D printing I'm, for first time using, expressions, advanced particles, pcustom, and customVertex. I wont be the same when I finish :)

Love this forum!

PS: You have lots of beers payed if you come to visit north Spain.

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 9:09 pm
by Okke Verbart
Hey Ignacio - would be awesome to see your finished project (if/when you can share). Sounds intriguing!

Re: Wipe out a 3D object.

PostPosted: Tue Jan 16, 2018 9:59 pm
by Ignacio de La Cierva
Not so awesome, I'm afraid.

Just a graphic version of the process of metal-3D-printing a high security key.

Two years ago, when they were a start-up with just an idea, I did this low-budget for them:

Pure 3DMax render with no post.



Now they have functional prototypes and are in negotiations for mass production. I'm also preparing a new version of the video, heavily updated visually, 100% Fusion (trying to), imitating the real process, that involves millions of metal dust particles, a laser melting it and a lot of sparks. :D Yeah.

At this precise moment I'm stucked with something pretty stupid. Want to connect a camera position to the position of another object. But that object has no own animation, offset x,y and z are 0.0 . It moves because its linked to a merge node at certain distance, and the merge node rotates. How can I access the actual position of an non-animated object that inherits movement from its parent node?

(What I'm trying to do now is a kind of semi-automated camera travel+crane+hot head. Surely it's already done over there...)

Re: Wipe out a 3D object.

PostPosted: Wed Jan 17, 2018 7:59 pm
by Okke Verbart
Looks pretty awesome to me!

Re the question around position etc. Try the CoordTransform Position modifier. Page 104 of the reference guide. Small example below with a shape3D, then a merge that rotates/repositions it and then another merge. Then I added a pEmitter, and added the modifier to the position. In the modifier tab you can then drag in the target and the output scene...and presto: pemitter is now positioned in the "new" position of the Shape3D:

Code: Select all
{
   Tools = ordered() {
      Shape3D1 = Shape3D {
         Inputs = {
            Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 2, }
         },
         ViewInfo = OperatorInfo { Pos = { 396, 141 } },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 4, },
            ["Transform3DOp.Rotate.X"] = Input { Value = 53.7, },
            ["Transform3DOp.Rotate.Y"] = Input { Value = 292.6, },
            ["Transform3DOp.Rotate.Z"] = Input { Value = 22.5, },
            ["Transform3DOp.PivotNest"] = Input { Value = 1, },
            ["Transform3DOp.Pivot.X"] = Input { Value = -2.154, },
            ["Transform3DOp.Pivot.Y"] = Input { Value = 2.288, },
            SceneInput1 = Input {
               SourceOp = "Shape3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 562, 143 } },
      },
      Merge3D2 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 777, 143 } },
      },
      pEmitter1 = pEmitter {
         ID = 6,
         CtrlWZoom = false,
         Inputs = {
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeoverLife",
               Source = "Value",
            },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BluroverLife2D",
               Source = "Value",
            },
            ["SphereRgn.Translate.X"] = Input {
               SourceOp = "CoordTransform3D1",
               Source = "Position.X",
            },
            ["SphereRgn.Translate.Y"] = Input {
               SourceOp = "CoordTransform3D1",
               Source = "Position.Y",
            },
            ["SphereRgn.Translate.Z"] = Input {
               SourceOp = "CoordTransform3D1",
               Source = "Position.Z",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 783, 252 } },
      },
      pEmitter1SizeoverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.3, 0.5 }, Flags = { Linear = true } },
               [1] = { 0.5, LH = { 0.7, 0.5 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 0, Green = 0, Blue = 0 },
         NameSet = true,
      },
      pEmitter1BluroverLife2D = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.3, 0.5 }, Flags = { Linear = true } },
               [1] = { 0.5, LH = { 0.7, 0.5 }, Flags = { Linear = true } }
            }
         },
         SplineColor = { Red = 0, Green = 0, Blue = 0 },
         NameSet = true,
      },
      CoordTransform3D1 = CoordTransform3D {
         CtrlWZoom = false,
         Inputs = {
            TargetObject = Input {
               SourceOp = "Shape3D1",
               Source = "Output",
            },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
         },
      },
      pRender1 = pRender {
         Inputs = {
            _MotionBlurWarning = Input { Disabled = true, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
            OutputMode = Input { Disabled = true, },
            IntegrationMethod = Input { Value = FuID { "RK4" }, },
            ["MaterialID.MaterialID"] = Input { Value = 2, },
            ["ObjectID.ObjectID"] = Input { Value = 3, },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 892, 247 } },
      }
   }
}

Re: Wipe out a 3D object.

PostPosted: Wed Jan 17, 2018 11:32 pm
by Ignacio de La Cierva
Again, the answer was RTFM :mrgreen:

It seems I'm entering in that learning stage where one needs to pay attention to those parts of manuals that, in the first days, were too cryptic or simply "wtf why would anyone ever need this?".

I'll bring the manuals to bed for reading. Sad, but I guess I'll find oil and gold, now I have the basics.


Thanks again, Okke!

Re: Wipe out a 3D object.

PostPosted: Thu Jan 18, 2018 9:08 pm
by Okke Verbart
My pleasure! To be honest, it was only fairly recently that I needed this myself :-)