"CRT-on-CRT" Shader Presets + Custom LUT


#1

These presets are intended to be used on an actual CRT, not a modern display. I know that ‘sounds’ very redundant, but stick with me. The point of these being setup this way is to simulate 4 different video signals; RF, Composite, Component, and RGB. (I’m sure there are a number of inaccuracies, but feel free to point out where. I’d be happy to improve.)

In particular my CRT is a 31Khz VGA Monitor, and I’m running CRTResSwitch at 1920 super resolution. Because of that, taking screenshots of this is impossible as it removes the native scanlines and it’s all stretched out, and it’s all just is a mangled mess.

It also looks like dog **** on an LCD with these settings, so that doesn’t work either. Nor did taking pictures with my phone as the camera isn’t picking up the details… Honestly, the only way to really share this with people is to have them try it themselves.

These are using the following shaders:

  • LUT - Custom color configuration. I just never though emulated games’ colors looked right until now.
  • tvout-tweaks - used for some blurring and some composite/rf color changes.
  • image-adjustment - tweaks a number of small details like film grain, saturation, and brightness
  • interlacing - this is purely so 480p displays interlacing as scanlines are native on the CRT for 240p
  • crt-easymode - this is for the slot-mask. or w/e version mask it is. idk, looks good lol

While I can’t get the signals to show properly, here is what the color changes look like via the LUT.

These are only showing the LUT portion, not the CRT effects

You’ll need to save this LUT image as “Custom.png” and place it in ./shaders/reshade/shaders/LUT/

The comparisons seem a lot more subtle looking at them here, but you can really see the difference if you look at Samus. This actually undersells the color changes so much that I wonder if I should even keep these images here lol

So, with that out of the way, here’s the actual preset texts. These are all in .glsp format.

1 - RF

