Jump to: Board index » General » Fusion

CustomTool performance

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

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

CustomTool performance

PostMon Sep 14, 2020 8:25 am

Hi;

I created an effect in fusion, is just a couple of custom tool with basic math and the playback goes down to 1.5-3.5 fps.
Doing the same exact thing in the color page, with a bunch of layer nodes, with various blend modes, and files imported as external matte. I get the exact same result but with real time playback.

Is there something I might be doing wrong and should look into, or the CustomTool is just not optimized?
Offline

febros

  • Posts: 34
  • Joined: Thu Aug 13, 2020 6:50 am
  • Real Name: Aniol Marin

Re: CustomTool performance

PostMon Sep 14, 2020 8:50 am

Are you performing the maths at the Channel tab?

Be aware this will perform the calculations once per pixel. This may be the cause of your preview issues.

Try moving everything you can to the Setup tab, and reference it as s1, s2, and so on. The Setup page is calculated only once per frame, therefore you could achieve a way better performance for the same operation.
Resolve 17.1 (or newer), Fusion 9
Windows 10 / Debian 10.8
Ryzen 3900X, GTX 1080Ti, 64Gb RAM @ 3200MHz
Audio: Echo FireWire 12 + Presonus Octopre MkII
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostMon Sep 14, 2020 9:00 am

"Because these expressions are evaluated once per frame only and not for
each pixel, it makes no sense to use per-pixel variables like X and Y or channel
variables like r1,g1,b1, and so on. Allowable values include constants, variables like n1..
n8, time, W and H, and so on, and functions like sin() or getr1d()."

Quoting from the manual. Since my operation is:
(c2-(c1*(1-c3)))/c3
I cannot use the set up tab
Offline

febros

  • Posts: 34
  • Joined: Thu Aug 13, 2020 6:50 am
  • Real Name: Aniol Marin

Re: CustomTool performance

PostMon Sep 14, 2020 9:26 am

Yesterday I stumbled across a similar problem (thread) .

I'm still hoping to find a way to reference the inputs in the Setup tab. However, in your case I am suspicious of the fact that the performance drops that much from a relatively simple operation, while it doesn't when performed in the Color page. What are your specs? Is it possible that your CPU is way less powerful than your GPU?
Resolve 17.1 (or newer), Fusion 9
Windows 10 / Debian 10.8
Ryzen 3900X, GTX 1080Ti, 64Gb RAM @ 3200MHz
Audio: Echo FireWire 12 + Presonus Octopre MkII
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostMon Sep 14, 2020 9:33 am

Intel i9 10940X
Quadro RTX 5000
128 GB ram
Offline

febros

  • Posts: 34
  • Joined: Thu Aug 13, 2020 6:50 am
  • Real Name: Aniol Marin

Re: CustomTool performance

PostMon Sep 14, 2020 9:42 am

I've tried it by myself, I have no performance penalty in a less powerful machine.

I don't know what else to tell you, sorry :?
Resolve 17.1 (or newer), Fusion 9
Windows 10 / Debian 10.8
Ryzen 3900X, GTX 1080Ti, 64Gb RAM @ 3200MHz
Audio: Echo FireWire 12 + Presonus Octopre MkII
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostMon Sep 14, 2020 10:04 am

I will test it on other machines too.
You need three picture input might be what slow it down
Offline

febros

  • Posts: 34
  • Joined: Thu Aug 13, 2020 6:50 am
  • Real Name: Aniol Marin

Re: CustomTool performance

PostMon Sep 14, 2020 11:13 am

Tried already with 3 inputs, of course.

It does consume a fair amount of VRAM, but I have no problems keeping a real-time preview in a simple composition. Have you tried to apply it from loaders? Maybe the custom tool is only the last straw?
Resolve 17.1 (or newer), Fusion 9
Windows 10 / Debian 10.8
Ryzen 3900X, GTX 1080Ti, 64Gb RAM @ 3200MHz
Audio: Echo FireWire 12 + Presonus Octopre MkII
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostMon Sep 14, 2020 12:42 pm

The same set up in color plays with no problem.


My full tree

