Question / Help Is it bad to change Base (Canvas) to a resolution that is not my native resolution?

Dojii

New Member
Is it bad to change Base (Canvas) to a resolution that is not my native resolution? My source monitor and display I am gaming on is 2k/ 1440p (whatever you prefer to call it). But I want to stream in 900p, and try it out because I hear it's the new rage. A bit less intensive than 1080 @ 60fps, but better than 720p @ 60fps.

Going to try it out regardless but would like some feed back about how this might affect the image quality, and performance.

Would it increase performance since there is no "downscaling" happening? Or would it decrease performance because values are incorrect or out of harmony with the hardware I am using.

Also I am streaming via NDI plugin.

Gaming PC Specs
[CPU] I7-8700k
[MB] Z370 AORUS Gaming 7 (rev. 1.0)
[GPU] GTX 1080 FTW
[RAM] 32GB Corsair RGB 3600
[WEBCAM] Logitech c922x
[MONITOR] Dell S271DG


NDI to STREAM PC
Stream PC Specs
[CPU] I7-6700k
[MB] MSI Z170-A PRO
[GPU] GTX 960 SSC
[RAM] 16GB
[WEBCAM] Logitech c920
[MONITOR] Dell SE2717HR 27" Full HD IPS
[CAPTURE CARD] ElGato HD60 Pro


Thanks in advance. and no I am not using the capture card, just NDI (which I love).
 

koala

Active Member
tl;dr:
rescaling is irrelevant in terms of performance or efficiency, as long as it takes place on the GPU.

wall of text:
Scaling has to take place every time the native resolution of the thing you're capturing isn't the same as the output resolution. OBS has to squeeze or enlarge the pixels of the source to match the output resolution in this case.
If you play your game in your monitor's native resolution (2560x1440) and want to output (stream) as 1600x900, scaling must take place, of course. 2560 is 1,6 times 1600 - how else would you get rid of the 0.6x superflous pixels?

If you don't want to scale, you have to play your game as 1600x900, which you probably don't want to do.

If you play with 2560x1440 and set your base (canvas) resolution to 1600x900, you will fit the rectangle of the source (2560x1440) to the whole canvas (1600x900), and this will of course trigger a rescale.
You have a capture device - if you configure the capture device to output as 1600x900 instead of 2560x1440, rescaling will take place within the capture device and not within OBS. It is unknown if the rescaling algorithm within the device is better or worse than the rescaling algorithm used by OBS, so it may be better or worse to do this.

But rescaling isn't bad. If you use one of the rescaling options that take place on the GPU, it's cheap, because the GPU is highly optimized to do this kind of things.

Best practice:
- set the base (canvas) resolution to the native resolution of the main thing you want to output. In your case, the resolution of the capture device.
- set the output resolution to the resolution you want the main output be. If you want to stream as 900p, set 1600x900, thus the main rescaling setting. It is cheap in terms of resource use, because it is taking place on the GPU.
- it's possible to set a resolution within the encoder settings. This is the last additional rescaling option. Don't use this, this one is taking place in CPU space and very costly.
 

Dojii

New Member
so on gaming PC I want these
tl;dr:
rescaling is irrelevant in terms of performance or efficiency, as long as it takes place on the GPU.

wall of text:
Scaling has to take place every time the native resolution of the thing .....

Thank you for your response I will have to read this a few times. So my settings should be like this?
[Gaming PC]
Base (canvas) - 2560x1440
output (scaled) - 1600x900
Downscale filter - Lanczos 32
Bit rate 6000

Then all this is sent over NDI to the Stream PC. Here are the stream PC settings
Base (canvas) - 1600x900
output (scaled) - 1600x900
Downscale filter - Lanczos 32
Bit rate 6000

Does this look correct? the image looks great but if there is anything I can do better for performance, or to make it look better I would like to know. Thank you.
 

koala

Active Member
I don't understand why you are using a 2nd PC for streaming in the first place. Sending an encoded video via NDI is about the same load as sending the video directly to the streaming service. A second monitor for OBS on the gaming PC would do the same, and the quality of your stream would be better, since the video isn't encoded twice if you stream directly from the gaming PC.
 

Dojii

New Member
I don't understand why you are using a 2nd PC for streaming in the first place. Sending an encoded video via NDI is about the same load as sending the video directly to the streaming service. A second monitor for OBS on the gaming PC would do the same, and the quality of your stream would be better, since the video isn't encoded twice if you stream directly from the gaming PC.

The video really isn't encoded on the gaming PC. it's sent over a 'virtual RTMP' from my Gaming PC's gpu, to the stream PC's gpu. it's more like a LAN stream where the two GPU's talk to each other so that a high quality image is sent. from there the CPU on the stream PC encodes. Well that's how I understand it.

Furthermore if ever in your experience, you have tried to play your games in 2k resolution, and highest graphics settings, and then single PC stream from that same machine at 720p or better in 60 frames you will see the performance issue.

1080 isn't even my goal... I will be streaming in 2k before the year is over. You have to understand how demanding encoding in the best possible quality you can render, and then broadcasting that image; you have to understand how demanding that is on your setup to really speak on it.

You can stream games like League of Legends all day in 1080p at 60 fps no problem. or minecraft and other things that really don't even tax your system. Try Cryengine games what hog your cpu resources on MAX quality settings. Destiny 2, Monster Hunter World?? These kind of titles aren't friendly to stream from the same PC.... unless you have a server processor or settle for 480p garbage image.
 

Dojii

New Member
For example I can set the bitrate on the gaming PC to 6000kbps in obs but the LAN is actually broadcasting about 20-24kbps over NDI. There are some things NDI does that your Gaming PC settings in OBS--- well essentially NDI completely ignores those settings. So far all I've really been able to notice that I can control on the Gaming PC when the NDI plugin is active is the canvas resolution and scaled resolution.

The bit rate that is transferred over from GPU to GPU seems to be fixed. I really would like to know more about how NDI works but haven't been able to read up on much, and you can't alter many settings of the NDI plugin.

You just have to appreciate that the image streamed from GAMING-PC to STREAMING-PC is basically lossless. The Stream pc takes that image and then encodes and I can work that I7-6700k to 90% cpu power encoding 900p or 1080p at 60 frames with a fast/medium cpu preset.

Your stream will not look right, your game will drag and stutter if you're pushing that much CPU power while gaming. As well as you get the HICH CPU ENCODING error or whatever on OBS. Biggest problem for streamers is these CPU's that intel are putting out are lacking CORES, but they're marketed like they can handle anything you throw at them.

So even my 8700k coffee lake CPU only has 6 cores. and when encoding... I can eat those 6 cores alive and still have an appetite for more. Some have suggested that I switch the pc's tasks. That would be a good short term solution but... at this rate i'm just going to get the Threadripper 32 core and build a new stream PC around it and be done with ever worrying about encoding power, or what the stream PC can handle.
 
Top