Sony Megatron Colour Video Monitor

I don’t think we’ll get proper RGB/RBG triads at 600TVL+ on a 4K OLED TV any time soon. We should be thankful that they do work to some extent at 300TVL.

This seems a bit odd. I think I’ve taken some decent photos using Sony Megatron Color Video Monitor using SDR presets.

1 Like

Deconvergence won’t solve this problem as it’s applied before the mask. It looks like this is being done after the mask is applied and was why I was saying look at the TV settings (usually sharpness or post processing) or even your cable. However I think you ruled both of those out.

Try using SDR just to see whether you can get rid of the extra sub pixel problem. Then work up from there if you can/does or doesn’t solve the problem.

1 Like

None of those things can describe this problem. It definitely looks like some kind of TV processing. All of the pictures @Wilch has provided show this problem. It’s part of what confused me with what you were saying about the RRBBGGX mask. That has made things clearer though as in we had two problems here.

I will say it is odd though.

Just to rule things out @wilch can you see these artifacts with your naked eye?

1 Like

Holy cow. The contrast, the glow, the halation through the glass panel. It’s like I have a giant PVM in my living room. This is seriously like the endgame solution for me. Now if only we could solve that motion clarity issue…

6 Likes

4 posts were merged into an existing topic: BFI/Strobing/Motionblur thread reorganized

I moved the discussion about BFI and strobing to a thread where there is already a lot of info and discussion about this

2 Likes

Looks amazing! What’s your display?

1 Like

A quick update: I’ve added in 1080p and OLED support to the Sony Megatron but sadly this blew the max indexable variables limit of 4096 (essentially the shader no longer fits in a SIMD units memory) so I’ve got to do a bit more jiggling to get this all to fit - annoyingly.

2 Likes

Is it possible for the RBG stuff to replace the BGR code instead of being added as an additional mask option? Is there any advantage of having BGR over RBG?

Also, I haven’t seen your implementation but by chance did you add in OLED support for 1080p as well (which may not be needed)?

Perhaps OLED support can be limited to 300TVL Masks at 4K resolution if it isn’t already.

1 Like

wut? how did that happen? Is the mask code just really eating it up or something?

2 Likes

An LG C8. Seems to play perfectly fine with the subpixel structure as far as I can tell!

2 Likes

CRT Shaders look fine on OLED TVs using RGB mask layout once you’re not trying to see individual phosphor triads. Even if you switch the layout to BGR you may not notice much of a difference.

It’s hard to see the individual “phosphors” at such a dense TVL on a 4K TV. Can you share a picture or 2 at 300TVL RGB & BGR, deconvergence off if possible please?

When you want to get those “phosphors” to look right you have to use RRBBGGX for OLED TVs.

Also, your colour looks really great, is your TV calibrated? Also what Sony Megatron Color Video Monitor Preset are you using and did you have to change any settings?

1 Like

Looking at these OLED shots, it does appear as if there’s additional space between the red subpixel(?) and blue subpixel, and less space between the blue and green, in the shots I’ve seen. I believe the white subpixel is still doing it’s thing and resulting in oddly-spaced phosphors. It’s also still not clear to me if we’re looking at pixels or subpixels in these photos.

The ultimate proof is a side-by-side comparison with the real thing, as @MajorPainTheCactus has done.

2 Likes

This is how it looks with RRBBGGX Mask. The spacing looks completely different among RRGGBBX, BBGGRRX and RRBBGGX.

RRBBGGX looks like BBGGRRX on Aperture Grill Masks on Sony Megatron Color Video Monitor as well as other shaders I’ve tried.

It’s the most evenly spaced layout for OLED seen so far.

The same mask on Slot Mask Presets that I have tried on other shaders looks like RRBBGGX.

2 Likes

V3.4 Sony Megatron Shader pull request has been made so it should make its way into RetroArch soon.

Added support for OLED’s RWBG layout or in other words RBG. Added support for 1080p displays although 800TVL isn’t really supported as its pretty impossible to achieve at 1080p and 1000TVL is just white as 1080p is 1000TVL (in my approximate world)

I’ve dropped support for the hidden black and white masks as well so that the shader fits into the 4096 indexable variables limit on DX11. Let me know if you use them.

