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
Looks amazing! What’s your display?
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.
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.
wut? how did that happen? Is the mask code just really eating it up or something?
An LG C8. Seems to play perfectly fine with the subpixel structure as far as I can tell!
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?
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.
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.
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.
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…
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.
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?
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).
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.
Ah I see the bug - I’ve lopped off the black as in it should be 7 elements and right now it’s 6. As youve noticed there was quite a lot of code to change to get things working. I’ll fix it up tonight, thanks @Cyber.
Just did a quick fix on my phone - not tested it so I’ve probably horribly broken it but it’s worth a punt with such a simple fix. I’ll test it when I get back tonight.
I love these photos so much I’m wondering whether it’d be alright with you if I update my header post with them?
So I have finally tried your shader on my LG C1 and Christ……the slot mask presets you have going on with this shader are the most convincing I’ve seen ever. Is it because this shader is HDR? It really is amazing how detailed the mask is even putting my face up to the screen. No matter the tweaks I cannot get the guest shader slot masks to look like this, they look too fat/big/low res.
It’s just a shame this shader darkness my display so much even brightness turned to max - you should add bloom/glow to brighten up the colors.