Sony Megatron Colour Video Monitor

Yes, and there’s no such thing as 480p+ on 300 TVL, AFAIK. There could be 480i, but I don’t think megatron supports interlacing simulation, does it?

Off-topic but relevant to the interests of folks in this thread, there was a big improvement to BFI in a recent commit, especially for screens capable of >120 Hz refresh rates: https://github.com/libretro/RetroArch/pull/16142

5 Likes

Unfortunately that didn’t work in this particular scenario but lightening the scanline gaps by increasing the Scanline size and using the 8K setting seemed to have more or less eliminated the problem.

1 Like

Great thats good to know its fine with aperture grille. So the scanline algorithm is identical in both situations as the mask is applied last and has taken the same path through the code. Its not impossible theres a bug its just highly unlikely.

As I say the issue youre seeing is down to the fact we’re using discrete pixels rather than continuous phosphors. We have 10 pixels to draw the light and dark parts of each scanline and in the worse case we’re using 3 of those pixels for the horizontal part of the slot mask per scanline.

Then because we’re not exactly matching the mask with scanlines (i.e scanlines can be 9 pixels and sometimes 10 as we fit 224/240 etc of them to the pixel resolution of the display and the slot mask height might not be a multiple of that scanline height) they start to have different offsets and so you get these repeating moire like effects as edge cases appear every x scanlines depending on the display resolution, scanline resolution and vertical slot mask resolution.

You can minimise this effect with integer scaling and changing the scanline widths attack and mask height. Also upping the resolution would help - do you have an 8k tv!?! :wink:

2 Likes

As I say the fundamental problem youre looking at is one of using discrete pixels to approximate continuous phosphors and the slot mask is highlighting this as it segments the scanline.

As an experiment try a integer scale with an exact multiple scaling of the slot mask. So in the above image it looks like the mask is 9 (or 8?) pixels high so put your screen scaling to that and see if you get a regular matching of the mask to the scanlines beneath it. Hopefully this should help with the moiré effects youre seeing.

2 Likes

Yup precisely - I think (as you have) this is just classic moire patterns. But there are other options - using Integer scaling with a scale exactly matching the mask height should help. Also making the dark part of the scanline vanish which is what the virtua racing preset does as all the Sega arcades and a lot of slot mask tvs didnt have dark parts to the scanlines - probably because they too hit the same problem even with phosphors.

1 Like

See the first zx spectrum photo in this post and the sega rally post just a bit further down in that CRT thread:

A lot of slot mask displays didnt have dark parts to the scanlines. As I say my virtua racing preset simulates this.

1 Like

You should be able to get rid of this line with integer scaling and exact/multiple slot mask height scale.

1 Like

Oh, I think this line might have been from the menu. It’s not a scanline gap. This particular preset doesn’t suffer from the moire issue to a noticeable level because it’s from after I applied the Mask Adjustments and also used the shorter 8K slot mask pattern. So at least for me, problem solved.

Finally, my suspicions and theories have been confirmed, clearly explained and well defined.

This is something I’ve been thinking for a while. I also understand that this shader isn’t going to be “cheating” by using some scanline Gamma, which would alter the brightness of the scanline by mixing it either with white or surrounding colours. So we would have to master these Max and Min values in order to get what we desire.

Excellent and accurate analysis.

This is what I’ve suspected for a very long time now just haven’t heard anyone actually say it and state it so clearly. Nail on the head. I mean @Nesguy has kinda been saying it as well but it usually sounds like, we’re still not at the point where we can accurately recreate X or simulate Y even with 4K, looking forward to 5, 8 and 12K.

This is essentially what I did to rectify/workaround the problem.

No, fortunately.

It is what it is. Too bad people like us don’t often seem to get the credit which is deserved for solving all of these niche problems in the world.

I’d love to try this.

The Mask is 7 pixels high with the Slot being 1 pixel high (I believe) in the 4K, 300TVL mask using the default preset.

How should I go about setting this custom Integer Scale? Also remember, when the integer scale is too low you can start to have vertical moire patterns being introduced.

I’ve tried Integer Scale with OverScale On and Off, and also Non-Integer Scale.

Is it possible for the Mask to have Integer Scaling or at least have an option for the Mask Height Snap to the nearest Integer Scale Multiple? So there will always be a regular interval between the slots and the scanline if the user wanted?

