Page 1 of 1

OpenGL performance

PostPosted: Mon Aug 10, 2015 10:02 am
by Hideki Inoue
Hi,

I make simple 3D flow. I have two image planes that each node has a Displace3D. Each textures are single frame. Animation is only Camera.

Then I render it with OpenGL Renderer. Default setting of OGL Renderer is fast. (GPU usage is 10-15% constantly)

But When I use SS(HiQ mode) and Transparency Sorted, It takes considerable time. Of course I know that the Renderer3D needs more calculation.

How can I speed up it? I need to buy more expensive GPU card? My GPU is Quadro K4200.

I check CPU usage. Fusion use 5%. (I have dual six core Xeon)
I check GPU usage. Fusion use 0 -45%.(long idle state, sometimes 15%, sometimes 45%)

hmmm... I don't think so. What do you think?

Code: Select all
{
   Tools = ordered() {
      Ellipse1_1 = EllipseMask {
         Inputs = {
            SoftEdge = Input { Value = 0.2, },
            MaskWidth = Input { Value = 1920, },
            MaskHeight = Input { Value = 1080, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
         },
         ViewInfo = OperatorInfo { Pos = { 901, 215, }, },
      },
      Camera3D2 = Camera3D {
         Inputs = {
            AoV = Input { Value = 24.3265863475745, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
         },
         ViewInfo = OperatorInfo { Pos = { 1079, 270, }, },
      },
      Background1_1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 150, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            TopLeftRed = Input { Value = 1, },
            TopLeftGreen = Input { Value = 1, },
            TopLeftBlue = Input { Value = 1, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            EffectMask = Input {
               SourceOp = "Ellipse1_1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 901, 329, }, },
      },
      Displace3D1 = Displace3D {
         Inputs = {
            SceneInput = Input {
               SourceOp = "Merge3D2",
               Source = "Output",
            },
            Scale = Input { Value = 0.5, },
            CameraDisplacement = Input { Value = 1, },
            PointCamera = Input { Value = 1, },
            CameraSelector = Input { Value = FuID { "Camera3D2", }, },
            Input = Input {
               SourceOp = "Background1_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1261, 450, }, },
      },
      ImagePlane3D1 = ImagePlane3D {
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input { Value = -1, },
            ["SurfacePlaneInputs.SubdivisionWidth"] = Input { Value = 200, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
            MaterialInput = Input {
               SourceOp = "Loader2",
               Source = "Output",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1260, 229, }, },
      },
      Merge3D2 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "ImagePlane3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Camera3D2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1260, 383, }, },
      },
      Loader2 = Loader {
         Clips = {
         },
         Inputs = {
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
         },
         ViewInfo = OperatorInfo { Pos = { 1258, 104, }, },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input {
               SourceOp = "Camera3D1ZOffset",
               Source = "Value",
            },
            AoV = Input { Value = 24.3265863475745, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 1062, 479, }, },
      },
      Camera3D1ZOffset = BezierSpline {
         SplineColor = { Red = 254, Green = 56, Blue = 46, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 50, -0.106976533809333, }, Flags = { Linear = true, }, },
            [150] = { -0.320929601428, LH = { 100, -0.213953067618667, }, Flags = { Linear = true, }, },
         },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Displace3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 1263, 503, }, },
      },
      Renderer3D1 = Renderer3D {
         CtrlWZoom = false,
         Inputs = {
            GlobalOut = Input { Value = 150, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            CameraSelector = Input { Value = FuID { "Camera3D1", }, },
            RendererType = Input { Value = FuID { "RendererOpenGL", }, },
            ["RendererOpenGL.Channels.Nest"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.RGBASS"] = Input { Value = 1, },
            ["RendererOpenGL.TransparencySorting"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 1263, 588, }, },
      },
   },
}

Re: OpenGL performance

PostPosted: Mon Aug 10, 2015 10:07 pm
by Johnny Farmfield
Post a setup for us to try - copy the nodes and paste it into a ^code tag -easy as pie.

And it might be a driver issue or something but doesn't sound "normal".

Re: OpenGL performance

PostPosted: Tue Aug 11, 2015 6:11 am
by Hideki Inoue
I found a cause.

Low Subdivision ImagePlane is faster, High Subdiv is slower. Yes, I know this is normal. But GPU usage is higher when Subdiv is lower, GPU usage is lower when Subdiv is higher.

Displace3D is processed by the CPU. And furthermore, it is single thread(I have 24 threads, so CPU usage is 4-5%). Because GPU is waiting CPU process, overall, GPU and CPU is almost idle. The performance of Renderer3D(OpenGL) may increases in the performance of the card proportionally. But other node become the bottleneck.

A half year ago, I replaced my GPU for Quadro K4200 from Quadro 4000. Single OpenCL node became faster. But I can't feel speedup in my Fusion's work. I think that only a few nodes support OpenCL, OpenGL or Multithread is the point.

I do not know where BMD Fusion goes to next. But I hope they think about these bottleneck.