Question / Help Same settings: OBS vs. Geforce Experience: Frame Capturing

Paultimate

New Member
So I have read the FAQs, the tips and guides and have recorded on and off for 5+ years and never really asked this. I also want to preference this by saying I dislike using GeForce Experience and much rather use OBS.

The issue is with some games, its not reasonable to expect the GPU to not use 100% at some points. Even if I push everything to below nominal, achieve 120fps in one area, doesn't mean I will get even 50fps in another area (i have it capped at 60) 30fps or retooling settings for every area in a given dynamic game is unreasonable.
I recently tried GeForce with the same settings (25000kbps, NVENC, same framerate, same resolution, same game settings, same quality). OBS chokes and GeForce captures smooth 60fps gameplay. The only issue is GeForce sucks with audio and other settings that are useful. Unfortunately OBS suffers producing the main thing it is designed to do: capture frames consistently.

My question is why? What is the difference here? I have set countless settings in OBS including upping its process priority and putting it on a different cpu cores than the game, setting all variations of quality settings ect ect. Why is GeForce not dropping frames under the same conditions? If I can figure it out I can use OBS and move away from Geforce fully.

Below I put in the same settings for GeForce and OBS and the same game settings (this was done within 30 seconds of each other multiple times after restarts ect), recorded how they use the Encode hardware on the GPU with each and labeled them. I've also uploaded the walk done by each encode below. Why is OBS choking? I want to use OBS, but I can't.

(Sorry for the music please mute)
GeForce Example:

OBS Example (Same scene same recording settings same game settings):

Edit: From further testing, it seems like OBS is choking when the 3D engine is saturated (this is a 1070GTX). But that is very strange as the encoding doesnt take place on the 3D rendering engine, it takes place on the encoding engine (see image "vs"). Is there an obscure OBS setting ived missed to fix this?

LOG: https://obsproject.com/logs/mccVC-BUlm3715zN
 

Attachments

  • Streamlabs_OBS 062619 103336 1319x1547.png
    Streamlabs_OBS 062619 103336 1319x1547.png
    122.3 KB · Views: 345
  • vs.png
    vs.png
    108.9 KB · Views: 328
Last edited:

R1CH

Forum Admin
Developer
You are using Streamlabs, not OBS Studio. Please contact Streamlabs for support with their version.
 

Paultimate

New Member
This is in streamlabsOBS and OBS as of version 23.2.1 (as stated in the log file.) The settings image was only streamlabs UI but they were both tested for verification it is a core issue. Exactly the same issue across both versions. If it matters I can take a picture of the settings for the OBS 23.2.1 version but its the same settings.

I've done further research and its coming down to a few major differences in how OBS retrieves frame data vs shadowplay. Also OBS seems to be using the main GPU rendering engine for things even with its only recording the game (no filters,layers,or even audio). This usage of the rendering engine is what cuses the issue. What is OBS using the rendering engine for in such a manner where the outcome is this while shadowplay doesn't have this issue? I have also turned performance mode on, off and added it to the combinations of settings in my testing.
 

Attachments

  • NVIDIA_Share 062619 174100 1945x917.png
    NVIDIA_Share 062619 174100 1945x917.png
    250.7 KB · Views: 207

koala

Active Member
You're trying to capture and record 4k @60 Hz. That's apparently too much for your hardware. I have exactly the same CPU and GPU as you and I would never try to process 4k with that. It's simply one step away from being able to flawlessly process 4k@60. 30 Hz may be ok, but from my experience, a sane limit for this hardware is 2560x1440@60Hz.

The 2 crucial differences between Shadowplay and OBS are that 1. Shadowplay is able to use an especially light-weight capture method within the GPU driver that is not available to any 3rd party tool and 2. OBS is doing additional steps between capturing and producing video frames. It's filtering and compositing multiple sources and rendering the outgoing video frames from this. It's used to embed your webcam into your video, for example. This additional step is lagging according to your logs.

By the way, you're using the 1809 update of Windows. Current version is 1903, which can be pulled from Windows Update. This version includes code that allows programs like OBS to better run in background without starving from system resources. Try updating Windows.
 

Paultimate

New Member
"That's apparently too much for your hardware "
Clearly not for shadowplay. I do 4k60 all the time with no issues. Thats a software issue not a hardware issue. The problem is I like OBS better than Shadowplay except for this critical flaw, therefore this post to try and resolve or get a timeline to if this is being considered.

"OBS is doing additional steps between capturing and producing video frames. It's filtering and compositing multiple sources and rendering the outgoing video frames from this. "
Read my post. I am not doing anything except a single source capture in the examples, no filtering no layers no "multiple sources". I removed audio and the preview during my testing as well, no improvement. I think youre confusing the log entries for what was actually recording. I have many things that exist but are turned off. This also happens with a fresh install and is a know OBS issue and is not my question. My question is what is OBS doing that Shadowplay is not to result in such a difference? What you listed were the first things i isolated weeks ago as I tested many combinations of settings. Why is OBS using so much 3D rendering simply to exist? Can some of this be pushed to the CPU? How is shadowplay approaching this?

By the way, you're using the 1809 update of Windows.
I have tested this from version 1709 to the latest insider build 18922
 

Sukiyucky

Member
What Nvidia knows and what OBS knows about Nvidia are never the same. Its like Microsoft knowing their framework API and not always disclosing every API call to the public. They have a right to this, for it is THEIR platform, THEIR investment, THEIR business.

Nvidia doesn't have to disclose to anyone how they are doing what they do. They offer a public API for developers to code against to add value to their ecosystem. Don't rule out there are private undisclosed API calls not meant for public consumption and for which gives them options to be more competitive.

