HSM Mega Bezel Reflection Shader! - Feedback and Updates

There might be, this is the Guest Dr Venom shader, so you could look into that shader about how to reduce the scanlines, There is a readme in the guest folder explaining the settings you could take a look at.

1 Like

Latest Mega Bezel Reflection shader update is up!

Changes:

  • Automatic switching to vertical aspect/scanlines based on content. Thanks @GemaH for the suggestion!
  • The default is to automatically switch both aspect ratio and scanline direction, but both are adjustable to specifically set aspect ratio or scanline direction
  • This causes a little bit of an issue of the reflection clipping bounds not matching exactly the vertical bezel, but I will fix this after I improve the mapping of the reflection all around the tube so we can get the reflection faded out nearer the edges. It is of course still possible to just copy the preset and change the reflection clipping values.
4 Likes

I downloaded the package in the first post and the guest folder is missing, did I miss it?

1 Like

You can just take the CRT folder in the pack and dump it into the Slang shaders CRT folder.

So copy the CRT folder in the pack, then go to the slang shaders folder in retroarch open it, then paste the CRT folder you copied, tell it yes you want to overwrite or w/e.

I imagine it’s not included to decrease file size, decrease confusion and having multiple copies of guests shader if people just want to add it with the rest of the retroarchs shaders.

Got it to work

Is there any way to change the position of the output? I have a PVM overlay and I thought it’d be cool to have a shader to match.

2 Likes

Might be able to to change in retroarchs video settings… Not really sure.

That would look pretty cool if you got it aligned right.

Completely unrelated, but have you made themes on the retropie forums?

Not yet but this seems like something that’s needed, so I’ll probably add it sometime soon.

1 Like

Yeah, seems like it may be needed, I kinda like image-adjustment for that stuff personally.

Yep, same Lilbud as the retropie forum

1 Like

I think I got it, I’m definitely going to make a better looking overlay as the current one isn’t really all that good. I can probably get a little nicer looking frame.

2 Likes

I have one more suggestion, should be an easy one.

Having the “image-adjustment” shader (from the “misc” folder) as the first shader in the chain, you can apply it’s effects in the whole shader. The only effect i’m interested is it’s brightness boost. unlike similar options in the other shaders, this one also increases the scanline brightness in the black color. This way you can have visible scanlines in areas that don’t have graphics like this:

bublbobl-191222-133520

You can see in the empty, black area, the scanlines are slightly visible. This is how my real CRT arcade monitor looks like. And the more you increase the brightness, the more visible the scanlines become. Without this you just get a black area without scanlines and no option can make them appear.

Adding the image-adjustment shader in the chain is a bit of a pain because in order for this effect to work it has to be the first one. And because there are 17 shaders in total you have to manually change all the numbers in the shader preset cfg file, one by one (each shader has a few numbers to change). RetroArch doesn’t let you add a shader slot as the first one or any other spot, it always adds extra slots as the last one :frowning:

3 Likes

Did the x/y modifiers work correctly with image-adjustment when you did this?

The scanline thing is honestly REALLY COOL to know, so thanks for that!

I think so. I didn’t notice anything out of place in the end result. The only issue is that by increasing the brightness slightly (just 5%) to make the scanlines appear, the bezel also gets a bit brighter but you can easily fix this since it has it’s own separate brightness control.

You can try my preset and see if you can find any other errors

