New CRT shader from Guest + CRT Guest Advanced updates

There is a reason why I used the term “holy grail”. Its something to be pursued but never achieved. I’m willing to accept the futility (Edit: disregard that) of the endeaver until the moment I start thinking something could help it.

I think CMY and CMYB can help, but there is something far more important about CMY than it’s ability to solve the problem. That being the heck of it!

Also, that last royale image was fine. (aside from my controller reconnecting)

Yes but then every low consumer TV looked different so what is an ‘authentic’ look - there wasn’t one. There was instead a range of quality and I can tell you from personal experience that it was very common for people to be trying to upgrade their connections - such as s-video.

In Europe we were blessed with SCART for instance and the better looking PAL (yes PAL suffered from awful conversions from NTSC but let’s not divert I suppose). I remember loads of people connecting up their SNES with an RGB SCART cable - it was in all the magazine’s at the time.

All we wanted to do back then was get a better quality image. Also if you walk into any retro arcade today you’ll see plenty of screens with big thick scanlines and plenty with none. It was a real variety.

Also I’m not sure I buy into the professional monitors are supposed to highlight the problems as all they are doing is to remove variation between monitors to be more inline with a (central) reference point. There was not a standard ‘off’ colour hue for instance so if you made your game look good on a Bang & Olufsen it wouldn’t look good on the rest of the TVs - that’s why youre using professional monitors (to have the best chance of your product looking good on the widest range of TV or headphones or speakers). It doesn’t make 90% of video or music look or sound bad - instead I’d argue you like a certain sound or look that is off from the reference point and that is very subjective.


I’d like to add the fact that Joe Normie, if he has any retro system at all, will plug it in to whatever works and let his guests play games… stretched. (Edit: Am I being a tad pessimistic here? It might be an outdated notion of “normal”.) Back in the days @MajorPainTheCactus describes what is now old was then new.

Normal people do not go out of their way to either pursue or create a mimicry of old hardware. Obsessive people do that. And obsessive people generally do not accept the futility of their obssesion.

1 Like

I would say that those with a tragic lack of obsession are the outliers, and we in pursuit are the norm. :innocent:


How? The colors of the raw image are not what you see with the final output on any CRT.

There’s something wrong in the scaling of this image, there’s some kind of repeating pattern happening with the mask that should not be there. I’m looking at the full-size image.

I’m still not completely convinced that the “problem” you’re describing is due to masks per se and not something to do with the other 1,000 settings.

Give me an example of an SNES game or whatever that you think “looks wrong” with masks, an easily accessible scene toward the beginning of the game, preferably.

That’s why 240p Test Suite exists, if all the colors in color bars are visible and there’s no color tint to grey bars then you’re good. I don’t know why we have to make it more complicated than this.

Yes but if that’s all there is to the look of a CRT then I’m guessing this entire forum wouldn’t exist. :upside_down_face:


Looking at the screenshots with 100% dpi scaling it looks like a standard resolution scale problem. You can check if you aren’t using some sort of super resolution from driver settings which doesn’t mach your display resolution.


If the mask is displaying correctly for the monitor’s subpixels, it shouldn’t affect the actual colors, just the brightness. Trying to compensate for that brightness loss can affect the colors, though (gamma, brightboost, etc.).

The big thing to keep in mind is that what we’re doing with masks, scanlines, deconvergence, etc. is raising and lowering the black level. This means that, even if we are clipping the crap out of an individual texel -> pixels (that is, our range is limited to 0.0-1.0, so clipping happens fast), it may not really be clipping if the variable beam width is modulating it with additional black pixels around it. (see: Nesguy’s color bars or torridgristle’s LUT-based variable-width scanline shader)

Likewise, things like deconvergence and CMY masks make the image brighter because we’re literally removing black. Again, this monkeys with the black level, so any other compensation tricks (like multiplicative brightboost) can suddenly be a problem again because there’s … less black.


I think this deserves a new thread, maybe?

On the subject of color management, can someone with expertise please articulate clearly why it is that color bars always get clipped when you just change the shader from 6500K to 9300K, but this doesn’t happen when you leave the shader at 6500K and change the monitor itself to 9300K? I kind of understand it but I don’t know the right words. :stuck_out_tongue: To put it another way, why is it that the shader can get so much brighter at 6500K without clipping anything (vs 9300K)?

It seems like leaving the shader at 6500K and changing the monitor itself to 9300K would result in the “intended” colors for NTSC-J content, is this correct? If so, what are the pros/cons of doing this vs. changing the shader’s white point?


I’m not seeing anything in either Nvidia control panel, windows settings, or retroarch settings and I can’t think of anything else.

