Just a little update. Scanline jitter is fixed in glcore with latest AMD drivers.
Just raised a PR with the new “Black Lightening” parameter. The default setting of 1.0 keeps the original appearance.
@Squalo That’s interesting and confusing at the same time. Because the only thing the jitter code does is alternating the texture coordinate over time depending on the frame rate. But good to know that it now works, at least for the glcore (and vulkan) renderer.
Yes it is. I’ve been testing things thoroughly to be sure that my analysis/review was fair and consistent. Another weird little spin is that the effect is less obvious in glcore than vulkan. I. E. you have to lower the beam filter parameter to achieve the same “jitter intensity”. It’s working great nonetheless with the new drivers. Again, it would be nice if more users tested it, but the forum seems a little quiet these days.
hi, i’ve looked and its nice.
do you think is possible to incorporate ntsc rainbow effect on future ?
i mean for megadrive or nes/snes
I’m not exactly sure how the “rainbow” effect is defined. But you can set the following parameters and get something similar; the rainbow lines go diagonal though.
NTSC_PROFILE = 5.0
NTSC_QUALITY = 3.0
NTSC_PROFILE = 5.0 increases the fringing and artifacting (the slider only allows a maximum of 3.0) and NTSC_QUALITY = 3.0 makes use of 3-phase modulation with field merge (which basically deactivates the flickering).
I checked but didnt give something remotely close. Diagonal rainbow is for NES, though.
That’s a small text file where i saved several original Genesis Rainbow records, in case can be useful to see how the effect does.
Unless you referred to something else as “not sure how rainbow is defined”.
Still, look very good with dithering alone
I’ve been checking this out recently and it’s quickly becoming one of my faves; due to the simplicity of configuration and especially the way hallation looks - however, it seems that the shader applies a general yellow tint which is only mitigated with the colour setting so much. Is this intentional, can it be mitigated entirely?
Thanks for your work!
That’s nes/snes NTSC phase right there with diagonal lines. It’s already discussed many times before how rainbow is created and already implemented in other shaders, like e.g. crt-consumer-1w-XL i wrote or ntsc-blastem in “ntsc” folder.
Thanks for checking it out, glad you like it.
I think the yellow tint comes from the “Brightness Overlow”, which increases the brightness beyond full saturation, e.g. a full saturated red become orange. Another factor could be the “Mask Color Bleed”, where bright subpixel bleed into neighbor subpixel and slightly change the overall hue if the whole pixel.
Can you confirm the yellow tint goes away when decreasing these two settings? Maybe I need to tinker around with the factors for each color channel, so that the overall hue is not changed too much.
Ahh - it’s brightness overflow that is causing it. Reducing this down to zero gives almost exactly the same colours as the raw output.
Reducing Mask colour bleed actually makes it worse; increasing it gives brighter pixels with deeper saturation; removing the yellow tint a bit.
As an aside, I would throw my hat in the ‘sharper NTSC’ ring. Love the colours and the waterfall effects in Sonic but the rest is so blurry that my eyes can’t handle it! EDIT: A general sharpness scale or guidance on sharpness would be great actually - finding on consoles like PS1/2 where increasing scale helps with text legibility, there’s a bit of blur inherent in moving to +0.5 or +1.
All tests performed at 4k on an LG BX OLED; Vulkan in Bazzite (Linux)
Yeah at first I had issues with my hues too (particularly red being pushed to yellow indeed), until I figured out what overflow does. It’s another of those unique yah traits that you won’t find anywhere else. I generally would recommend a value of 0.5 for it.
Thanks, I’ll give that a try! Do you have a real set to compare Yah against? It’s far and away becoming my favourite, it’s so easy to get good results.
@Jezze would you be able to advise on what to prepend or append to Yah single-pass to add halation? I’m trying to keep resources under control but the halation is sorely missed in single-pass.
Thanks again, and a Merry Christmas/Happy Holidays to you all 
My crts are currently in storage, the poor things. I just don’t need them anymore. This is why 
Regarding halation, adding it yourself is basically going to create a preset that is pretty much yah multipass minus ntsc. This is where halation comes from
shader5 = "shaders/crt-yah/blur-horizontal.slang"
filter_linear5 = true // required: sample lut-output linear
shader6 = "shaders/crt-yah/blur-vertical.slang"
filter_linear6 = true
It’s the same tried and true method that other shaders use, afaik. If your device is really struggling with the blur passes, try prepending Hyllian’s dilation (in the “warp” folder). It’s not the same but it might be faster.
You can also run the shader at lower resolutions, makes a big difference with older machines and still looks great. Try 1920x1080 (easy way out) and if that’s still a bit slow, 1280x960 and 1194x896 are nice 4:3 integer vertical multiples of 240 and 224 respectively.
What are the chances of a Reshade version of Yah? If I had any idea how to code I’d try it myself!
A new version is on the way addressing some of your feedback.
NTSC changes:
- Renamed “Quality” parameter to “Chroma Phase” (“Field Merge” has been removed, see new “Jitter” parameter)
- Added new “Chroma Shift” parameter, which enables the rainbow effect
@ynnad4: use “Two-Phase” and set “Chroma Shift” to -1 or 1 - Reduced blurriness by disabling the bi-linear texture filtering of the upscale pass. If you have created your own complex preset, you have to set
filter_linearforntsc-pass1tofalsemanually.
@colourofsound: in addition you can set the “Beam Filter” parameter into the “Blocky” direction (e.g. -0.75) to get a sharper NTSC appearance - Added a new “Jitter” parameter, which let you disable the jitter effect. The old “Field Merge” setting of Three-Phase basically did that before, now you can do the same for Two-Phase as well.
Preset (crt/shaders/crt-yah/presets) changes:
- Reduced Deconverge, Phosphor and Halation effect across all presets slightly
- Adjusted Contrast and Brightness across all presets to be less dark
- Added pure-NTSC preset
- Added pure-Scanlines preset based on @Squalo’s configuration (not exactly the same, though)
Other changes:
- Added new “Screen Frequency” parameter to select between 30 and 60 Hz affecting the speed of the NTSC and Scanline Jitter effects.
@colourofsound
Regarding a Reshade version of CRT-Yah, I have not looked into it yet. The chances of porting it myself depend on how much of the code I have to rewrite. 
Epic work! Very excited about a potential Reshade port 
NTSC is still a bit blurry for me it has to be said; but I’m not too bothered about using that setting.
Would you mind explaining the sub pixel settings? On my LG OLED setting 2 looks pretty good and it’d be good to understand why 
Not sure what else I could do to further reduce the blurriness of the NTSC effect. The recent changes should have eliminated the blurriness in the vertical (y) direction. But as for the horizontal (x) direction, I’d say that’s just the nature of the effect, esp. for the two-phase option.
Regarding the sub-pixel mask setting: 2-MG stands for magenta/green. So the sub-pixel mask consists of only two alternating colors instead of three as with RGB. This is actually nothing special; other shaders also offer this type of sub-pixel mask. Magenta/green usually appears more uniform, because the brightness between magenta and green is very similar, unlike the brightness between RGB.
However, a special feature of this shader compared to most others is the scaling of the sub-pixel mask based on the screen resolution. For example, at 1080p, the sub-pixel size is 1, while at 2160p (4K), the sub-pixel size is automatically scaled to 2.
Long story short, I don’t know why magenta/green works better for your LG OLED. The interaction of the actual sup-pixel grid of your display and the simulated sub-pixel mask can be quite complex and also can lead to artifacts, esp. with a sub-pixel size of 1.
I was hoping this would be common knowledge by now but LG 4K OLED TVs before the G5 use RWBG subpixel layout, therefore the only CRT Shader Subpixel Mask that would align properly and evenly is RRBBGGX (and possibly XRRBBGG but I haven’t tested that on any OLED TV). Regular RGB or BGR Subpixel Masks would not look accurate at least close up to the screen because of this.
This shader looks really good. Is there a way to turn off the flickering though?
You can turn off the scanlines jitter and also the jitter of the NTSC effect when activated:
- set “Scanlines > Offset” to 0
- set “NTSC > Jitter” to 0
There is also some animated noise you can disable:
- set “CRT > Noise” to 0