alias0 = ""
alias1 = ""
alias2 = ""
alias3 = ""
alias4 = ""
BRIGHT_BOOST = "1.000000"
DILATION = "0.000000"
enable_480i = "1.000000"
float_framebuffer0 = "false"
float_framebuffer1 = "false"
float_framebuffer2 = "false"
float_framebuffer3 = "false"
float_framebuffer4 = "false"
GAMMA_INPUT = "2.000000"
GAMMA_OUTPUT = "2.400000"
ia_B = "1.000000"
ia_black_level = "0.000000"
ia_BOTMASK = "0.000000"
ia_bright_boost = "0.000000"
ia_contrast = "1.000000"
ia_FLIP_HORZ = "0.000000"
ia_FLIP_VERT = "0.000000"
ia_G = "1.000000"
ia_GRAIN_STR = "12.000000"
ia_LMASK = "0.000000"
ia_luminance = "1.000000"
ia_monitor_gamma = "2.400000"
ia_overscan_percent_x = "0.000000"
ia_overscan_percent_y = "0.000000"
ia_R = "1.000000"
ia_RMASK = "0.000000"
ia_saturation = "0.800000"
ia_SHARPEN = "0.000000"
ia_target_gamma = "2.000000"
ia_TOPMASK = "0.000000"
ia_XPOS = "0.000000"
ia_YPOS = "0.000000"
ia_ZOOM = "1.000000"
LUT_Size = "32.000000"
MASK_DOT_HEIGHT = "1.000000"
MASK_DOT_WIDTH = "2.000000"
MASK_SIZE = "1.000000"
MASK_STAGGER = "3.000000"
MASK_STRENGTH = "1.000000"
mipmap_input0 = "false"
mipmap_input1 = "false"
mipmap_input2 = "false"
mipmap_input3 = "false"
mipmap_input4 = "false"
parameters = "LUT_Size;TVOUT_RESOLUTION;TVOUT_COMPOSITE_CONNECTION;TVOUT_TV_COLOR_LEVELS;TVOUT_RESOLUTION_Y;TVOUT_RESOLUTION_I;TVOUT_RESOLUTION_Q;ia_target_gamma;ia_monitor_gamma;ia_overscan_percent_x;ia_overscan_percent_y;ia_saturation;ia_contrast;ia_luminance;ia_black_level;ia_bright_boost;ia_R;ia_G;ia_B;ia_ZOOM;ia_XPOS;ia_YPOS;ia_TOPMASK;ia_BOTMASK;ia_LMASK;ia_RMASK;ia_GRAIN_STR;ia_SHARPEN;ia_FLIP_HORZ;ia_FLIP_VERT;percent;enable_480i;top_field_first;SHARPNESS_H;SHARPNESS_V;MASK_STRENGTH;MASK_DOT_WIDTH;MASK_DOT_HEIGHT;MASK_STAGGER;MASK_SIZE;SCANLINE_STRENGTH;SCANLINE_BEAM_WIDTH_MIN;SCANLINE_BEAM_WIDTH_MAX;SCANLINE_BRIGHT_MIN;SCANLINE_BRIGHT_MAX;SCANLINE_CUTOFF;GAMMA_INPUT;GAMMA_OUTPUT;BRIGHT_BOOST;DILATION"
percent = "0.000000"
SamplerLUT = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\Custom.png"
SamplerLUT_linear = "true"
SamplerLUT_mipmap = "false"
SamplerLUT_wrap_mode = "clamp_to_border"
SCANLINE_BEAM_WIDTH_MAX = "1.500000"
SCANLINE_BEAM_WIDTH_MIN = "1.500000"
SCANLINE_BRIGHT_MAX = "0.650000"
SCANLINE_BRIGHT_MIN = "0.350000"
SCANLINE_CUTOFF = "400.000000"
SCANLINE_STRENGTH = "0.000000"
shader0 = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\LUT.glsl"
shader1 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\tvout-tweaks.glsl"
shader2 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\image-adjustment.glsl"
shader3 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\interlacing.glsl"
shader4 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode.glsl"
shaders = "5"
SHARPNESS_H = "0.500000"
SHARPNESS_V = "1.000000"
srgb_framebuffer0 = "false"
srgb_framebuffer1 = "false"
srgb_framebuffer2 = "false"
srgb_framebuffer3 = "false"
srgb_framebuffer4 = "false"
textures = "SamplerLUT"
top_field_first = "0.000000"
TVOUT_COMPOSITE_CONNECTION = "1.000000"
TVOUT_RESOLUTION = "1024.000000"
TVOUT_RESOLUTION_I = "72.000000"
TVOUT_RESOLUTION_Q = "48.000000"
TVOUT_RESOLUTION_Y = "128.000000"
TVOUT_TV_COLOR_LEVELS = "1.000000"
wrap_mode0 = "clamp_to_border"
wrap_mode1 = "clamp_to_border"
wrap_mode2 = "clamp_to_border"
wrap_mode3 = "clamp_to_border"
wrap_mode4 = "clamp_to_border"

2 - Composite

