240p "LCD vs TV"

Let’s say I have a 4:3 17" CRT TV, and a 4:3 640x480 17" LCD.

I also have a 240p image of a video game plumber, since we are in the 4:3 realm here, he is obviously 320 pixels wide - 320x240. I will also consider that 17" is the viewable area (no bezels/edges) for simplicity.

If I display that image on the LCD without any scaling, it takes exactly one quarter of the screen (because it’s half in two dimensions). He’s diagonally 8.5" sized.

If I open that image on an CRT, provided I’m sending a 240p NTSC signal into it, that plumber will take on the entire 17" screen, meaning it will physically look bigger than what he looks like on the LCD. He’s diagonally 17" sized.

But he will also have the scanline effect, where every second line is dark, because that’s the only way to get 240 progressive lines to appear on something that shows 480 interlaced lines (I am also not talking about TVL/beam thickness/mask added “effects”).

He will also (almost) not flicker, because every frame he is drawn in the same exact lines on that TV (progressive image on an otherwise interlaced display).

So on the LCD side, I have a about 8.5" diagonally sized plumber in full pixels, on the TV size I have a 17" diagonally sized plumber with dark lines going “thru” him - he is definitely bigger on the TV. On the LCD he looks “complete” (made of entire rectangular pixels that touch each other), while on the TV he looks like has horizontal zebra stripes.

Basically, I see people asking about “lost information” and “half sizes” and whatnot, and I walk them thru these steps - is what I’ve written all correct?

PS: off-topic question, but isn’t applying scanline filters/shaders on a 240p LCD image “wrong”? 240 bright + 240 dark scanlines = 480 lines on a TV, so putting 120 dark lines into that image on an LCD makes it 120p?

1 Like

CRT is a 480i device. 240p is projected by turning off the 2nd field (double strike, that’s how it is called, 2 times projecting the same field) so it’s the same on 480p lcd. It still is 240p projected on a 480 panel.

2 Likes

But 240p isn’t projected by simply turning 2nd field off.

For every bright line, there is another dark line, for a total of 480 lines - that means addition, making a total of 480 lines. I know you can’t “add” black lines, they are just skips between bright lines, but if you count bright and dark lines, you’ve 480 lines.

LCD wise, same logic applies with shaders - you have 240p, but a black row of pixels should be “added” between each row of pixels, to have a 480p of resolution.

1 Like

The key is what interlacing vs progressive really means. As @DariusG mentioned, SD CRTs are 480i machines and that’s what they show at all times. “240p” (that is, the output from old consoles, not the actual 240p standard that was established in like 2000-something) isn’t really progressive and is actually just a spin on 480i intended to double the framerate while maintaining the same bandwidth.

Progressive means “use all of the lines all the time”, and you can feed a progressive signal to an SD CRT, as long as it’s within the same bandwidth as 480i, it’ll just be squished into the top half of the screen (and very bright).

In contrast, LCDs are inherently progressive displays, and that’s what they show no matter what. When you feed them an interlaced signal, they can’t show it unless it’s deinterlaced in some way first. In the case of your example, it would be line-doubled to maintain the aspect ratio without the gaps between the lines of information (that is, the scanlines). So, the LCD would end up showing the same size image as the CRT with the same amount of information, just with half of the lines being duplicates instead of blank.

1 Like

In the case of your example, it would be line-doubled to maintain the aspect ratio without the gaps between the lines of information (that is, the scanlines).

Actually, LCD panels can/could (I’ve one) literary show 1:1 image on the screen, no scaling at all if you could set them to do so. Even GPU scaling set to unscaled can also do that if you don’t wanna use LCD panel’s (no)scaling options.

Of course, LCD’s can scale by aspect ratio or screen fill too. Sadly, even if they have integer resolutions to scale, they still apply some filtering, because “consumer enhancements”.

But I understand the line-doubling logic to fill all 480 rows of LCD pixels (480p), it’s just the visual result is different from the TV one (which is also showing 480 lines, of which 240 are dark).

So, the LCD would end up showing the same size image as the CRT with the same amount of information, just with half of the lines being duplicates instead of blank.

Yes, that’s exactly it - “just with half of the lines being duplicates instead of blank” - which is my point. If you don’t scale on an LCD panel, (320x)240p image is small, even on 480p screen. If you do scale on an LCD panel, the entire screen is filled by doubling/scaling, but with full blocky pixels/no dark scanlines, so in the end the visual result is different from the CRT TV.

My issue is with the shader logic - if you load a jumping plumber video game in 240p windowed on a 480p screen, the window takes a quarter of the screen. Now you have to apply the shader before any stretching to fullscreen, which I presume darkens every other row of pixels, so 120 of them, which means you don’t even have original 240 lines/pixel rows of information to begin with before scaling/doubling to 480p, see?

I’d undestand 240 > 480 doubling, and then applying the scanline shader to the entire 480p image, but again, the shader is also being applied in that 240p window, so yeah… I obviously don’t get how these filters operate, sure.

1 Like

I think you are very confused, why is it 120? Every pixel has it’s own scanline and there are 240 of them there. Progressive doubles the source image to match 480p, so you blank every other line to be accurate.

In 240p image every line is a line of information, right?

If you apply dark scanlines (dark pixels) to every second line (pixel row), you have 120 lines of information, and 120 darkened.

You can blow up that new 240p image to 480p, but you should’ve firstly doubled the unedited 240p image to 480p and then apply a scanline/dark pixel row to every other row, no?

