Updated crt-pi shader
-
Thanks Buzz I think I have it straight, I think I just need to ponder on it a little. Can I try and apply it to a real scenario with default settings. A games "native" resolution let's say for example is 320x200. Retroarch would upscale it to 640x400 (the default res is 640x480 but it would fill it in vertically but horizontally it would have 40 blank pixels on either side?) From there it would be further upscaled at/to the TV's res (for example 720p which is 1280x720) with some fractional integer. I know I will need to keep reading and asking before it all comes full circle but I don't want to completely muddy this thread.
-
@Riverstorm There is one more step that may apply--your TV's native pixels may not be 1280x720 but rather 1920x1080, so unless you see black borders when your TV is set to 720p, your TV is upscaling to its native resolution at the end.
-
@caver01 said in Updated crt-pi shader:
@Riverstorm There is one more step that may apply--your TV's native pixels may not be 1280x720 but rather 1920x1080, so unless you see black borders when your TV is set to 720p, your TV is upscaling to its native resolution at the end.
Thanks Caver, I didn't think of that at all. A 720p setting on a native 1080p TV would leave a border all the way around unless the pixels stretch? I am guessing if no scaling happened you would have a small 320x200 square in the middle of the screen. So many factors in there including more like integer scaling, etc. I was hoping to grasp just the general steps a game goes through from start (emulator) to finish (TV) but I don't think I quite have a good understanding. Hopefully with time.
-
@Riverstorm Actually, by your descriptions I think you do have a good understanding. I don't expect anyone who runs their TV in 720 mode has black borders. That was just to make a point that the TV mode is really just another level of scaling. As Buzz said earlier, he actually likes the way his TV scales from 720.
What helps me is to work backwards from the native pixels and decide if I like each step. Assuming I can correctly account for what is doing the scaling, it helps me recognize opportunities. For example, because I know the shader can handle it, I want to give retroarch a resolution as close as I can to native pixels so that these can be used by the shader to create better CRT effects. So, I run at my LCD's full resolution, letting the emulator fill this and giving the shader the most pixels for creating smooth scanlines and curvature effects. Buzz, on the other hand, sounds like he drops his down to 720. He's still getting good effects at that resolution, but he likes how his display upscales beyond that. In fact, anyone with UltraHD is in the same boat, as they are not likely running their Pi at 3840x2160, but something lower and letting their TV upscale.
-
@caver01 said in Updated crt-pi shader:
Buzz, on the other hand, sounds like he drops his down to 720
I appreciate you explaining it. I still feel like I am missing pieces. When you wrote the line above. Where would he be dropping it down to 720p? You change the screen mode reported/sent to the Pi and it thinks the display is a 720p which makes Retroarch render at 720p but the TV itself will upscale to the native res of 1080p?
I want to give retroarch a resolution as close as I can to native pixels so that these can be used by the shader to create better CRT effects
I prefer this but on the other hand if you allow the TV to upscale in theory it seems it should be a huge performance boost if the resolution is low enough as the Pi doesn't need to do any additional "resolution rendering" work and the TV is taking the load and doing the upscaling ? But when I think like that it contradicts what Buzz wrote which means I am not understanding it.
Changing the render resolution (retroarch only) - scaling done by RPI hardware (no performance loss)
If I am to far off base you can let me know and I am ok enjoying RetroPie if not completely understanding the logic. :)
-
I appreciate you explaining it. I still feel like I am missing pieces. When you wrote the line above. Where would he be dropping it down to 720p? You change the screen mode reported/sent to the Pi and it thinks the display is a 720p which makes Retroarch render at 720p but the TV itself will upscale to the native res of 1080p?
You don't change the screenmode on the TV. You change it on the RPI. In my case, the TV still says to the RPI - "I prefer 1080p". I then configure the RPI via
/boot/config.txt
to switch to 720p. - the TV will then deal with that signal and upscale it etc. -
@BuZz said in Updated crt-pi shader:
@GreenHawk84
tvservice -s
from a terminal will tell you what mode you are inThanks BuZz, I did this. It shows me "state 0x12000a [HDMI CEA (16) RGB lim 16:9], 1920x1080 @60.00Hz, progressive"
So this is also what all of my cores do?
-
@GreenHawk84 That is the video mode you are in, unless you have changed it on a per system or rom basis.
Your cores render to whatever the "render resolution" is set to - which by default is the same as the video mode on a RPI2 image, unless you have changed it, or come from an old version of retropie when we had a 640x480 render resolution default. On the RPI1 the render resolution is set to 640x480 for performance reasons.
-
@BuZz said in Updated crt-pi shader:
You don't change the screenmode on the TV. You change it on the RPI. In my case, the TV still says to the RPI - "I prefer 1080p". I then configure the RPI via /boot/config.txt to switch to 720p. - the TV will then deal with that signal and upscale it etc.
That clears up a few things for sure on my misconception of how the TV talks to the Pi! :) So the output res hasn't nothing to do with the TV for the most part.
To try again. You start with a low res game like something that's 320x200 that use integer scaling or some other method to upscale the original games resolution to fit the render res, then it's passed up to the output res, that finally the frame passes to the TV that might further scale the image?
If you start with a render res that is lower than the output res does it upscale to fit the output res before passing to the TV or would you have a border or something?
-
i've created all the .cfg overrides to automatically use the crt-pi-vertical shader in vertical games in lr-mame2003. check it out :) https://retropie.org.uk/forum/topic/4046/crt-pi-shader-users-automatic-usage-of-crt-pi-vertical-in-vertical-games-in-lr-mame2003
-
Hi everybody,
I am running a Pi3 with the brand new retropie 4.1, I can load and apply every crt-pi shaders and enjoy it but when I load and apply crt-pi-vertical for vertical scrolling games like Strikers 1945 plus for eg it has the same aspect than the crt-pi...scanlines are horizontal and not vertical as it should be...anyone experienced that also?
For your info, I also tried the curved crt-pi-vertical: curves are applied but scanlines are horizontals...
-
@FAB2TB On my current setup, crt-pi is giving vertical scan lines and crt-pi vertical is giving horizontal lines. I haven't dug in to see what was going on with it. Perhaps it's an issue with the plugin packed in 4.1. I have just been using crt-pi vertical for regular games and crt-pi if needed for vertical scrolling, so I haven't really looked at why they seem to be backwards.
-
and cfg changes you've made? per game configs?
-
@dankcushions video_shader_enable = "true" in cfg at configs/all
and then save per core or per game config (or both) after loading and apply the shader within the retroarch interface give me the same results -
@mrbwa1 if for eg the game video setting has been already rotated maybe it could explain this...in my case if I apply the horizontal or the horizontal curved it works but vertical ones give be the same effect than the horizontal ones
-
i can't recreate this. the vertical and regular shaders don't display their scanlines any different. if you used the regular crt-pi shader in a vertical game it would still have vertical scanlines, as libetro knows the game is rotated so it rotates the shader also. you must have something changed from default regarding rotations.
-
@dankcushions thx let me have a look at the rotation thing tomorrow, I ll let you know
-
@dankcushions ok I think I understand now, when DaveJ wrote "playing vertical games on horizontal screens" it means vertical games that need to be rotated to fit horizontal screens. So if my vertical shooters are already in a normal horizontal orientation mode I can't add vertical scanlines to it by using the vertical shader, am I right?
I thought this vertical shader has been created to simulate vertical scanlines for vertical games on horizontal screens which seems not to be the case if I understand well now. -
@FAB2TB said in Updated crt-pi shader:
I thought this vertical shader has been created to simulate vertical scanlines for vertical games on horizontal screens which seems not to be the case if I understand well now.
The different versions are because of shadow mask emulation rather than scanlines. If you turn shadow mask emulation off in both by setting
#define MASK_TYPE 0
they produce identical results. -
I really like what scanlines do to the game art. But sometimes they feel a little too large and black. What is the best way to make more blurry and fade?
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.