alias0 = ""
alias1 = ""
alias2 = ""
alias3 = ""
alias4 = ""
BRIGHT_BOOST = "1.000000"
DILATION = "0.000000"
enable_480i = "1.000000"
float_framebuffer0 = "false"
float_framebuffer1 = "false"
float_framebuffer2 = "false"
float_framebuffer3 = "false"
float_framebuffer4 = "false"
GAMMA_INPUT = "2.000000"
GAMMA_OUTPUT = "2.400000"
ia_B = "1.000000"
ia_black_level = "0.000000"
ia_BOTMASK = "0.000000"
ia_bright_boost = "0.000000"
ia_contrast = "1.000000"
ia_FLIP_HORZ = "0.000000"
ia_FLIP_VERT = "0.000000"
ia_G = "1.000000"
ia_GRAIN_STR = "6.000000"
ia_LMASK = "0.000000"
ia_luminance = "1.000000"
ia_monitor_gamma = "2.400000"
ia_overscan_percent_x = "0.000000"
ia_overscan_percent_y = "0.000000"
ia_R = "1.000000"
ia_RMASK = "0.000000"
ia_saturation = "1.000000"
ia_SHARPEN = "0.000000"
ia_target_gamma = "2.000000"
ia_TOPMASK = "0.000000"
ia_XPOS = "0.000000"
ia_YPOS = "0.000000"
ia_ZOOM = "1.000000"
LUT_Size = "32.000000"
MASK_DOT_HEIGHT = "1.000000"
MASK_DOT_WIDTH = "2.000000"
MASK_SIZE = "1.000000"
MASK_STAGGER = "3.000000"
MASK_STRENGTH = "1.000000"
mipmap_input0 = "false"
mipmap_input1 = "false"
mipmap_input2 = "false"
mipmap_input3 = "false"
mipmap_input4 = "false"
parameters = "LUT_Size;TVOUT_RESOLUTION;TVOUT_COMPOSITE_CONNECTION;TVOUT_TV_COLOR_LEVELS;TVOUT_RESOLUTION_Y;TVOUT_RESOLUTION_I;TVOUT_RESOLUTION_Q;ia_target_gamma;ia_monitor_gamma;ia_overscan_percent_x;ia_overscan_percent_y;ia_saturation;ia_contrast;ia_luminance;ia_black_level;ia_bright_boost;ia_R;ia_G;ia_B;ia_ZOOM;ia_XPOS;ia_YPOS;ia_TOPMASK;ia_BOTMASK;ia_LMASK;ia_RMASK;ia_GRAIN_STR;ia_SHARPEN;ia_FLIP_HORZ;ia_FLIP_VERT;percent;enable_480i;top_field_first;SHARPNESS_H;SHARPNESS_V;MASK_STRENGTH;MASK_DOT_WIDTH;MASK_DOT_HEIGHT;MASK_STAGGER;MASK_SIZE;SCANLINE_STRENGTH;SCANLINE_BEAM_WIDTH_MIN;SCANLINE_BEAM_WIDTH_MAX;SCANLINE_BRIGHT_MIN;SCANLINE_BRIGHT_MAX;SCANLINE_CUTOFF;GAMMA_INPUT;GAMMA_OUTPUT;BRIGHT_BOOST;DILATION"
percent = "0.000000"
SamplerLUT = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\Custom.png"
SamplerLUT_linear = "true"
SamplerLUT_mipmap = "false"
SamplerLUT_wrap_mode = "clamp_to_border"
SCANLINE_BEAM_WIDTH_MAX = "1.500000"
SCANLINE_BEAM_WIDTH_MIN = "1.500000"
SCANLINE_BRIGHT_MAX = "0.650000"
SCANLINE_BRIGHT_MIN = "0.350000"
SCANLINE_CUTOFF = "400.000000"
SCANLINE_STRENGTH = "0.000000"
shader0 = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\LUT.glsl"
shader1 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\tvout-tweaks.glsl"
shader2 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\image-adjustment.glsl"
shader3 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\interlacing.glsl"
shader4 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode.glsl"
shaders = "5"
SHARPNESS_H = "0.500000"
SHARPNESS_V = "1.000000"
srgb_framebuffer0 = "false"
srgb_framebuffer1 = "false"
srgb_framebuffer2 = "false"
srgb_framebuffer3 = "false"
srgb_framebuffer4 = "false"
textures = "SamplerLUT"
top_field_first = "0.000000"
TVOUT_COMPOSITE_CONNECTION = "1.000000"
TVOUT_RESOLUTION = "1024.000000"
TVOUT_RESOLUTION_I = "72.000000"
TVOUT_RESOLUTION_Q = "48.000000"
TVOUT_RESOLUTION_Y = "160.000000"
TVOUT_TV_COLOR_LEVELS = "1.000000"
wrap_mode0 = "clamp_to_border"
wrap_mode1 = "clamp_to_border"
wrap_mode2 = "clamp_to_border"
wrap_mode3 = "clamp_to_border"
wrap_mode4 = "clamp_to_border"

