RenderPipelineManager CPU usage

Hello,

In an attempt to optimize the performance in our HDRP scene I noticed RenderPipelineManager.DoRenderLoop_Internal() is always on top.

Is this CPU usage and garbage alloc considered ‘normal’ in the HDRP?

I came across this issue for LWRP while trying to dig up information on this subject, is it related?

[EDIT]

I removed a secondary camera from the scene with the following result in the profiler:


[/EDIT]
Thanks

As for my games using HDRP, the graphics update is also always the most consuming operation in the profiler. Nothing compared to all my custom gameplay and physic scripts.
I think that is normal that the high quality rendering is so demanding, depending also on your scene and pipeline settings.
You can easily ruin your performence with alot of things for example:

  1. Realime shadows. Watch out for point and area lights. Old school.
  2. Realtime reflections. Again old school.
  3. Quality and sample rate of post-processing effects. For example Depth of Field with full resolution is very high demanding but you don’t see so much difference compared to half resolution, so would not trade that for fps rate. Also nothing new coming from post-process stack 2.
  4. High quality volumtric light and subsurface scattering. Can’t recommend to turn that on even with a new RTX 2060. I did not see even so much difference.

And yes, every new camera adds more overhead to the pipeline. Imagine that having two active cameras basically means cut the frames into a half. If you demanding high quality graphics you cannot really afford a second active camera in your scene without tone down custom frame settings in that camera.

My most demanding HDRP game gets in average 50 fps. It is an dynamic indoor scene with many realtime point lights and Realtime GI.

As graphics pipeline scale it is important to also scale your game’s demands. Just because there are some new features does not mean you can push everything to high end. There is not so much new rendering breakthrough even now with raytracing envolving. So all in all watch for the sum of all your graphic settings and make decisions on what is the most important feature to spend your frames on.

It worked for me. Removing even inactive cameras helped.

My webgl URP based project profiler indicates that REnderPipelineManager.DoRenderLoop_Internal() taking much time. how to fix?

It helped me. I had 2 active cameras in my scene.
Thanks for the tip.

Thanks, I had a minimap camera, removing it doubled the fps. RIP minimap.

You can tune what each camera processes.

If you just add 2 cameras, both will run off of what HDRP asset you have active.
Once you’ve tuned your HDRP asset to your project needs, you can then further tune each of the camera’s custom frame settings and turn off any rendering operations your ‘mini map’ doesn’t require.

There are a few other methods like custom render passes that may help you here, I just can’t remember the name of the other off the top of my heard.

Maybe Custom pass with a disbled camera can avoid the call RenderPipeline.Render for each active camera.
You may need to cull objects with CullingOptions.ForceEvenIfCameraIsNotActive option for the camera.

have the same problem , but i don’t even have multiple cameras , i have only one , but in webgl because of that