It would make sense since we’re dealing with fixed grids. We can’t really do too much of the “in-between” (unevenly divided/fractional) stuff without artifacts.

One thing I would like if possible is a list of all the Slot Mask Heights and Widths that Sony Megatron Color Video Monitor supports and how to access them.

How would I go about getting that information?

Also, is there a way to access the different Slot Mask Sizes/Heights in a more intuitive way than just “trying the 8K setting” even though I don’t have an 8K display.

I remember when dealing and Aperture Grille, you explained that the TVL and Resolution settings were all relative basically so if one wanted to halve the TVL of any TVL setting, they could switch from 4K to 8K for example.

Is it possible now that the Shader has grown up quite a bit for there to be more specific and discrete (including the labels) controls for adjusting/choosing/building/customizing different Mask Patterns?

How would I go about doing this?

How should I go about doing this? Can I use the default preset for this or do I have to use your Virtual Racing preset, exclusively for this type of effect?

Anyway, thanks for your support and your responses and your continued dedication and all the hard work that went into this project which scratches so many creative and technical itches at once and continues to help in turning people’s dreams into reality.

2 Likes

Yes so the mask is 8 pixels high as it includes the slot pixel. You can do it all in the main settings->video->scaling menu. Select integer scaling and then you can go up and down in multiples of the output resolution which is another way of saying number of pixels per scanline. Make this be exactly or a multiple of the hieght of the slot mask used. So for example if the slot mask is 4 pixels high select 4 or 8 or 12. This is only really for test purposes to rule out any bugs and that this is just moire effects.

2 Likes

Ah yes I can see the menu lines now! :man_facepalming:

1 Like

Regarding BFI, does OLED’s instant response time eliminate the horrifying image retention and ghosting? I know we have a few OLED users here @Cyber @MajorPainTheCactus

This is pretty interesting, I wonder if Ophidon can do anything with it. I just commented on the pull request, hopefully he’ll see it.

https://forums.blurbusters.com/viewtopic.php?f=7&t=7539

Workaround #2: Interrupt BFI Cadence With Framedrops/Framedups

For evenly divisible refresh rates (120, 240, 360) for 60Hz, just framedrop or framedup one refresh cycle every few minutes. That will swap LCD inversion polarity (positive vs negative). So you only expose the LCD to a few minutes of image-retention risk that rewinds when the voltage polarity swaps.

So, for 120Hz, you interrupt cadence by 1/120sec with either a single-refresh-cycle framedrop or framedup (pick one) – so 60Hz black frames are now using the opposite voltage polarities instead . And now you don’t have static-charge buildup that creates image retention.

In other words

IMAGE(-) : black(+) : IMAGE(-) : black(+) : IMAGE(-) : black(+)

becomes:

IMAGE(+) : black(-) : IMAGE(+) : black(-) : IMAGE(+) : black(-)

As you can see, voltage polarity is balanced both IMAGE frames and black frames too.

Swap once a minute (or few), and eliminate LCD burn in risk. You might sometimes get a very faint amount of temporary image retention that takes only a few minutes to undo after exiting your BFI mode – even if you’ve been running BFI for days. But you’ve removed the permanent burn in risk. Because your static buildup is limited to the phase swap interval (e.g. 1 minute). Your static buildup is limited to the phase swap interval (e.g. 1 minute) instead of days, for a multi-day always-running-BFI-on-LCD 24/7 session.

2 Likes

What would be really nice is if it would detect black screens and do the stutter then, when you wouldn’t see it.

3 Likes

Yes, there are quite a few if I recall correctly, for example @Wilch, @FinalBoss, @c9f5fdda06, @Azurfel, @rancid and probably more.

Unfortunately my E6P is a 2016 model that lacks support for 120Hz input. The panel can do 120Hz though.

3 Likes

Hi, Oled C1 for over 2 years. Being careful and sometimes not, but when playing with Cyber’s Bezels and shaders, I always leave the Brightness at 50. But now I’m using it without Bezels and in Full Screen. But what would this BFI be?

2 Likes