Code: Select all
{
   Tools = ordered() {
      MediaOut1 = MediaOut {
         Inputs = {
            Index = Input { Value = "0", },
            Input = Input {
               SourceOp = "Rebuild",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 605, 148.5 } },
      },
      Rebuild = Custom {
         NameSet = true,
         Inputs = {
            LUTIn1 = Input {
               SourceOp = "RebuildLUTIn1",
               Source = "Value",
            },
            LUTIn2 = Input {
               SourceOp = "RebuildLUTIn2",
               Source = "Value",
            },
            LUTIn3 = Input {
               SourceOp = "RebuildLUTIn3",
               Source = "Value",
            },
            LUTIn4 = Input {
               SourceOp = "RebuildLUTIn4",
               Source = "Value",
            },
            RedExpression = Input { Value = "c1*(1-c3)+c2*c3", },
            GreenExpression = Input { Value = "c1*(1-c3)+c2*c3", },
            BlueExpression = Input { Value = "c1*(1-c3)+c2*c3", },
            Image1 = Input {
               SourceOp = "PLATE",
               Source = "Output",
            },
            Image2 = Input {
               SourceOp = "BrightnessContrast1",
               Source = "Output",
            },
            Image3 = Input {
               SourceOp = "Transform1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 495, 148.5 } },
      },
      RebuildLUTIn1 = 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 = 204, Green = 0, Blue = 0 },
         NameSet = true,
      },
      RebuildLUTIn2 = 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 = 204, Blue = 0 },
         NameSet = true,
      },
      RebuildLUTIn3 = 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 = 204 },
         NameSet = true,
      },
      RebuildLUTIn4 = 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 = 204, Green = 204, Blue = 204 },
         NameSet = true,
      },
      BrightnessContrast1 = BrightnessContrast {
         Inputs = {
            ClipBlack = Input { Value = 1, },
            ClipWhite = Input { Value = 1, },
            Input = Input {
               SourceOp = "separation",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 385, 148.5 } },
      },
      separation = Custom {
         NameSet = true,
         Inputs = {
            LUTIn1 = Input {
               SourceOp = "separationLUTIn1",
               Source = "Value",
            },
            LUTIn2 = Input {
               SourceOp = "separationLUTIn2",
               Source = "Value",
            },
            LUTIn3 = Input {
               SourceOp = "separationLUTIn3",
               Source = "Value",
            },
            LUTIn4 = Input {
               SourceOp = "separationLUTIn4",
               Source = "Value",
            },
            RedExpression = Input { Value = "(c2-(c1*(1-c3)))/c3", },
            GreenExpression = Input { Value = "(c2-(c1*(1-c3)))/c3", },
            BlueExpression = Input { Value = "(c2-(c1*(1-c3)))/c3", },
            Image1 = Input {
               SourceOp = "PLATE",
               Source = "Output",
            },
            Image2 = Input {
               SourceOp = "COMP",
               Source = "Output",
            },
            Image3 = Input {
               SourceOp = "Transform1",
               Source = "Output",
            },
            Comments = Input { Value = "IMAGE 1 = PLATE\nIMAGE 2 = COMPOSED SHOT\nIMAGE 3 = B/W MATTE", },
         },
         ViewInfo = OperatorInfo { Pos = { 275, 148.5 } },
      },
      separationLUTIn1 = 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 = 204, Green = 0, Blue = 0 },
         NameSet = true,
      },
      separationLUTIn2 = 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 = 204, Blue = 0 },
         NameSet = true,
      },
      separationLUTIn3 = 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 = 204 },
         NameSet = true,
      },
      separationLUTIn4 = 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 = 204, Green = 204, Blue = 204 },
         NameSet = true,
      },
      Transform1 = Transform {
         Inputs = {
            Input = Input {
               SourceOp = "MATTE",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 0, 115.5 } },
      },
      COMP = MediaIn {
         ExtentSet = true,
         CtrlWZoom = false,
         NameSet = true,
         CustomData = { MediaProps = { MEDIA_NUM_LAYERS = 1, MEDIA_FORMAT_TYPE = "QuickTime", MEDIA_NAME = "EP001_SQ0076_SH0280_v13.mov", MEDIA_HEIGHT = 1800, MEDIA_PAR = 1, MEDIA_START_FRAME = 0, MEDIA_SRC_FRAME_RATE = 24, MEDIA_MARK_OUT = 250, MEDIA_WIDTH = 3200, MEDIA_NUM_FRAMES = 251, MEDIA_MARK_IN = 0, MEDIA_PATH = "V:\\VERA\\4_VFX\\RULLO_01\\RENDER\\0076\\EP001_SQ0076_SH0280\\EP001_SQ0076_SH0280_v13.mov" }, },
         Inputs = {
            GlobalOut = Input { Value = 250, },
            Layer = Input { Value = "0", },
            ClipTimeEnd = Input { Value = 250, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { -110, 82.5 } },
      },
      PLATE = MediaIn {
         ExtentSet = true,
         NameSet = true,
         CustomData = { MediaProps = { MEDIA_NUM_LAYERS = 1, MEDIA_FORMAT_TYPE = "QuickTime", MEDIA_NAME = "A017C012_191008_R4HL.mov", MEDIA_HEIGHT = 1800, MEDIA_PATH = "V:\\VERA\\1_DAILIES\\20200615\\SC076\\Event_Version 1_0002_0026\\A017C012_191008_R4HL.mov", MEDIA_START_FRAME = 0, MEDIA_SRC_FRAME_RATE = 24, MEDIA_MARK_OUT = 250, MEDIA_WIDTH = 3200, MEDIA_NUM_FRAMES = 251, MEDIA_MARK_IN = 0, MEDIA_PAR = 1 }, },
         Inputs = {
            GlobalOut = Input { Value = 250, },
            MediaID = Input { Value = "ed08f67f-efff-4a5e-b29e-4940f6d86f77", },
            Layer = Input { Value = "", },
            ClipTimeEnd = Input { Value = 250, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { -110, 49.5 } },
      },
      MATTE = MediaIn {
         ExtentSet = true,
         NameSet = true,
         CustomData = { MediaProps = { MEDIA_NUM_LAYERS = 1, MEDIA_FORMAT_TYPE = "QuickTime", MEDIA_NAME = "MATTE_EP001_SQ0076_SH0280_v13.mov", MEDIA_HEIGHT = 1800, MEDIA_PATH = "V:\\VERA\\4_VFX\\RULLO_01\\RENDER_MATTE\\0076\\MATTE_EP001_SQ0076_SH0280_v08\\MATTE_EP001_SQ0076_SH0280_v13.mov", MEDIA_START_FRAME = 0, MEDIA_SRC_FRAME_RATE = 24, MEDIA_MARK_OUT = 250, MEDIA_WIDTH = 3200, MEDIA_NUM_FRAMES = 251, MEDIA_MARK_IN = 0, MEDIA_PAR = 1 }, },
         Inputs = {
            GlobalOut = Input { Value = 250, },
            MediaID = Input { Value = "f445fbfe-6cfe-41d5-924c-28c438a2edc8", },
            Layer = Input { Value = "", },
            ClipTimeEnd = Input { Value = 250, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { -110, 115.5 } },
      }
   }
}
Offline

Sander de Regt

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

Re: CustomTool performance

PostMon Sep 14, 2020 3:38 pm

Which version of Fusion/Resolve are you using? There has been a custom tool update/fix in recent builds that fixed at least a couple of issues similar to what you're describing.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostTue Sep 15, 2020 7:16 am

Which version of Fusion/Resolve are you using? There has been a custom tool update/fix in recent builds that fixed at least a couple of issues similar to what you're describing.


I will look into it, Resolve 16.2.107
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostTue Sep 15, 2020 9:08 am

Jean Paul Sneider wrote:I will look into it, Resolve 16.2.107
Assuming this means 16.2.1, then this is the explanation: the CustomTool performance fix occurred in version 16.2.4.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostTue Sep 15, 2020 2:23 pm

Updated to 16.2.6 no change. Looks like the optimization was at render time not playback
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostTue Sep 15, 2020 2:25 pm

Jean Paul Sneider wrote:Updated to 16.2.6 no change. Looks like the optimization was at render time not playback
I saw major performance improvements with the CustomTool - identically during playback and Render - in the 16.2.4 update. Before that update comps using the CT would max out at 2-3 FPS, and after they gave a solid 30+ FPS.

Can you post a sample composition that shows this very low performance. Copy and paste the nodes into the forum surrounded by Code tags. Or do File -> Export Fusion Composition, zip up the file and attach it here.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostWed Sep 16, 2020 4:33 pm

This one. Files are Apple Prores 4444 and the matte 422
Jean Paul Sneider wrote:The same set up in color plays with no problem.


My full tree

Code: Select all
{
   Tools = ordered() {
      MediaOut1 = MediaOut {
         Inputs = {
            Index = Input { Value = "0", },
            Input = Input {
               SourceOp = "Rebuild",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 605, 148.5 } },
      },
      Rebuild = Custom {
         NameSet = true,
         Inputs = {
            LUTIn1 = Input {
               SourceOp = "RebuildLUTIn1",
               Source = "Value",
            },
            LUTIn2 = Input {
               SourceOp = "RebuildLUTIn2",
               Source = "Value",
            },
            LUTIn3 = Input {
               SourceOp = "RebuildLUTIn3",
               Source = "Value",
            },
            LUTIn4 = Input {
               SourceOp = "RebuildLUTIn4",
               Source = "Value",
            },
            RedExpression = Input { Value = "c1*(1-c3)+c2*c3", },
            GreenExpression = Input { Value = "c1*(1-c3)+c2*c3", },
            BlueExpression = Input { Value = "c1*(1-c3)+c2*c3", },
            Image1 = Input {
               SourceOp = "PLATE",
               Source = "Output",
            },
            Image2 = Input {
               SourceOp = "BrightnessContrast1",
               Source = "Output",
            },
            Image3 = Input {
               SourceOp = "Transform1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 495, 148.5 } },
      },
      RebuildLUTIn1 = 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 = 204, Green = 0, Blue = 0 },
         NameSet = true,
      },
      RebuildLUTIn2 = 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 = 204, Blue = 0 },
         NameSet = true,
      },
      RebuildLUTIn3 = 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 = 204 },
         NameSet = true,
      },
      RebuildLUTIn4 = 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 = 204, Green = 204, Blue = 204 },
         NameSet = true,
      },
      BrightnessContrast1 = BrightnessContrast {
         Inputs = {
            ClipBlack = Input { Value = 1, },
            ClipWhite = Input { Value = 1, },
            Input = Input {
               SourceOp = "separation",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 385, 148.5 } },
      },
      separation = Custom {
         NameSet = true,
         Inputs = {
            LUTIn1 = Input {
               SourceOp = "separationLUTIn1",
               Source = "Value",
            },
            LUTIn2 = Input {
               SourceOp = "separationLUTIn2",
               Source = "Value",
            },
            LUTIn3 = Input {
               SourceOp = "separationLUTIn3",
               Source = "Value",
            },
            LUTIn4 = Input {
               SourceOp = "separationLUTIn4",
               Source = "Value",
            },
            RedExpression = Input { Value = "(c2-(c1*(1-c3)))/c3", },
            GreenExpression = Input { Value = "(c2-(c1*(1-c3)))/c3", },
            BlueExpression = Input { Value = "(c2-(c1*(1-c3)))/c3", },
            Image1 = Input {
               SourceOp = "PLATE",
               Source = "Output",
            },
            Image2 = Input {
               SourceOp = "COMP",
               Source = "Output",
            },
            Image3 = Input {
               SourceOp = "Transform1",
               Source = "Output",
            },
            Comments = Input { Value = "IMAGE 1 = PLATE\nIMAGE 2 = COMPOSED SHOT\nIMAGE 3 = B/W MATTE", },
         },
         ViewInfo = OperatorInfo { Pos = { 275, 148.5 } },
      },
      separationLUTIn1 = 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 = 204, Green = 0, Blue = 0 },
         NameSet = true,
      },
      separationLUTIn2 = 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 = 204, Blue = 0 },
         NameSet = true,
      },
      separationLUTIn3 = 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 = 204 },
         NameSet = true,
      },
      separationLUTIn4 = 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 = 204, Green = 204, Blue = 204 },
         NameSet = true,
      },
      Transform1 = Transform {
         Inputs = {
            Input = Input {
               SourceOp = "MATTE",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 0, 115.5 } },
      },
      COMP = MediaIn {
         ExtentSet = true,
         CtrlWZoom = false,
         NameSet = true,
         CustomData = { MediaProps = { MEDIA_NUM_LAYERS = 1, MEDIA_FORMAT_TYPE = "QuickTime", MEDIA_NAME = "EP001_SQ0076_SH0280_v13.mov", MEDIA_HEIGHT = 1800, MEDIA_PAR = 1, MEDIA_START_FRAME = 0, MEDIA_SRC_FRAME_RATE = 24, MEDIA_MARK_OUT = 250, MEDIA_WIDTH = 3200, MEDIA_NUM_FRAMES = 251, MEDIA_MARK_IN = 0, MEDIA_PATH = "V:\\VERA\\4_VFX\\RULLO_01\\RENDER\\0076\\EP001_SQ0076_SH0280\\EP001_SQ0076_SH0280_v13.mov" }, },
         Inputs = {
            GlobalOut = Input { Value = 250, },
            Layer = Input { Value = "0", },
            ClipTimeEnd = Input { Value = 250, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { -110, 82.5 } },
      },
      PLATE = MediaIn {
         ExtentSet = true,
         NameSet = true,
         CustomData = { MediaProps = { MEDIA_NUM_LAYERS = 1, MEDIA_FORMAT_TYPE = "QuickTime", MEDIA_NAME = "A017C012_191008_R4HL.mov", MEDIA_HEIGHT = 1800, MEDIA_PATH = "V:\\VERA\\1_DAILIES\\20200615\\SC076\\Event_Version 1_0002_0026\\A017C012_191008_R4HL.mov", MEDIA_START_FRAME = 0, MEDIA_SRC_FRAME_RATE = 24, MEDIA_MARK_OUT = 250, MEDIA_WIDTH = 3200, MEDIA_NUM_FRAMES = 251, MEDIA_MARK_IN = 0, MEDIA_PAR = 1 }, },
         Inputs = {
            GlobalOut = Input { Value = 250, },
            MediaID = Input { Value = "ed08f67f-efff-4a5e-b29e-4940f6d86f77", },
            Layer = Input { Value = "", },
            ClipTimeEnd = Input { Value = 250, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { -110, 49.5 } },
      },
      MATTE = MediaIn {
         ExtentSet = true,
         NameSet = true,
         CustomData = { MediaProps = { MEDIA_NUM_LAYERS = 1, MEDIA_FORMAT_TYPE = "QuickTime", MEDIA_NAME = "MATTE_EP001_SQ0076_SH0280_v13.mov", MEDIA_HEIGHT = 1800, MEDIA_PATH = "V:\\VERA\\4_VFX\\RULLO_01\\RENDER_MATTE\\0076\\MATTE_EP001_SQ0076_SH0280_v08\\MATTE_EP001_SQ0076_SH0280_v13.mov", MEDIA_START_FRAME = 0, MEDIA_SRC_FRAME_RATE = 24, MEDIA_MARK_OUT = 250, MEDIA_WIDTH = 3200, MEDIA_NUM_FRAMES = 251, MEDIA_MARK_IN = 0, MEDIA_PAR = 1 }, },
         Inputs = {
            GlobalOut = Input { Value = 250, },
            MediaID = Input { Value = "f445fbfe-6cfe-41d5-924c-28c438a2edc8", },
            Layer = Input { Value = "", },
            ClipTimeEnd = Input { Value = 250, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
         },
         ViewInfo = OperatorInfo { Pos = { -110, 115.5 } },
      }
   }
}
Offline

febros

  • Posts: 34
  • Joined: Thu Aug 13, 2020 6:50 am
  • Real Name: Aniol Marin

Re: CustomTool performance

PostFri Sep 18, 2020 2:52 pm

Maybe it's an issue related to the 4444 processing. But I really that your Quadro wouldn't accelerate all the flavors of ProRes.

Just for the sake of testing, what happens if you use CineForm 444 RGBA? Time ago I heard something about full acceleration in Nvidia cards, maybe happens to be a temporary workaround for you
Resolve 17.1 (or newer), Fusion 9
Windows 10 / Debian 10.8
Ryzen 3900X, GTX 1080Ti, 64Gb RAM @ 3200MHz
Audio: Echo FireWire 12 + Presonus Octopre MkII
Offline

Hendrik Proosa

  • Posts: 3034
  • Joined: Wed Aug 22, 2012 6:53 am
  • Location: Estonia

Re: CustomTool performance

PostFri Sep 18, 2020 3:48 pm

The moment frame is decoded and ingested to Resolve processing pipeline, original format of video/file is irrelevant. Gpu does no acceleration of prores anyway, prores does not have gpu decoder. Neither is there gpu decoder for cineform.
I do stuff.
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostFri Sep 18, 2020 4:10 pm

Jean Paul Sneider wrote:Updated to 16.2.6 no change. Looks like the optimization was at render time not playback
You know what, I am wondering if the CustomTool bug has regressed in recent Resolve releases.

I tried your comp in Fusion Studio 16.2.4 with Loaders loading 3 x random H264 source files, and got 8 - 9 FPS.

Then I tried it in Resolve 16.2.5 with the same H264 source files, now coming in via MediaIn, and am getting 1.5 - 2.5 FPS. Which is very much in the performance range the CustomTool was returning before it was fixed.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostFri Sep 18, 2020 6:14 pm

Can't test it right now. I will try something during the week end if I find the time. What surprises me is that the same process in color page goes smoothly 24fps.
Unfortunatly it doesn't let me upload a .drx
I will test with different gpus and files.
I wonder if customtool simply has a lacking implementation of using GPU for computing being a node for really custom and various uses.

If it is just a version problem I hope it gets fixed soon. Even if we have sone HighSierra mac that we would prefer to avoid update do Mojave, pushing me every needed updated in a more worried state.
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostSat Sep 19, 2020 5:27 pm

Jean Paul Sneider wrote:I will test with different gpus and files.
I wonder if customtool simply has a lacking implementation of using GPU for computing being a node for really custom and various uses.
I'm almost certain the CustomTool is CPU-only. It lacks the "Use GPU" Auto/On/Off dropdown that most nodes have.

So it's never going to perform as well as dedicated nodes with GPU acceleration. That said, I don't think it should perform as bad as it appears to be.

I wonder if it would be possible for the community to make a GPU accelerated version of the CustomTool using DCTL, in a Fuse.

Jean Paul Sneider wrote:Even if we have sone HighSierra mac that we would prefer to avoid update do Mojave, pushing me every needed updated in a more worried state.
From what I've heard, you'll definitely have to upgrade when v17 comes around.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostSat Sep 19, 2020 9:45 pm

That explains partially the terrible performance, and at least the difference with color page. Are dctl gpu accelerated? Intersting... I know really little about it and the documentation feel lacking...

When 17 will come that will be a discussion for our company I know...
Offline

Hendrik Proosa

  • Posts: 3034
  • Joined: Wed Aug 22, 2012 6:53 am
  • Location: Estonia

Re: CustomTool performance

PostSun Sep 20, 2020 7:29 am

Dctl is translated and compiled to some kind of bytecode with JIT compiler, that is then run on gpu. What the exact mechanism is, don’t know, but I think it is analogous to Blink framework in Nuke. Not sure if DCTL also has cpu fallback or is gpu only.

CTL docs describe the AMPAS CTL mechanism, but BMD has expanded it to their own implementation, not sure how much it applies anymore:
The reference CTL interpreter implementation includes a single back end. This back end generates instructions for a single- instruction-multiple-data (SIMD) virtual machine. This SIMD back end is portable, allowing CTL programs to be run on any platform that supports C++. Other, higher-performance back ends can be implemented for specific applications or hardware platforms. For example, the syntax tree produced by the front end could be compiled into native machine code. On platforms with GPU (graphics processing unit) support, the back end could generate OpenGL shading language, HLSL or Cg code and run it on the GPU.
I do stuff.
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostSun Sep 20, 2020 1:21 pm

I was aware of the lack of GPU use in Prores decodnig, just wanted to cover all basis. Diving into fuses and DCTL, if I come up with something useful I will share.

Thank all!
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostSun Sep 20, 2020 1:23 pm

Jean Paul Sneider wrote:I was aware of the lack of GPU use in Prores decodnig, just wanted to cover all basis. Diving into fuses and DCTL, if I come up with something useful I will share.

Thank all!
I'd think it'd be fairly straightforward to make a custom DCTL that performs the exact operation you're doing now. What might be harder would be re-creating the CustomTool, ie allowing the user to enter their own arbitrary calculations, and then generating DCTL from that. Probably still possible, though.

There's a lot of DCTL discussion and examples on the We Suck Less forum which can help you get started.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Hendrik Proosa

  • Posts: 3034
  • Joined: Wed Aug 22, 2012 6:53 am
  • Location: Estonia

Re: CustomTool performance

PostSun Sep 20, 2020 2:20 pm

TheBloke wrote:I'd think it'd be fairly straightforward to make a custom DCTL that performs the exact operation you're doing now. What might be harder would be re-creating the CustomTool, ie allowing the user to enter their own arbitrary calculations, and then generating DCTL from that. Probably still possible, though.

There's a lot of DCTL discussion and examples on the We Suck Less forum which can help you get started.

If DCTL allows string parsing it should be possible because expression evaluation is pretty simplistic thing. I don’t know enough about DCTL though to have an idea if it works in practice.
I do stuff.
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostSun Sep 20, 2020 4:51 pm

I see both things in my reach after a bit of study. But I start from 0. I know just a bit of programming from college time. C++, Java and Eiffel. I have to figure out the syntax and how to make it work with davinci.
I will get to it. Just gonna take some time.
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostSun Sep 20, 2020 5:47 pm

In the meantime, do you have to use the CustomTool to perform your operation? Looking at the maths, couldn't it be done with multiple Channel Boolean nodes plus a Merge or two?

All of those can be GPU accelerated.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostSun Sep 20, 2020 5:58 pm

TheBloke wrote:In the meantime, do you have to use the CustomTool to perform your operation? Looking at the maths, couldn't it be done with multiple Channel Boolean nodes plus a Merge or two?

All of those can be GPU accelerated.


Good point, I started with the custom tool cause it kept everyhing nice and tidy, but I am sure I can, like i did in the color page. I am digging myself in this hole just out of pure stubborness, and will to understand.
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostSun Sep 20, 2020 5:59 pm

Jean Paul Sneider wrote:I am digging myself in this hole just out of pure stubborness, and will to understand.
"The reasonable person adapts themselves to the world; the unreasonable one persists in trying to adapt the world to themselves. Therefore all progress depends on the unreasonable person."
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostSun Sep 20, 2020 7:38 pm

TheBloke wrote:
Jean Paul Sneider wrote:I am digging myself in this hole just out of pure stubborness, and will to understand.
"The reasonable person adapts themselves to the world; the unreasonable one persists in trying to adapt the world to themselves. Therefore all progress depends on the unreasonable person."


I take it as a invite to keep digging! Thanks
(By the way I looked at your website, nice stuff)
Offline
User avatar

TheBloke

  • Posts: 1905
  • Joined: Sat Nov 02, 2019 11:49 pm
  • Location: UK
  • Real Name: Tom Jobbins

Re: CustomTool performance

PostSun Sep 20, 2020 7:39 pm

I don't have a website :) I imagine that's my namesake, he's an animator or something.
Resolve Studio 17.4.3 and Fusion Studio 17.4.3 on macOS 11.6.1

Hackintosh:: X299, Intel i9-10980XE, 128GB DDR4, AMD 6900XT 16GB
Monitors: 1 x 3840x2160 & 3 x 1920x1200
Disk: 2TB NVMe + 4TB RAID0 NVMe; NAS: 36TB RAID6
BMD Speed Editor
Offline

Jean Paul Sneider

  • Posts: 265
  • Joined: Sat Jul 01, 2017 5:46 pm

Re: CustomTool performance

PostSun Sep 20, 2020 7:57 pm

TheBloke wrote:I don't have a website :) I imagine that's my namesake, he's an animator or something.


Hahaha indeed!

Return to Fusion

Who is online

Users browsing this forum: Google [Bot], Olivier MATHIEU and 28 guests