I wouldn't be surprised at all if ShadowPlay does something in manner more better than OBS.
 

Narcogen

Active Member
ShadowPlay does this by not allowing an arbitrary number of sources to composite. It's just copying the framebuffer; it barely does any compositing at all. (I think it does allow overlays, although I don't remember how many-- I have not used it in some time.)

OBS will allow you any number of video and other sources, overlapping each other, potentially with transparency, and as a result, it needs to render frames before encoding-- even if you don't use all (or indeed any) of those features.

*turning off* sources does not mean they don't consume resources.

You can illustrate this by using media sources and either showing and hiding them, dragging them out of the canvas, or switching to other scenes-- the file continues to play regardless, and when you finally show it, it's still playing. It's playing all the time.

OBS never knows when a source that's in a scene collection, but not visible now, might be visible again at any moment, so it has to keep them rendering.
 

Paultimate

New Member
They have a right to this, for it is THEIR platform, THEIR investment, THEIR business ...(etc)..
Water is WET too but that doesn't HELP answer THE question. Its fine if you dont KNOW but im not SURE why you posted any of that.

Narcogen, interesting and that would fit close to what Im seeing. I've tried to limit what OBS is actually told to do (capture a single source, no audio, preview off) to get as close as possible to shadowplay settings, but OBS sits there eating 20-30% of the GPU before the game itself even renders a single frame. When I say turning off sources, I mean I remove them fully, not just hide them or fade them out. We are talking the raw output of the game footage only, no postprocessing from the user.
I do understand what you mean about scenes/filters and them still needing to be processed because they *exist* even if a user doenst see them. This allows smooth transitions when scenes are turned off, filtered or otherwise on the fly. This isnt whats happening here unfortunately (would be a real easy fix).
 

Narcogen

Active Member
OBS starts rendering when it launches. It requires GPU overhead above and beyond the captured application. This overhead is significantly greater than that required by ShadowPlay.

You asked:

My question is why? What is the difference here? I have set countless settings in OBS including upping its process priority and putting it on a different cpu cores than the game, setting all variations of quality settings ect ect. Why is GeForce not dropping frames under the same conditions? If I can figure it out I can use OBS and move away from Geforce fully.

This is the answer; the answer is that because of its intended purposes as a compositor and video switcher, the hardware devices that this general-purpose software has been designed to mimic, OBS has a significantly higher overhead requirement.

Process priority has no impact on GPU requirements for rendering.

The answer to the question of what do you need to figure out to move away from ShadowPlay is to recognize this and adapt, either by lowering the requirements of captured games (lower canvas size, lower framerate) or by moving to a multiple PC setup with either NDI or a capture card, as many of us already do.

You wrote:

From further testing, it seems like OBS is choking when the 3D engine is saturated (this is a 1070GTX). But that is very strange as the encoding doesnt take place on the 3D rendering engine, it takes place on the encoding engine (see image "vs"). Is there an obscure OBS setting ived missed to fix this?

OBS is choking on the rendering, not the encoding. Encoding can either be done on the CPU or on dedicated hardware in the case of NVENC, but OBS renders *every frame* again, regardless of whether you're using OBS' abilities to composite or not. Making more and more complex scenes will create *more* rendering load, but there is a floor below which you cannot drop because rendering does not ever stop, and that floor is above the load ceiling of ShadowPlay which does none.

13:44:29.533: Output 'simple_file_output': Number of lagged frames due to rendering lag/stalls: 445 (53.9%)

13:43:27.513: base resolution: 3840x2160
13:43:27.513: output resolution: 3840x2160
13:43:27.513: downscale filter: Bilinear
13:43:27.513: fps: 60/1


You're trying to do 4k60...

13:43:26.800: Adapter 0: NVIDIA GeForce GTX 1070

... on a 1070.

In a single PC setup.

I don't even know if anyone have asked if you've capped your framerate in WoW.

You are not close to being able to do this, and what ShadowPlay can do with an entirely different pipeline is not a reasonable benchmark for what can be done with OBS on this hardware. You may not be using any of the abilities OBS has that ShadowPlay does not, but there is a limit to how much resources you can reclaim by not using them.

You should either stick with ShadowPlay, move to a 2 PC setup, or drop your canvas resolution to 1080p or your output to 4k30.
 

Sukiyucky

Member
"Water is WET too but that doesn't HELP answer THE question. Its fine if you dont KNOW but im not SURE why you posted any of that."

I posted that because you aren't asking the right question to solve your problem. Knowing the technical differences between ShadowPlay and OBS won't get you anywhere. To point you in the right direction, the question you should be asking is:

How do I deliver a good looking 4K@60FPS stream using OBS?

Given your computing specs, you don't have strong enough computing hardware to deliver a 4K@60FPS stream
- A GTX 1070 is not meant for 4K gaming. It is suitable for 1080p and 1440p.
- A i7-6700K is not enough to do 4K gaming and streaming w/OBS. It is good for 1080p and just ok for 1440p.

Somewhere along the line, you had a hunch something wasn't working good and decided to use NVENC to offload the CPU. That should have told you the CPU doesn't have the power to deliver a 4K stream. Now, even with using NVENC, you still have problems. That should have told you that your wasting your time delivering 4K with your hardware. You need to upgrade.

If you don't want to spend more money getting better hardware, target 1080p@60FPS@6000-9000 bitrate to YouTube.

If you want to do 4K right and have money to burn, go out and buy another computer and dual PC stream.
 
Top