BFI or Black Frame Insertion reduces motion blur due to the sample and hold, progressive scan method of displaying an image on the screen as opposed to the interlaced method. This occurs because of the persistence of vision phenomenon in our eyes and brain. So when the next frame is displayed, our cones still have the image of the previous frame “remembered” and there’s some overlap, causing ghosting/motion blur or rather reduced motion clarity especially when compared to CRTs.

BFI inserts a black frame in between the image frames thus reducing the time the frame is spent “burning” into the rods and cones of our retinas so that less of the image is “remembered” when the next frame is displayed.

So it’s basically wiping the slate clean between frames so your eyes spend less time remembering the old frames while the new frames are being displayed.

CRTs don’t have that problem because the entire screen is being blanked out except for the single line of image data that is being drawn at any given point in time.

If you don’t notice any issue with motion blur, I’d say don’t go looking for problems because ignorance can be bliss and much more economical.

I’d say wait until the tech is there or you have the tech that can truly take advantage of it before “spoiling” your gaming experience when you can’t “unsee” something that you have now had a greater experience with.

BFI can be enabled on either the display side or via RetroArch itself.

It absolutely ruins brightness. So there’s that as well.

1 Like

So I tried this last night and when I used the 8 pixel high slot mask 6X and 8X worked well, while 5X and 7X showed the moire pattern and had the scanlines and the slot masks having intersection offsets which were irregular.

6X looked really beautiful but was a little too large for 4K at 2688 pixels high. A 4K 16:10 3840 x 2400 or 5K 16:9 5120 x 2880 or maybe even a double height 16:18 2560 x 2880 display might be able to pull it off!

I went all the way down to 1X where it was really hard to tell what was going on with the scanlines vs the mask. The mask pattern seemed unchanged though so the TVL just got lower as I scaled the resolution down and vice versa.

I also went as high as 12X and 16X and things seemed pretty evenly and regularly intersected but at those high TVLs getting the moire patterns might be a little more difficult because it’s easier for the mask patterns to fit within the scanlines. Not sure if that is all you wanted to see or find out but feel free to ask for more information or tests.

So this just reiterated something that I had learned when making my CyberLab Special Edition Presets which were the first to incorporate in house graphics.

I learned that it was easy to eliminate moire by using mask size (TVL) that was optimized for the effective resolution available to render the mask pattern.

So if one were to lower the available pixels to around 1080p, by using an overlay or bezel, then they might get better results using a 1080p Optimized CRT Shader Preset than a 4K one when it comes to things like more patterns.

It’s the same thing playing out here, it’s just that we’re running into it while using the maximum 4K resolution of our screens or rather 2160p vertical resolution.

So some masks are just too big/tall to render properly/evenly with Scanlines at those resolutions.

So the solution is to choose a shorter mask that can fit or be resolved evenly or forgo the scanlines altogether for those biggger, taller masks if you’re limited by vertical resolution.

Enjoy the beauty of 6X Integer Scale:

2 Likes

I need to have another play around with bfi in retroarch - my tv has it built in which does back light strobing (I believe) and so I havent had to use the retroarch version in a while. Id be interested to see what the change HunterK was referring too above has done. What I really want is bfi on my phone - its got a 120hz amoled display and Id love to see what that does to its motion blur (which is the best of all screens Ive seen outside of a CRT)

1 Like

A future OLED generation that can get at high brightness+BFI will be pretty fantastic. I’m happy with my S95b OLED for a good while, and while I’m quite happy with the state of emulation right now the future is looking pretty glorious

2 Likes

I tried adding in some really slight tex_coord noise and I like the result. On all of my CRTs, if I get super-close to them, there’s some subtle movement in the scanlines and it looks pretty much like this (just a couple of lines added to the base megatron shader file): https://pastebin.com/Xvd3CL7r

I’m not going to bother with a screenshot because it wouldn’t really show anything.

2 Likes

This is interesting. I used to add subtle noise to all Mega Bezel Presets for the same reason.

Is it possible for you to add this as a separate module/shader that can be appended and have it behave in exactly the same way?

I wasn’t clear where the noise code started so I would have to compare the existing shader code with the code you posted. Perhaps a comment might assist the uninitiated like myself.

Right now I’m really satisfied and happy with the refinement in my latest Megatron Slot Mask presets. Something like this might just add some further polish or rather some icing to the cake.

1 Like