2 Likes

Yes its this error:

X4505: Sum of temp registers and indexable temp registers exceeds limit of 4096

The thing is this doesnt seem to be talking about register registers as in I don’t seem to have stupidly low shader occupancy. I think its saying we’ve run out of space for ‘static data’ just in shader speak - possibly. There’s got to be some limit I suppose as the code has to fit in the tiny amount of memory in a SIMD unit - I could be wrong that its tiny as it could be stored in the L2 I suppose.

If I had used all my scalar and/or vertex registers I’d expect to see really poor performance which we don’t see - at least from my tests. I dont know…

2 Likes

Yes as it determines where the gap (the X) goes in for most of the masks. As in instead of BGRX its RBGX i.e the gap is between the green and the red instead of the red and the blue. Do try out my OLED 600TVL mask and see how it works for you.

1 Like

Just a suggestion, but instead of having the “white” mask twice for 1080p, why not move up the MG mask up to the 800 TVL slot and add a 3-pixel 360 TVL mask such as BGR or MGX (this for RGB layouts) in its place on the 600 TVL slot? Only problem is then both those masks wouldn’t match up with your current convention of 300/600/800/1000 TVL shared across 1080p, 4K and 8K. If that’s important to you, instead of that, consider replacing the 4-pixel RGBX mask with either of the 3-pixel masks I just proposed, as RGBX is not only quite coarse at 1080p, but quite dark as well, and since very few 1080p displays (even those that are HDR-capable) are bright enough to offset this loss in brightness without the techniques utilized by other CRT shaders, I think a 360 TVL mask makes more sense for this shader. What do you think?

2 Likes

It may be an improvement, but I’ve yet to see a side-by-side on par with those posted by @MajorPainTheCactus. I’d like to see some OLED shots of the same caliber, with triads that are basically indistinguishable from the real thing (if possible).

2 Likes

Greetings @MajorPainTheCactus,

Looks like you did a serious overhaul of your code but some of the changes won’t work properly for OLED TVs.

Please see my notes and comments below. I tested this and almost pulled my hair out when I didn’t see the results I expected. A quick browse of the code revealed what was going on.

New

This does not work properly on OLED TV.

// 4K 

// 300TVL
#define kMaxApertureGrilleSize       6

#define kRRGGBBX        { kRed, kRed, kGreen, kGreen, kBlue, kBlue }
#define kRRBBGGX        { kRed, kRed, kBlue, kBlue, kGreen, kGreen }
#define kBBGGRRX        { kBlue, kBlue, kGreen, kGreen, kRed, kRed }

const uint kApertureGrilleMasks4K300TVL[kBGRAxis][kMaxApertureGrilleSize] = 
{ 
   kRRGGBBX, kRRBBGGX, kBBGGRRX
};

#undef kMaxApertureGrilleSize 

#undef kRRGGBBX        
#undef kRRBBGGX       
#undef kBBGGRRX  

//I didn’t test Slot Mask but this is the correct RRBBGGX layout for OLED TV below.

// 4K

// 300 TVL
#define kMaxSlotMaskSize   7
#define kMaxSlotSizeY      6

#define kXXXX     { kBlack, kBlack, kBlack, kBlack, kBlack, kBlack, kBlack }

#define kRRGGBBX  { kRed, kRed, kGreen, kGreen, kBlue, kBlue, kBlack }
#define kRRBBGGX  { kRed, kRed, kBlue, kBlue, kGreen, kGreen, kBlack }
#define kBBGGRRX  { kBlue, kBlue, kGreen, kGreen, kRed, kRed, kBlack }

//This 8K, 600TVL RRBBGGX Mask you have here looks like the correct layout for a 4K, 300TVL OLED Mask to work properly.

// 8K 

// 300 TVL
#define kMaxApertureGrilleSize       13

#define kRRRRGGGGBBBBX  { kRed, kRed, kRed, kRed, kGreen, kGreen, kGreen, kGreen, kBlue, kBlue, kBlue, kBlue, kBlack }
#define kRRRRBBBBGGGGX  { kRed, kRed, kRed, kRed, kBlue, kBlue, kBlue, kBlue, kGreen, kGreen, kGreen, kGreen, kBlack }
#define kBBBBGGGGRRRRX  { kBlue, kBlue, kBlue, kBlue, kGreen, kGreen, kGreen, kGreen, kRed, kRed, kRed, kRed, kBlack }