3 - Component

alias0 = ""
alias1 = ""
alias2 = ""
alias3 = ""
alias4 = ""
BRIGHT_BOOST = "1.000000"
DILATION = "0.000000"
enable_480i = "1.000000"
float_framebuffer0 = "false"
float_framebuffer1 = "false"
float_framebuffer2 = "false"
float_framebuffer3 = "false"
float_framebuffer4 = "false"
GAMMA_INPUT = "2.000000"
GAMMA_OUTPUT = "2.400000"
ia_B = "1.000000"
ia_black_level = "0.000000"
ia_BOTMASK = "0.000000"
ia_bright_boost = "0.000000"
ia_contrast = "1.000000"
ia_FLIP_HORZ = "0.000000"
ia_FLIP_VERT = "0.000000"
ia_G = "1.000000"
ia_GRAIN_STR = "0.000000"
ia_LMASK = "0.000000"
ia_luminance = "1.000000"
ia_monitor_gamma = "2.400000"
ia_overscan_percent_x = "0.000000"
ia_overscan_percent_y = "0.000000"
ia_R = "1.000000"
ia_RMASK = "0.000000"
ia_saturation = "1.000000"
ia_SHARPEN = "0.000000"
ia_target_gamma = "2.000000"
ia_TOPMASK = "0.000000"
ia_XPOS = "0.000000"
ia_YPOS = "0.000000"
ia_ZOOM = "1.000000"
LUT_Size = "32.000000"
MASK_DOT_HEIGHT = "1.000000"
MASK_DOT_WIDTH = "2.000000"
MASK_SIZE = "1.000000"
MASK_STAGGER = "3.000000"
MASK_STRENGTH = "1.000000"
mipmap_input0 = "false"
mipmap_input1 = "false"
mipmap_input2 = "false"
mipmap_input3 = "false"
mipmap_input4 = "false"
parameters = "LUT_Size;TVOUT_RESOLUTION;TVOUT_COMPOSITE_CONNECTION;TVOUT_TV_COLOR_LEVELS;TVOUT_RESOLUTION_Y;TVOUT_RESOLUTION_I;TVOUT_RESOLUTION_Q;ia_target_gamma;ia_monitor_gamma;ia_overscan_percent_x;ia_overscan_percent_y;ia_saturation;ia_contrast;ia_luminance;ia_black_level;ia_bright_boost;ia_R;ia_G;ia_B;ia_ZOOM;ia_XPOS;ia_YPOS;ia_TOPMASK;ia_BOTMASK;ia_LMASK;ia_RMASK;ia_GRAIN_STR;ia_SHARPEN;ia_FLIP_HORZ;ia_FLIP_VERT;percent;enable_480i;top_field_first;SHARPNESS_H;SHARPNESS_V;MASK_STRENGTH;MASK_DOT_WIDTH;MASK_DOT_HEIGHT;MASK_STAGGER;MASK_SIZE;SCANLINE_STRENGTH;SCANLINE_BEAM_WIDTH_MIN;SCANLINE_BEAM_WIDTH_MAX;SCANLINE_BRIGHT_MIN;SCANLINE_BRIGHT_MAX;SCANLINE_CUTOFF;GAMMA_INPUT;GAMMA_OUTPUT;BRIGHT_BOOST;DILATION"
percent = "0.000000"
SamplerLUT = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\Custom.png"
SamplerLUT_linear = "true"
SamplerLUT_mipmap = "false"
SamplerLUT_wrap_mode = "clamp_to_border"
SCANLINE_BEAM_WIDTH_MAX = "1.500000"
SCANLINE_BEAM_WIDTH_MIN = "1.500000"
SCANLINE_BRIGHT_MAX = "0.650000"
SCANLINE_BRIGHT_MIN = "0.350000"
SCANLINE_CUTOFF = "400.000000"
SCANLINE_STRENGTH = "0.000000"
shader0 = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\LUT.glsl"
shader1 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\tvout-tweaks.glsl"
shader2 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\image-adjustment.glsl"
shader3 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\interlacing.glsl"
shader4 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode.glsl"
shaders = "5"
SHARPNESS_H = "0.500000"
SHARPNESS_V = "1.000000"
srgb_framebuffer0 = "false"
srgb_framebuffer1 = "false"
srgb_framebuffer2 = "false"
srgb_framebuffer3 = "false"
srgb_framebuffer4 = "false"
textures = "SamplerLUT"
top_field_first = "0.000000"
TVOUT_COMPOSITE_CONNECTION = "1.000000"
TVOUT_RESOLUTION = "1024.000000"
TVOUT_RESOLUTION_I = "256.000000"
TVOUT_RESOLUTION_Q = "256.000000"
TVOUT_RESOLUTION_Y = "160.000000"
TVOUT_TV_COLOR_LEVELS = "1.000000"
wrap_mode0 = "clamp_to_border"
wrap_mode1 = "clamp_to_border"
wrap_mode2 = "clamp_to_border"
wrap_mode3 = "clamp_to_border"
wrap_mode4 = "clamp_to_border"