shaders = "18"
shader0 = "../shaders_slang/misc/image-adjustment.slang"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "../shaders_slang/crt/shaders/guest/lut/lut.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "../shaders_slang/crt/shaders/guest/color-profiles.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "../shaders_slang/crt/shaders/guest/d65-d50.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "WhitePointPass"
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "../shaders_slang/crt/shaders/guest/afterglow.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "AfterglowPass"
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "../shaders_slang/crt/shaders/guest/avg-lum0.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "../shaders_slang/crt/shaders/guest/avg-lum.slang"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "true"
alias6 = "AvgLumPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "../shaders_slang/crt/shaders/guest/linearize.slang"
filter_linear7 = "false"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "LinearizePass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "../shaders_slang/crt/shaders/guest/blur_horiz.slang"
filter_linear8 = "false"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "../shaders_slang/crt/shaders/guest/blur_vert.slang"
filter_linear9 = "false"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "../shaders_slang/crt/shaders/hyperspacemadness/crt-guest-dr-venom-with-scaling.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = "BR_BlurScanlinesInputPass"
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-mega-bezel-overlay.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "BR_CrtWithOverlayPass"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
shader12 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-blur-scanlines.slang"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = "BR_EdgeBleedInputPass"
float_framebuffer12 = "false"
srgb_framebuffer12 = "false"
shader13 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-bleed-screen-edges.slang"
filter_linear13 = "false"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "false"
srgb_framebuffer13 = "false"
scale_type_x13 = "source"
scale_x13 = "1.000000"
scale_type_y13 = "source"
scale_y13 = "1.000000"
shader14 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-reduce-resolution.slang"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "true"
alias14 = ""
float_framebuffer14 = "false"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "480"
scale_type_y14 = "absolute"
scale_y14 = "270"
shader15 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-blur-horiz.slang"
filter_linear15 = "false"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = ""
float_framebuffer15 = "true"
srgb_framebuffer15 = "false"
scale_type_x15 = "source"
scale_x15 = "1.000000"
scale_type_y15 = "source"
scale_y15 = "1.000000"
shader16 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-blur-vert.slang"
filter_linear16 = "false"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = "BR_ReflectionBlurredInputPass"
float_framebuffer16 = "true"
srgb_framebuffer16 = "false"
scale_type_x16 = "source"
scale_x16 = "1.000000"
scale_type_y16 = "source"
scale_y16 = "1.000000"
shader17 = "../shaders_slang/crt/shaders/hyperspacemadness/hsm-mega-bezel-reflection.slang"
filter_linear17 = "true"
wrap_mode17 = "clamp_to_border"
mipmap_input17 = "false"
alias17 = ""
float_framebuffer17 = "false"
srgb_framebuffer17 = "false"
scale_type_x17 = "viewport"
scale_x17 = "1.000000"
scale_type_y17 = "viewport"
scale_y17 = "1.000000"
parameters = "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;TNTC;CP;CS;WP;wp_saturation;SW;AR;PR;AG;PG;AB;PB;sat;STH;GAMMA_INPUT;TAPSH;GLOW_FALLOFF_H;TAPSV;GLOW_FALLOFF_V;scl_title;scl_aspect_ratio_width;scl_aspect_ratio_height;scl_vertical_scanlines;scl_use_integer_scale;scl_int_scale_border_min_height;scl_crop_overscan_top;scl_crop_overscan_bottom;scl_crop_overscan_left;scl_crop_overscan_right;scl_int_scale_multiple_offset;scl_non_integer_scale;scl_scale_offset;scl_curvature_x;scl_curvature_y;scl_rounded_corner_size;scl_outer_edge_sharpness;scl_black_edge_height;scl_show_placement_guide;guest_venom_title;glow;IOS;OS;BLOOM;brightboost;gsl;scanline1;scanline2;beam_min;beam_max;beam_size;h_sharp;s_sharp;h_smart;shadowMask;masksize;vertmask;slotmask;slotwidth;double_slot;mcut;maskDark;maskLight;CGWG;GTW;gamma_out;ov_title;ov_show_overlay;ov_opacity;ov_brightness;ov_blend_mode;ov_scale_mode;ov_overlay_texture_res_x;ov_overlay_texture_res_y;ov_screen_height_in_texture;ov_scale_offset_x;ov_scale_offset_y;br_blur_title;br_blur_scanlines_num_samples;br_bleed_edge_stretch;reduce_resolution_lod_level_offset;br_blur_num_samples;br_blur_falloff;br_title;br_reflection_on;br_brightness;br_gamma_adjust;br_contrast;br_saturation;br_outer_blur_offset;br_cutoff_width;br_cutoff_height;br_cutoff_inner_sharpness;br_cutoff_outer_sharpness;br_cutoff_curvature;br_fade_amount;br_fade_speed;br_fade_width;br_fade_height;br_corner_fade_distance;br_corner_fade_speed"
ia_target_gamma = "2.200000"
ia_monitor_gamma = "2.200000"
ia_overscan_percent_x = "0.000000"
ia_overscan_percent_y = "0.000000"
ia_saturation = "1.000000"
ia_contrast = "1.000000"
ia_luminance = "1.000000"
ia_black_level = "0.010000"
ia_bright_boost = "0.050000"
ia_R = "1.000000"
ia_G = "1.000000"
ia_B = "1.000000"
ia_ZOOM = "1.000000"
ia_XPOS = "0.000000"
ia_YPOS = "0.000000"
ia_TOPMASK = "0.000000"
ia_BOTMASK = "0.000000"
ia_LMASK = "0.000000"
ia_RMASK = "0.000000"
ia_GRAIN_STR = "0.000000"
ia_SHARPEN = "0.000000"
ia_FLIP_HORZ = "0.000000"
ia_FLIP_VERT = "0.000000"
TNTC = "0.000000"
CP = "0.000000"
CS = "0.000000"
WP = "0.000000"
wp_saturation = "1.000000"
SW = "0.000000"
AR = "0.070000"
PR = "0.050000"
AG = "0.070000"
PG = "0.050000"
AB = "0.070000"
PB = "0.050000"
sat = "0.100000"
STH = "0.700000"
GAMMA_INPUT = "2.400000"
TAPSH = "2.000000"
GLOW_FALLOFF_H = "0.300000"
TAPSV = "2.000000"
GLOW_FALLOFF_V = "0.300000"
scl_title = "0.000000"
scl_aspect_ratio_width = "40.000000"
scl_aspect_ratio_height = "30.000000"
scl_vertical_scanlines = "0.000000"
scl_use_integer_scale = "0.000000"
scl_int_scale_border_min_height = "1.000000"
scl_crop_overscan_top = "0.000000"
scl_crop_overscan_bottom = "0.000000"
scl_crop_overscan_left = "0.000000"
scl_crop_overscan_right = "0.000000"
scl_int_scale_multiple_offset = "0.000000"
scl_non_integer_scale = "90.000000"
scl_scale_offset = "0.000000"
scl_curvature_x = "2.000000"
scl_curvature_y = "3.000000"
scl_rounded_corner_size = "10.000000"
scl_outer_edge_sharpness = "400.000000"
scl_black_edge_height = "0.900000"
scl_show_placement_guide = "0.000000"
guest_venom_title = "0.000000"
glow = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "1.350000"
gsl = "0.000000"
scanline1 = "8.000000"
scanline2 = "5.000000"
beam_min = "1.400001"
beam_max = "0.850000"
beam_size = "0.650000"
h_sharp = "3.500000"
s_sharp = "0.050000"
h_smart = "0.000000"
shadowMask = "3.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
mcut = "0.200000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.300000"
GTW = "1.050000"
gamma_out = "2.400000"
ov_title = "0.000000"
ov_show_overlay = "1.000000"
ov_opacity = "1.000000"
ov_brightness = "0.700000"
ov_blend_mode = "0.000000"
ov_scale_mode = "0.000000"
ov_overlay_texture_res_x = "5040.000000"
ov_overlay_texture_res_y = "2880.000000"
ov_screen_height_in_texture = "70.500000"
ov_scale_offset_x = "0.000000"
ov_scale_offset_y = "0.000000"
br_blur_title = "0.000000"
br_blur_scanlines_num_samples = "4.000000"
br_bleed_edge_stretch = "1.000000"
reduce_resolution_lod_level_offset = "0.000000"
br_blur_num_samples = "8.000000"
br_blur_falloff = "0.190000"
br_title = "0.000000"
br_reflection_on = "1.000000"
br_brightness = "0.850000"
br_gamma_adjust = "1.500000"
br_contrast = "1.500000"
br_saturation = "1.000000"
br_outer_blur_offset = "10.000000"
br_cutoff_width = "7.900000"
br_cutoff_height = "4.500000"
br_cutoff_inner_sharpness = "60.000000"
br_cutoff_outer_sharpness = "60.000000"
br_cutoff_curvature = "0.000000"
br_fade_amount = "0.000000"
br_fade_speed = "70.000000"
br_fade_width = "3.800000"
br_fade_height = "2.800000"
br_corner_fade_distance = "0.800000"
br_corner_fade_speed = "2.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;OverlayImage"
SamplerLUT1 = "../shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "../shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "../shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
OverlayImage = "../shaders_slang/crt/shaders/hyperspacemadness/textures/_Horizontal_224x9_ScreenH-70.7%_5040x2880_MultiAspect.png"
OverlayImage_wrap_mode = "clamp_to_border"
OverlayImage_mipmap = "false"
1 Like

