New CRT shader from Guest + CRT Guest Advanced updates

You can get a pretty good S-video approximation if you set resolution scaling to around 1.20 or so, just enough to break the dithering in Sonic, along with maybe some adaptive sharpness.

Interestingly, I just checked the fog in Silent Hill, and it’s still blended- I think it may have been designed so that it would blend even over a slightly lossy signal. So maybe S-video is fine for PSX/N64, now I want to revise my earlier statement… I still maintain that RGB is too sharp for these systems, though.

2 Likes

btw, isnt S-video luma = Component luma? so the difference between the two should be in chroma scale in shader

dont know how RGB different from Component in sharping but I think all analog connections even the late VGA has some form of lossy signal

2 Likes

I think there’s a little more to it in the shader; dithering is still blended even if you raise/lower chroma scale all the way

EDIT: ChatGPT gave me this. Does this mean resolution scaling up to 1.33 is “accurate” for S-video? (330 vs 440 lines)

  • Composite video (NTSC):
  • Luminance bandwidth: The luminance (brightness) signal has a bandwidth of about 4.2 MHz. This bandwidth supports approximately 330 lines of horizontal resolution.
  • Artifacts: The luminance and chrominance (color) signals are combined into a single signal, and their frequencies overlap. This can cause visual interference, such as “dot crawl” and “rainbow artifacts,” which further reduce the effective image sharpness.
  • S-Video (NTSC):
  • Luminance bandwidth: With the luminance and chrominance signals separated, S-Video’s luminance channel has a higher effective bandwidth, typically up to 5–6 MHz or higher. This separation eliminates interference and can produce up to 440 lines of horizontal resolution, depending on the source.
2 Likes

dont know if this bug happen in the last update but seems with d3d12 and CRT-Guest-Advanced-NTSC the output will be dark! but CRT-Guest-Advanced one work fine!

1 Like

New Release Version (2025-09-16-r1):

Notable changes:

  • ntcs: small optimizations and cleanups
  • ntsc: mixed phase mode 5 added, preserves chromatic effects of 3-phase mode better
  • ntsc: number of TAPS increased to 48, viable for 2-phase and chroma bleeding
  • ntsc: smart dithering deblur mode added, doesn’t deblur blended dithering ntsc: Speedup with increased internal Resolution options added, removes ntsc horizontal shader bottleneck greatly, can be also used with pre-scalers for performance reasons. Total speedup can be up-to-2x. A word of wisdom, some edge-smoothing presets scale to viewport resolutions, which is a great deal especially for guest-advanced-ntsc. Now the speedup mode can be used, there are also included faster pre-scaler presets with the shader pack.
  • ntsc: speedup mode is not neccessarily cool for ordinary resolution usages, just to mention it.
  • ntsc: some testing and feedback is welcome.
  • after some consideration ntsc-pass3-features are enabled with “speedup” mode and source resolutions up-to 800p (not! display resolutions). Previously, pass3 was disabled with “speedup”.
  • UPDATE: fixed D3D11 and D3D12 compatibility, some testing is welcome! (thanks @Jobima for reporting).

Download link:

https://mega.nz/file/YlgVFSyb#4ayJCbsp9UNgQ083Uice4mpwDgvmmG391mdgqIj3tHQ

10 Likes

I think the “update” works better than the “old” for updates.

2 Likes

Involved NTSC shaders originally also “mentioned” possible outputing to 6x original buffer sizes instead of default 4x. The 6x size is also a technical shader choice, since buffer size halves later on and we still get an integer value (3x original buffer width).

The downside of this is that the “horizontal resolution increase” sits at fixed 50%, i guess the default 4x scaling prevailed with a good reason.

But the situation still makes good sense and later the ntsc-adaptive shaders were enriched by the ntsc resolution scaling feature which use the 4x buffer width increase and make use of linear sampling with a major advantage, that the feature can be controlled with shader parameters.

Sometimes there are “nothing but advantages” when an appropriate connection type is emulated, OTOH systems like MD and Saturn probably like settings, which dissolve dithering patterns.

2 Likes

To continue the dabate about using the benefits of increased internal resolutions, which certain cores provide…yeah, the default settings are not the best.

What users see when they load up the shader preset:

What is IMHO a good use case of increased internal resolution and texture filtering:

4 Likes

I dont know if it’s related, but some presets I used with “NTSC phase” set to “Mixed” appears black here with Vulkan, but it’s working when I swith it to “Auto”.

1 Like

Looks great. Such a great tool to revisit those classics. Thanks a lot for your work!

2 Likes

I gotta question. What’s the good internal resolution for RF on consoles before the 5th gen?

1 Like

I couldn’t reproduce on my main rig, but it’s neccessary to make sure you got the latest updated shaders installed, also copied into the /shaders_slang/crt folder, if some preset relies on it. What could also help is if you name your gpu brand and post the saved preset, so i could take a look.

This one is a bit tricky, since emulated consoles before 5th gen usually (beside some SNES modes and Amiga stuff…if we don’t make edge-smoothing scalers count) didn’t have this direct “internal resolution” ehnancement.

If the “ntsc” shader parameter is meant, then you can leave it at 1.0-1.2 and add some more artifacting and fringing. RF had it’s quirks, but with decent/normal cables and TV model the experience was nice. If you use 2-phase in some way (MD…) you need a decent ammount of taps for the color bleed effect.

2 Likes

No it’s not the latest version, sorry, and the issue is not in Vulkan (Mixed is working) but in GLCore… The System here is up to date using only the online updater and apt in Pop!_OS 22.04, the GPU is a Radeon RX Vega. It’s a long shot I post here reading Jobima’s post, if it was not the place, please disregard. If you think it’s worth testing I’ll update to 2025-09-16-r1.

1 Like

It’s a good upgrade, with some fixes, mostly new functionalities and related parameters were added, which means that existing presets looks are still intact.

The main reason 2-phase color bleeding is now working differently internaly is that the mentioned former uses 130 texture lookups, a horrific number for some systems and resolution combos. :wink:

1 Like

I can reproduce the issue here with 2025-09-16-r1. I’ve also checked on an Arch install on the same system (with Wayland - KDE Plasma) and it’s the same. Only on GLCore, Vulkan driver is fine (except for the current lag issues with Wayland).

Also quickly tested on the same system with Win10 the issue is NOT present, neither on GLCore nor Vulkan or DX12.

Here’s the test with the Advanced-NTSC preset, and an about of my specs:

1 Like

Hmm…the current version should have a parameter range from 1.0 to 5.0, older had 1.0 to 4.0. When the parameter range for NTSC Phase is 1.0 to 5.0, then the version matchess 2025-09-16-r1.

1 Like

Oops my bad, copied the update in the old glsl folder… XD Thanks I dont have the issue with the update now!

2 Likes

New Release Version (2025-09-21-r1):

Notable changes:

  • some smaller optimizations
  • some functionality bugfixes
  • NTSC Deblur paramater rename due to duplication conflicts with some other presets in repository

Download link:

https://mega.nz/file/Bgw3TLaD#FCuJzWUt6jhi-0BqBPA-V88IG9bqr9lVtRS0GjNEngs

12 Likes

Just to be clear, I was not saying to replace the current manual options, just to have an option e.g. for aperture that would automatically switch between the existing options / select an appropriate configuration based on the current output resolution so that switching to window mode or moving from a 4k screen to 1440 would “break” the image.

@Cyber switching shader presets for different resolutions is the same as manually changing the mask option to fit the current resolution.

2 Likes

Megatron does something like this, but it’s manual. Seems like not much code would be needed to make it automatic?

1 Like