4 - RGB

alias0 = ""
alias1 = ""
alias2 = ""
alias3 = ""
alias4 = ""
BRIGHT_BOOST = "1.000000"
DILATION = "0.000000"
enable_480i = "1.000000"
float_framebuffer0 = "false"
float_framebuffer1 = "false"
float_framebuffer2 = "false"
float_framebuffer3 = "false"
float_framebuffer4 = "false"
GAMMA_INPUT = "2.000000"
GAMMA_OUTPUT = "2.400000"
ia_B = "1.000000"
ia_black_level = "0.000000"
ia_BOTMASK = "0.000000"
ia_bright_boost = "0.000000"
ia_contrast = "1.000000"
ia_FLIP_HORZ = "0.000000"
ia_FLIP_VERT = "0.000000"
ia_G = "1.000000"
ia_GRAIN_STR = "0.000000"
ia_LMASK = "0.000000"
ia_luminance = "1.000000"
ia_monitor_gamma = "2.400000"
ia_overscan_percent_x = "0.000000"
ia_overscan_percent_y = "0.000000"
ia_R = "1.000000"
ia_RMASK = "0.000000"
ia_saturation = "1.000000"
ia_SHARPEN = "0.000000"
ia_target_gamma = "2.000000"
ia_TOPMASK = "0.000000"
ia_XPOS = "0.000000"
ia_YPOS = "0.000000"
ia_ZOOM = "1.000000"
LUT_Size = "32.000000"
MASK_DOT_HEIGHT = "1.000000"
MASK_DOT_WIDTH = "2.000000"
MASK_SIZE = "1.000000"
MASK_STAGGER = "3.000000"
MASK_STRENGTH = "1.000000"
mipmap_input0 = "false"
mipmap_input1 = "false"
mipmap_input2 = "false"
mipmap_input3 = "false"
mipmap_input4 = "false"
parameters = "LUT_Size;TVOUT_RESOLUTION;TVOUT_COMPOSITE_CONNECTION;TVOUT_TV_COLOR_LEVELS;TVOUT_RESOLUTION_Y;TVOUT_RESOLUTION_I;TVOUT_RESOLUTION_Q;ia_target_gamma;ia_monitor_gamma;ia_overscan_percent_x;ia_overscan_percent_y;ia_saturation;ia_contrast;ia_luminance;ia_black_level;ia_bright_boost;ia_R;ia_G;ia_B;ia_ZOOM;ia_XPOS;ia_YPOS;ia_TOPMASK;ia_BOTMASK;ia_LMASK;ia_RMASK;ia_GRAIN_STR;ia_SHARPEN;ia_FLIP_HORZ;ia_FLIP_VERT;percent;enable_480i;top_field_first;SHARPNESS_H;SHARPNESS_V;MASK_STRENGTH;MASK_DOT_WIDTH;MASK_DOT_HEIGHT;MASK_STAGGER;MASK_SIZE;SCANLINE_STRENGTH;SCANLINE_BEAM_WIDTH_MIN;SCANLINE_BEAM_WIDTH_MAX;SCANLINE_BRIGHT_MIN;SCANLINE_BRIGHT_MAX;SCANLINE_CUTOFF;GAMMA_INPUT;GAMMA_OUTPUT;BRIGHT_BOOST;DILATION"
percent = "0.000000"
SamplerLUT = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\Custom.png"
SamplerLUT_linear = "true"
SamplerLUT_mipmap = "false"
SamplerLUT_wrap_mode = "clamp_to_border"
SCANLINE_BEAM_WIDTH_MAX = "1.500000"
SCANLINE_BEAM_WIDTH_MIN = "1.500000"
SCANLINE_BRIGHT_MAX = "0.650000"
SCANLINE_BRIGHT_MIN = "0.350000"
SCANLINE_CUTOFF = "400.000000"
SCANLINE_STRENGTH = "0.000000"
shader0 = "W:\Emulators\RetroArch\shaders\shaders_glsl\reshade\shaders\LUT\LUT.glsl"
shader1 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\tvout-tweaks.glsl"
shader2 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\image-adjustment.glsl"
shader3 = "W:\Emulators\RetroArch\shaders\shaders_glsl\misc\interlacing.glsl"
shader4 = "W:\Emulators\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode.glsl"
shaders = "5"
SHARPNESS_H = "0.500000"
SHARPNESS_V = "1.000000"
srgb_framebuffer0 = "false"
srgb_framebuffer1 = "false"
srgb_framebuffer2 = "false"
srgb_framebuffer3 = "false"
srgb_framebuffer4 = "false"
textures = "SamplerLUT"
top_field_first = "0.000000"
TVOUT_COMPOSITE_CONNECTION = "0.000000"
TVOUT_RESOLUTION = "1024.000000"
TVOUT_RESOLUTION_I = "256.000000"
TVOUT_RESOLUTION_Q = "256.000000"
TVOUT_RESOLUTION_Y = "160.000000"
TVOUT_TV_COLOR_LEVELS = "1.000000"
wrap_mode0 = "clamp_to_border"
wrap_mode1 = "clamp_to_border"
wrap_mode2 = "clamp_to_border"
wrap_mode3 = "clamp_to_border"
wrap_mode4 = "clamp_to_border"