I’ll probably check it out when I get up, lol.

The x/y modifiers, you wouldn’t notice when loading up the shader. They are settings in image-adjustment, they move the image from side-to-side, and up-and-down.

By loading the image adjustment as is, it’s default state, it doesn’t touch anything afaik. Otherwise it seems they work when i make adjustments.

The only thing i changed was the brightness boost just a bit, to make the scanlines appear in the dark areas. 5% may be too bright for some (it affects the whole picture) but the scanlines are visible at 4 or 3% as well. You just have to edit the cfg for these values because in the menu it only allows you steps of 5%.

Now i’d like to see if there is a way to seperately adjust the brightness of the black areas only, so it doesn’t affect other colors…

1 Like

On a CRT even a fully black screen is not fully black it always has a very slight glow, when i set up HLSL settings for MAME i always adjust the ‘Floor’ setting to around 0.2, 0.2, 0.2 so the black isnt so pitch black and has a very slight grey tint to it much like a real CRT tube

2 Likes

@GemaH, I just played with image adjustment and it seems like setting the black level to a negative value probably does what you are wanting - making the black brighter without making the bright parts brighter.

In adding something like this at the beginning of the chain perhaps it would be good to have something which has only color adjustments, rather than everything in image adjustment which does masking, xy movement (which actually clips off stuff which is shifted outside the edge)

