Mega Bezel Reflection Shader! - Feedback and Updates

There is a lengthy thread that shows the use of HDR on Retroarch here.

Essentially , it allows the use of much simpler CRT shaders that use the built-in brightness of HDR monitors to avoid having to fake things like bloom, and let’s you use a full strength mask without darkening the game screen.

While it is cool, really good shaders like Guest ADV and Royale, will still look as good as they have always looked. (Without the need for HDR.)

Another thing is that, like the example link, only PVM’s and BVM’s had such pronounced scanlines. For the most authentic consumer experience, I think the existing methods work better.



Mega Bezel is updated to V 0.9.102 2022-02-02 Rev 1


  • Added parameters for Ambient (Night) Lighting amount and scale for Tube Diffuse and Colored Gel
  • Updated Guest to crt-guest-advanced-2022-02-01-release1
  • Updated Sonkun Slot Mask Presets now named:
    • Sonkun__SlotMask-8-16-Bit-PC…


Shader Package Approx. 15 MB

Extra Examples Package


  • You MUST use Retroarch Version 1.9.8 or Later (It will fail to load on earlier versions)
    • Use at least 1.10.0 if you want to use HDR
    • If you have previous versions of the Mega Bezel installed:
      • Delete the old Mega Bezel stuff from shaders/shaders_slang/bezel
    • Inside the .zip is a bezel folder, copy the bezel folder into your Retroarch/shaders/shaders_slang folder
      • The final path to the Mega bezel should be Retroarch/shaders/shaders_slang/bezel/Mega_Bezel
    • Set video driver to Vulcan
      • It will run in GLCore but seems faster in Vulcan
      • Some users have run it successfully in D3D11 but with a slow load time
    • Open the Settings Menu and Set:
      • Video / Scaling / Aspect Ratio to Full
        • This will match your monitor aspect aspect ratio
      • Video / Scaling / Integer Scale to OFF
      • Video / Output / Video Rotation to Normal
      • User Interface / Show Advanced Settings to ON
      • Core / Allow Rotation to OFFImportant for FB Neo
    • Load a preset in the shaders menu, Mega Bezel shader presets are found in:
      • shaders/shaders_slang/bezel/Mega_Bezel/Presets
    • When you save a preset make sure you have the Simple Presets feature set to ON
      • This will save a preset with a reference to the preset you loaded plus whatever parameter changes you made
      • This will keep your presets loading properly when the shader updates in the future

Sonkun__SlotMask-8-16-Bit-PC Preset using some Guest new features:

Sonkun__SlotMask-Arcade-32-64-128-Bit-480i Preset


Oh I always love the look of Sonkun’s presets. :slight_smile:


It seems that this version, at least in the STD version, is quite more resource hungry than the previous ones.

1 Like

Flycast with HSM Sonkun Arcade preset looks really nice, but the image has a blueish tint:

Any idea ?

1 Like

This is probably the grade color temperature, which is set to about 8000. If you lower it it should be be less blue and more warm


Do you mean you get lower fps? If so what is the difference between the old fps & the new?

Thank you HyperspaceMadness, setting it to 7100 makes the image way better. :slight_smile:


Also, with Flycast, if I increase the core resolution, some HSM shaders work (Sonkun works at 2880x2160 for example), but some others don’t (Cyber presets crash Retroarch). At low resolutions, they all work.


Does Flycast have a Downsample after upsample option in the core settings?

1 Like

Hey all!

Here I want to share some other shaders used as a reference shader with combination of HyperspaceMadness reflection shader and @Duimon NES - PVM20 graphic.

We used to see the amazing guest.r crt shader by default but with screenshots below I wanted to showcase a few other shaders which packed up with HSM Refleciton Shader under Community_CRT_Variations and Experimental folders.

Before further ado, I sincerely thank to you all for bringning such a joy to the retro gaming :metal:

Game: Duck Tales 2 (NES)

The default @guest.r crt shader in use with Duimon graphic preset :point_down:

BendBombBoom__RGB__Mask-7__ADV from @BendBombBoom :point_down:

Nesguy__TVL-270__STD from @Nesguy :point_down:

Nesguy__TVL-360__STD from Nesguy :point_down:

Nesguy__TVL-540__STD from Nesguy :point_down:

I’v only made two changes in parameters and rest are default;

  • Tube Diffuse Image set to ON and its brightness value at 30

  • Tube Static Reflection Image is set to ON and it’s Opacity value is at 4

I’v also tried to get CyberLab__Composite-Pure__1080p__ADV as a reference shader from Cyber but somehow it scales up the monitor graphic from Duimon preset while the other shaders didn’t show such behavior :thinking:

I figured that it might be the case with the shader being in experimental state so that its layering system has some differences and thus, it conflicts with Duimon preset. Just a wild guess :innocent:

Here you can see it scaled up when it’s referenced with Duimon graphic preset :point_down:

So, I’m overrided some parameters from Viewport Zoom and Background Layer to increase/decrease and slightly reposition the whole monitor part and background console part to align with the default Duimon preset position.

I get as close as this after a few attempt :point_down:

CyberLab__Composite-Pure__1080p__ADV from @Cyber


Nice. They yellowish lighting makes me think the systems needs a bit of Retrobright treatment. I usually go for a colder color temperature.


The default night image is pretty yellow, intentionally, but there are HSV parameters so you can change that without replacing the image.


Thank you, good to know.


The shader is scaling up because of [CRT Screen Scaling] Int Scale Mode: 1. I change this to 0 for the graphic to fit properly. Changing the Viewport Zoom and Background Layer might be the way to properly do it, but I don’t see a difference between the two myself.

Int Scale Mode: ShortAxis

Int Scale Mode: Off


That was it indeed, thanks!


Hmm, I don’t think so.


With Cyber crashing Retroarch, it returns

[libretro ERROR] core/linux/common.cpp:70 E[COMMON]: SIGSEGV @ 0x7fe41c67e5d2 -> 0xb8 was not in vram, dynacode:0
[libretro ERROR] Fatal error : segfault
 in fault_handler -> /builds/libretro/flycast-upstream/core/linux/common.cpp : 81
[libretro ERROR] shell/libretro/libretro.cpp:2904 E[COMMON]: DEBUGBREAK!

I Need This!

Now, I can reach the corners without to increase the brightness. Ideal for flat screens! Thanks @HyperspaceMadness !


It doesn’t have that option. I’ve successfully tested all of the internal resolutions in Flycast if I recall correctly. I had experienced soft crashing if attempting to switch to multiple different resolutions in the same session sometimes but was able to safely exit the emulator by pressing Escape.

My recommendation is to use native resolution with Flycast as to me that has the least artifacts (in the handful of games I’ve tested). Also anything higher than native destroys the scanline effects and the built-in filtering effects of the shader actually perform better at native than higher resolutions.

My graphics card is a GeForce GTX 1070 with 8GB RAM, my system memory is 32GB. What graphics card and how much VRAM and system RAM do you have if you don’t mind me asking @Tromzy?

1 Like