Homepage › Forums › RetroPie Project › Ideas for Further Enhancements › video output is poorly configured by default.
- This topic has 7 replies, 2 voices, and was last updated 9 years, 7 months ago by patrickm.
-
AuthorPosts
-
05/20/2015 at 03:46 #97961patrickmParticipant
The video output is poorly configured by default by the retropie setup script. The “retroarch render resolution” is set to 640×480 for all cores.
This is a problem because it causes scaling artifacts on all fixed-pixel displays as well as input lag. The vast majority (99% or more) of fixed-pixel displays are 720p/i or 1080p/i resolution. So it has to take 480 horizontal lines of resolution and stretch this to 720 or 1080, but it has a fixed amount of pixels (1920×1080 pixels on a 1080 display). This results in the pixels being stretched by unequal amounts, which is ugly and incorrect.
You can see this in every core; by default, you have pixel warping. To get perfect scaling (such as provided by an XRGB Mini or some such), you have to do the following:
-integer scale ON
-aspect ratio CUSTOM (core dependent; I suggest using the nearest to a 4:3 aspect ratio for each core)
-crop overscan OFF (most cores)the “video output resolution” needs to be automatically detected and set to the native resolution of the display (1080p for a 1080p display, 720p for a 720p display, etc)
the “retroarch render resolution” needs to be set to “use video output.”
This is the only way to get perfect video output on all LCD and Plasma screens. A lot of problems could be avoided if this was configured properly by default. It’s just one more thing that needs to be configured and that could potentially cause issues for people.
If this configuration is not followed, the result is scaling artifacts, which distort and degrade the picture, and input lag, which causes a delay between when a button is pressed and when an action occurs on screen. Either one of these can potentially ruin the experience.
05/20/2015 at 12:34 #97985gizmo98Participant640×480 default is set because higher resolutions will slow down rpi1s. In the past display resolution was switched which caused flickering and was not compatible with all screens. Rpi2 and 1080p should be fast enough if you use no shaders. Rpi1 and two share the same default configuration at the moment.
If you have a 16:9 screen resolution and 640×480 render resolution retroarch will increase your horizontal resolution to 853×480. So there should be no unequal pixels since Retropie 2.6 or 3.0.
05/20/2015 at 16:33 #98015patrickmParticipant[quote=97985]640×480 default is set because higher resolutions will slow down rpi1s. In the past display resolution was switched which caused flickering and was not compatible with all screens. Rpi2 and 1080p should be fast enough if you use no shaders. Rpi1 and two share the same default configuration at the moment.
If you have a 16:9 screen resolution and 640×480 render resolution retroarch will increase your horizontal resolution to 853×480. So there should be no unequal pixels since Retropie 2.6 or 3.0.
[/quote]
The first statement makes sense, but I’m unclear on the second statement. A resolution of 853×480 is still going to be scaled to the native resolution of the display (either 1920×1080 or 1280×720), which will cause scaling artifacts on both axes. I’m definitely still seeing unequal pixels on my display with the default settings. Upscaling from a lower res to the native res will also cause input lag.
I was thinking, maybe it would be helpful to have “video profiles” so that one doesn’t have to mess about with RGUI so much. For example, I would hold “x” or “m” as a game launched to bring up the launch menu. I would scroll to “video profiles,” select “5x” and hit apply. The 5x profile would apply integer scale, crop overscan (if the core needs it for perfect scaling) and a custom aspect ratio for the system being played (since resolution is core-specific), at 5x vertical scale (so, 6×5 for NES, SNES, 5×5 for Genesis, etc.). You could also have 4x profile, 3x for 720p displays, etc.
currently there are a lot of settings for the user to configure and they are likely to get something wrong, causing problems. I’m just trying to think of ways that the configuration process could be streamlined/ made easier.
05/20/2015 at 19:32 #98024gizmo98ParticipantYou can set “any” vertical resolution (0-1080) in your retroarch.cfg. For example you could set something like 1080/2=540 or 1080/4=270 to get integer scaling. If the aspect ratio of your render resolution differs from your display resolution horizontal resolution will be recalculated. You can try to get the best fit for performance and visual appearence. Render resolution upscaling is for free (hardware). If render and display resolution is equal software integer scaling is used (performance penalty). It is also possible to modify the hardware upscaler to your needs: https://github.com/raspberrypi/firmware/issues/104
As i have said default visual settings are not optimized for rpi2 at the moment. If we find better defaults we can at them.
05/20/2015 at 20:51 #98031patrickmParticipant[quote=98024]You can set “any” vertical resolution (0-1080) in your retroarch.cfg. For example you could set something like 1080/2=540 or 1080/4=270 to get integer scaling. If the aspect ratio of your render resolution differs from your display resolution horizontal resolution will be recalculated. You can try to get the best fit for performance and visual appearence. Render resolution upscaling is for free (hardware). If render and display resolution is equal software integer scaling is used (performance penalty). It is also possible to modify the hardware upscaler to your needs: https://github.com/raspberrypi/firmware/issues/104
As i have said default visual settings are not optimized for rpi2 at the moment. If we find better defaults we can at them.
[/quote]
Ah, good to know- wasn’t aware of the hardware upscaling being configurable.
I’m a little confused, though- I thought if render resolution matched display resolution, no upscaling occurred. Is this incorrect?
So, are you saying that rather than setting display and render resolution to match, I should instead set my render resolution differently so that the GPU handles scaling? when I try setting render resolution to 960×720, for example, and display res at 1080p, there is noticeably more input lag vs. leaving both display and render res at 1920×1080. I assumed this was due to the additional upscaling.
05/20/2015 at 21:10 #98036gizmo98ParticipantThere is no upscaling if display and render resolutions are equal. Be aware your display resolution could be some pixels smaller if overscan (config.txt) is enabled. So if render resolution is 1920×1080 and your display resolution is 1910×1070 (overscan) there could be scaling artifacts.
If performance is ok i would recommend render = display resolution. If performance is to low (shaders, emulation speed) a mix of hardware upscaling and lower render resolutions should be used. Hardware upscaling is for free and needs no processing power.
I have not seen any input lag with hardware upscaling. Thought threaded video causes a small input lag.
05/21/2015 at 23:20 #98130patrickmParticipant[quote=98036]There is no upscaling if display and render resolutions are equal. Be aware your display resolution could be some pixels smaller if overscan (config.txt) is enabled. So if render resolution is 1920×1080 and your display resolution is 1910×1070 (overscan) there could be scaling artifacts.
If performance is ok i would recommend render = display resolution. If performance is to low (shaders, emulation speed) a mix of hardware upscaling and lower render resolutions should be used. Hardware upscaling is for free and needs no processing power.
I have not seen any input lag with hardware upscaling. Thought threaded video causes a small input lag.
[/quote]
I’ve noticed additional input lag setting the render resolution to 960×720 on my 1080p monitor, although it is slight. I’m playing a lot of fast-twitch games, though, so it might not be noticeable in most situations.
Logically, there is going to be an extra delay due to the additional processing that the gpu has to do. Whether or not this is noticeable depends largely on the individual and the game being played.
I wasn’t aware of the performance limitations of the raspberry pi 1, I can see now that the default video settings make sense.
I thought it might make sense to add something like “video profiles” to the launch menu, sort of like preconfigured video modes, but then I realized that each system would need its own custom resolution, and the idea started to seem too complicated.
05/23/2015 at 04:24 #98212patrickmParticipant[quote=98036]There is no upscaling if display and render resolutions are equal. Be aware your display resolution could be some pixels smaller if overscan (config.txt) is enabled. So if render resolution is 1920×1080 and your display resolution is 1910×1070 (overscan) there could be scaling artifacts.
If performance is ok i would recommend render = display resolution. If performance is to low (shaders, emulation speed) a mix of hardware upscaling and lower render resolutions should be used. Hardware upscaling is for free and needs no processing power.
I have not seen any input lag with hardware upscaling. Thought threaded video causes a small input lag.
[/quote]
Hi, I made an aperture grill/phosphor overlay for use on the retropie, since the shaders cause performance issues at 1080p.
I created the overlay by drawing vertical black lines across the screen, 1 pixel wide and spaced 1 pixel apart. Combined with the scanline overlay I created, it should give a nice recreation of the phosphors on an aperture grill CRT.
However, I’m noticing some strange issues when I apply the overlay. There are numerous artifacts when the overlay is applied. The most noticeable is a diagonal tear going from the bottom left to the top right, with the upper half of the screen being significantly lighter colored. There is also a vertical line extending from the center of the screen straight up.
do you have any idea what could be causing these artifacts?
-
AuthorPosts
- The forum ‘Ideas for Further Enhancements’ is closed to new topics and replies.