1 Like

Off the top of my head we only really have one shader besides image-adjustment that could do this currently, I’m pretty sure it’s the LUT shader. The issue with color-mangler is it doesn’t actually alter black levels.

It would be cool if we had a version of color-mangler that did black levels, as well as maybe doing color temp. ala (D65 - D50? Whatever guests white point shader is called, lol.)

Personally the only important x/y thing from image-adjustment imo, is the x/y modifier which moves the image left-to-right and up-and-down.

If we could get all those things in one shader it would amazing (basically a TV calibration shader), color-mangler’s color adjustments, image-adjustment’s black levels (possibly it’s x/y modifiers (only the left-right-up-down part.), and for extra credit D65-D50’s color temp/white point adjustment.

@GemaH, I agree with you.

Here the difference in the game Super Mario Bros. 3.

1 - Guest’s Shader Without Image-Adjustment

2 - Guest’s Shader With Image-Adjustment

Monitor Gamma: 2.00
Brightness Boost: 0.10

3 - Guest’s Shader With Image-Adjustment

Black Level: -0.10

@guest.r, could you, please, add image-adjustment in you shader or a similar parameter to show the scanlines in the black color?

Thanks.

3 Likes

Latest Mega Bezel Reflection shader update is up!

Changes:

  • Added an Easymode-Halation version with the scaling integrated
  • Added a new color adjustment shader to the preset
    • This does the color adjustments included in image adjustment without the position/mask options
    • We could put in the flip or crop without causing any problems
  • Still need to add positioning offset of the screen as suggested
  • Defaults of the hsm-mega-screen-scale now leave the scaling at full screen with no curvature
  • This means it can be integrated in existing shaders without affecting their current output until the settings are adjusted from default

PSX Strider 2 with Easymode Halation

Metroid on Gameboy Advance with a 3x2 screen aspect ratio

5 Likes