I’ve not shared presets before, so I’m sure I’ve ****ed up something here hahaha. Happy for any input on how I can clean this up, or etc.


#2

I don’t personally have a CRT to test these on, but I’m most certainly checking out that LUT because that $#it looks amazing, even if those pictures are underselling it.

Also the flower’s center and the water in the sonic shots are pretty noticable on my phone. so maybe keep the pics?


#3

Haha, thanks man. That’s really nice to hear. I spent kind of an absurd amount of time so far tweaking and retweaking the colors. It’s hard to see here, but Sonic has a very vibrant blue that just looks amazing in motion.

If you find any games with a particular issue though, def let me know. For instance I had to fix the brightness of it while playing Super Metroid 'cause it originally made the game way too dark.


#4

No problem, I feel good work should get appreciated. I thought Sonic’s colors were slightly different, but didn’t know if it was my eyes playing tricks because of the other blues being different.

I’ll try to test out some games this weekend and see if I have any issues, if I do I’ll post some screenshots and info to let you know.

Hope this thread gets some love.


#5

Wrong paths like “W:\Emulators” in configs.


#6

I didn’t realize it uses absolute paths. You’ll probably have to switch it to whatever path your shader directory is at.


#7

Hello, i was only visiting the forum as a guest for few weeks,i just signed up to thank you for the crt shader, also i have few questions.

Im using the same setup as you, a 31khz vga pc monitor, and 1920 super resolution

your configs make my screen very dark. do you know of anytricks to get a 31khz look as close as possbile to a 15khz