Indeed to use scanlines in a representative manner you need at least twice the vertical resolution so as to not lose image information. So yes, double the image size and then apply scanlines in your example.

This part of the original post was not elaborated on, so I’m not really sure what you mean.

lol how is that 120? You apply scanlines to the DOUBLED image, so 240. Who said you apply scanlines to original image?

Exactly this, filter comes after scaling, was just double checking because it can be applied to a 240p image too for example if it’s windowed.

Yes, it was that I booted the game into a 240p window, turned scanlines, then scaled by integer, so wasn’t sure if I was doing it properly and it clicked to me that the shader should’ve been applied post-scaling.

I do now have an issue with this particular scanline shader trying to draw scanlines into a 1080p fullscreen, which looks wrong for the integer upscaled 240p image inside it (yes, I have some black bars, the image inside is 4x240p=960p). 1080p isn’t 240p integer, but the filter is kinda dumb and thinks this is the resolution it should apply scanlines to.

I know how things look like when you put an LCD beside a TV, problem was walking thru some people without pictures what was happening (ie 240 lines is half the 480 TV lines, why won’t the image be halved in the top side sorta questions).

OK, so filters are not the same as shaders, to fix this we would need to know precisely what shaders and/or filters you are using.

There should be no issue with an integer scaled image and a crt-type shader figuring out what to do. If you combine them it might cause issues.

I’m currently outside RA with Duckstation (there’s the Swanstation core for RA) using ReShade with Scanlines-Abs.fx (scanlines-sine-abs.glsl in RA), but since both exist in RA, the results should be comparable (I hope?).

So I boot a popular 2D vampire game (I applied the Quality mod, which expands top and bottom rendering, still 240p) with display NN integer scaling on 1x native rez, ends up being 960p with black borders all around on my 1080p display, all’s good. AR is Game Native (4:3). Texture filtering is also NN (don’t have an integer option for that).

Then I turn on Scalines-Abs, which have a setting “Height”.

I start with default 240 height and the result is wrong, as it’s applying them into a 1080p screen which obviously doesn’t fit as an integer:

After that, I put 270 height as that is exactly 4x to fit into 1080p (note below image):

Note - the scanlines seem to fit the pattern of “1 bright line, 1 dark line”, tho scanlines at 0.0 “Lines Blacks” setting aren’t completely black, and that is my first question, is it because I’m mixing 270 height with 960p content? I mean 4x240p=960p, which integer scaled fits properly into 1080p (with boxes), which has 4x270=1080p of scanlines, so it’s all in 4x, am I wrong here?

And this is the same thing with manually entered -1.0 “Scaline Blacks” setting, which can’t be dragged into negative with a slider (glsl > fx port issue?), so I’m unsure if I’m hacking something here:

Note - to get some brightness back, I can put -2.0 or more, or keep -1.0 and fiddle with Whites or Amplitude setting.

So, how wrong am I going on about this?

And sorry this went off-topic, but I’d appreciate the input, using scanline shaders here to “prove” that it can look like TV but on an LCD which is kinda related to this post.

1 Like

Reshade applies the shader to the whole screen using it’s set resolution (or Window maybe) as basis, RA only depending on your scaling settings.

You need to try the shader in RetroArch first to see how it works.

See images below in my reply.

So… the same shader, exact same Swanstation (+RA integer scaling +disabled Crop Overscan) and Duckstation settings. Note that RA’s Scanlines-sine-absolute comes with “Phase” setting 0.5, which I’ve put to 0.0. 4:3 manually entered AR.

Note - RA’s shader can’t have negative Scanline Black values (maybe if I put it manually into slangp file?), so I guess this shader’s point is either not having truly black scanlines, or there’s a deeper stuff with Phase setting, Amplitude and so on, but this is irrelevant. I reverted this in ReShade too to 0.0. Ironically, if I didn’t catch the RA’s Crop Overscan, which is enabled by default and isn’t connected to Crop settings from Swanstation, this shader would actually produce a very gentle gradient per scanline, because of that RA’s few pixel cropping.

RA/Swanstation+RA shader result:

Duckstation+ReShade shader result:

So, I guess the math pans out about the 4x and integer images into FHD and 270 height. Tho this is for this simpler shader, will have to compare how CRT shaders work.

One tiny issue - Swanstation vs Duckstation have a difference in left/right centering (I guess?), can also be very visible in the magnified section in above screenshots (letters R and C), but here it is, ignore the ReShade bar:

So either one of them is off-center, or they simply have a different center point, it’s not that one is wider than the other, but where’s this coming from?

PS: tried with 1:1 PAR/DAR, they are both in the same place…

Try this: disable all cropping in the core and also in the core set custom aspect ratio to 35:24.

1 Like

Cropping was already disabled when I was taking those screenshots, even disabled Ra>Video>Crop Overscan. AR is Core Provided.

Now I’ve tried with your AR (RA=Core Provided), one of them is still 1 pixel to the side.

It would be more accurate to say that they’re displays that can only support 15khz scanrate. That said the phosphor pitch and the resolution don’t always resolve that signal perfectly.

LCDs are not inherently progressive displays, there are some LCDs out there that have interlace modes so they can work with interlace(especially Pro-gear and even some consumer TVs do have interlace simulation modes believe it or not). However interlace works better when your display is flickering like a CRT + it’s mostly used nowadays by broadcasters to save on bandwidth.

As for game consoles, LCDs typically detect 15khz as 480i since and deinterlace it to 480p since they are made with DVDs and Standard Definition Broadcast TV Channels in mind.