const uint kApertureGrilleMasks8K300TVL[kBGRAxis][kMaxApertureGrilleSize] = 
{ 
   kRRRRGGGGBBBBX, kRRRRBBBBGGGGX, kBBBBGGGGRRRRX
};

#undef kMaxApertureGrilleSize 

#undef kRRRRGGGGBBBBX  
#undef kRRRRBBBBGGGGX  
#undef kBBBBGGGGRRRRX  

// 600 TVL
#define kMaxApertureGrilleSize       7

#define kRRGGBBX        { kRed, kRed, kGreen, kGreen, kBlue, kBlue, kBlack }
#define kRRBBGGX        { kRed, kRed, kBlue, kBlue, kGreen, kGreen, kBlack }
#define kBBGGRRX        { kBlue, kBlue, kGreen, kGreen, kRed, kRed, kBlack }

const uint kApertureGrilleMasks8K600TVL[kBGRAxis][kMaxApertureGrilleSize] = 
{ 
   kRRGGBBX, kRRBBGGX, kBBGGRRX 
};

#undef kMaxApertureGrilleSize 

#undef kRRGGBBX        
#undef kRRBBGGX       
#undef kBBGGRRX        

Old, modified by me.

This works properly on OLED TV

// APERTURE GRILLE MASKS

#define kMaxApertureGrilleSize       7

#define kMG             { kMagenta, kGreen, kBlack, kBlack, kBlack, kBlack, kBlack }
#define kGM             { kGreen, kMagenta, kBlack, kBlack, kBlack, kBlack, kBlack }

#define kBGR            { kBlue, kGreen, kRed, kBlack, kBlack, kBlack, kBlack }
#define kRGB            { kRed, kGreen, kBlue, kBlack, kBlack, kBlack, kBlack }

#define kRGBX           { kRed, kGreen, kBlue, kBlack, kBlack, kBlack, kBlack }
#define kBGRX           { kBlue, kGreen, kRed, kBlack, kBlack, kBlack, kBlack }

#define kRYCBX          { kRed, kYellow, kCyan, kBlue, kBlack, kBlack, kBlack }
#define kBCYRX          { kBlue, kCyan, kYellow, kRed, kBlack, kBlack, kBlack }

#define kRRGGBBX        { kRed, kRed, kGreen, kGreen, kBlue, kBlue, kBlack }
#define kRRBBGGX        { kRed, kRed, kBlue, kBlue, kGreen, kGreen, kBlack }

const float kApertureGrilleMaskSize[kResolutionAxis][kTVLAxis] = { { 7.0f, 4.0f, 3.0f, 2.0f }, { 7.0f, 7.0f, 5.0f, 4.0f } }; //4K: 300 TVL, 600 TVL, 800 TVL, 1000 TVL   8K: 300 TVL, 600 TVL, 800 TVL, 1000 TVL

const uint kApertureGrilleMasks[kResolutionAxis][kTVLAxis][kBGRAxis][kMaxApertureGrilleSize] = {
   { // 4K
      { kRRGGBBX, kRRBBGGX },      // 300 TVL
      { kRGBX, kBGRX },            // 600 TVL
      { kBGR, kRGB },              // 800 TVL
      { kMG, kGM }                 // 1000 TVL
   },
   { // 8K
      { kRRGGBBX, kRRBBGGX },      // 300 TVL
      { kRRGGBBX, kRRBBGGX },      // 600 TVL
      { kRYCBX, kRYCBX },          // 800 TVL
      { kRGBX, kBGRX }             // 1000 TVL
   }
};

#undef kXXXX
#undef kMG
#undef kGM
#undef kBGR
#undef kRGB
#undef kRGBX
#undef kBGRX
#undef kRYCBX
#undef kBCYRX
#undef kRRGGBBX
#undef kRRBBGGX

Thanks for this great shader! Even with the anomalies the overall output looked really impressive in HDR mode! Most likely due to what I mentioned above the RGB and BGR modes looked better than the new OLED mode in terms of overall colour, not at the “phosphor” triad level though.

1 Like