In Nvidia Conrtol Panel 3d settings are set to “Let the applicatacton decide”, Resolution is set to “3840 x 2160 (native)”, Color settings are set to “reference mode” and I set scaing to “No Scaling” just to be sure. In windows settings scaling is set to “100%” for both apps and text.

I seem to have everything set up to keep things outside of the application from interfering. I’ts been consistent across 2 computers 3 displays and I don’t know whats causing it.

This actually still sounds pretty amazing considering all the options there are for adding more black (although, I guess they’re not quite the same as royale’s contrast setting).

This started because I requested a CMY mask. We went into color managment because I had to explain why. If you want to make a dedicated thread, however, it sounds like it could become a great resource.


I updated the ReShade shader with a new saturation implementation and brightness control. As usual, you can get the updated version here:

When i find some more opportunity i’ll probably update the mask options to be on-pair with the new guest-advanced shader. I belive it will be much more versatile with the update. :grin:


Awesome! I’ve been playing with it for the last 15 minutes and they work great! With saturation 1.17, contrast 0.8 and brightness 1.05 I’m getting this very nice vivid “pop” that I loved on my Philips monitor and no VGA monitor could replicate that for some reason. I’ll update my article in the coming days (I advised people not to use the saturation control because it’s broken).

Looking forward to it! You keep me busy, that will probably necessitate another article rewrite :stuck_out_tongue:


I added another version to my WinUAE shader github. With some improvements now almost all guest-advanced mask features are present, together with curvature option. Maybe i could add deconvergence too, but probably not ‘today’. :grin:

I would be glad if you test it a bit, mostly for driver compatibility.

Here is also the description of present masks:


@guest.r Tip: when you want to post fixed-width text, to avoid annoying highlighting detection, use the “text” tag for the code block:

blah blah

Don’t forget this one:

1 Like

It’s an automatically formatted quote of a formatted text. I don’t mind the highlights. :wink:

Dunno about this, needed fmod(x,y) call failed to compile with ReShade, so i removed it for now. I could write the function by myself, maybe at some later time.

1 Like

Excellent, I gave it a good workout in the last two hours and all the features work flawlessly on my NVidia RTX 3060, zero issues. I don’t care about curvature stuff personally, but some people might find it handy. I really like the new halation and separate dark and light pixel controls for the slot mask. I tried all mask variations and I’m still finding the simple magenta/green mask (type 0) combined with the separate slot mask to work best for my purposes (C=1084 monitor emulation at 3x-3.5x on 1080p). With the aid of the new brightness and colour controls in the colour shader, I was able to make some subtle but important improvements to my previous preset, namely better control of bright highlights without strange artifacts and zero luminance loss compared to the raw image. So great additions, thanks for updating these! :smiley:

Attached an example for you to see where my preset stands now. I’ll wait a bit with updating the article as I have a feeling you’ll eventually port the deconvergence too, and that will bump the realism up a notch again… so I’ll wait for that :stuck_out_tongue: (hint, hint… :blush:)


Really nice screenies. I would like to add that a nice shadowmask setup could work with mask 10.0 and mask shift of 2.0. Mask 10.0 is a bit coarse for 1080p, but looks really nice with mask shift.

As promised, i added deconvergence to the WinUaeMaskGlowAdvanced.fx shader. Works really nice and does not interfere with masks, on-pair with the current guest-advanced shaders. It’s quite simple to setup, a good start for example is horizontal red to 1.0 and horizontal blue to -1.0. Ofc. many combinations are possible.

The shaders for WinUAE and ReShade can be found here:


Great! You’re doing God’s work! :smiley: It makes a nice difference in homeopathic amounts like you suggested. The penny dropped just after about 30 mins of tweaking that in fact I also need to increase the sharpness in the shader to compensate, otherwise there will be too much blur going on…

Indeed, I tried it and I think I prefer it to my previous method now. The only problem is that it’s more prone to moire in the lightest shades when anything is added to it (extra brightness with colour shader, or even just bloom or halation). Somehow it’s much more sensitive than my previous mask 0 + slotmask method.

For the record, this is my shader chain:

CRT-A2080 -> WinUaeMaskGlowAdvanced -> WinUaeColor

I think the problem is, at least with brightness and colour adjustments in the colour shader, that it disturbs the masks & scanlines too much. I’m quite sure this would be the ideal chain:

Brightness/Contrast/Saturation (on the raw image) -> CRT-A02080 -> WinUaeMaskGlowAdvanced -> WinUaeColor (profile only)

And indeed, if I raise the brightness using the “Brightness” control in WinUAE’s Display panel, then there’s zero extra artifacts, which makes perfect sense. It’s a shame because I really like this new Brightness control… But like you said, we’d need a better multipass shader architecture in WinUAE to be able to move the ReShade stuff into WinUAE with total control over the order of stages.

Anyway, not complaining, I can still obtain good results with this workaround :slight_smile: