Screen Space Bevel is a global shader that modifies GBuffer normals in screen space to create soft beveled edges without editing geometry. By adjusting surface normals at the render stage, it introduces subtle curvature on sharp edges, improving how materials interact with light and reflections. This results in smoother specular transitions, more defined highlights, and a less “flat” appearance across hard-surface assets, all without increasing polygon count or altering UVs.
Efficient and lightweight (~0.5ms at 1080p), suitable for both realistic and stylized rendering.
Runs at around ~0.5ms at 1080p, though performance depends on your resolution, GPU, and plugin settings. All optimization methods are described in the documentation if you’d like to tweak it for your pipeline.
Thanks! Glad you liked it! I’ll try to add a way to include or exclude specific meshes in the next update, but if it’s a bit tricky it might come a little later.
Nope, this won’t work. It relies entirely on the G-Buffer, so it’s strictly for Deferred Rendering.
Plus, the render cost would likely cause too much latency for a smooth VR experience.
Hi! I bought the plugin, but unfortunately I didn’t realize right away that it doesn’t work with version 5.7, does it? That’s really disappointing, because the plugin is really great .
Do you plan to release an update to support version 5.7?
Hi! Actually it is capable of working with 5.7, I just haven’t had a chance to port it over yet.
I’ll get on that right away so expect an update in the next few days.
Thanks so much for the support and for buying the plugin!
Hi, this shader looks very interesting. I’m planning to use it for cinematics. Could you share some examples of how it works on textured PBR objects? I’m especially interested in how the shader behaves on edges when the object already has textures and materials applied.
As you can see, the main issues at these extreme settings are normal bleeding onto adjacent surfaces and some blurring of texture normals on sharp edges. However, I would not say it is particularly noticeable even in this case.
For a more detailed comparison, here is how it looks in the normal pass:
This comparison uses the same extreme values for Radius and Strength. Only the Threshold was adjusted. I wanted to show that you can significantly reduce this issue by fine tuning the parameters.
Based on my tests, the shader is totally stable in every other aspect. It’s completely solid in the frame, noise free, and doesn’t require any temporal approximation. But I should mention right away that the shader is mainly meant for a bit of final frame polish. It is not designed to be a full replacement for geometric bevels.
Whoa that definitely shouldn’t be happening. Sorry for the trouble.
I am going to look into this but I need a bit more detail from you to figure out what is going on.
Does setting r.SSBevel.UseCustomDepthMask to 1 trigger this?
If so does everything look normal when it is turned off?
Are you using any other global shaders in the project besides SSBevel?
If you are please try disabling them or testing the plugin in a clean project to see if there is a conflict.
Also just to clarify are you using temporal anti aliasing like TSR or TAA or DLSS?
If you are please try testing with these console commands:
r.ScreenPercentage 100
r.AntiAliasingMethod 2 or 0
r.CustomDepthTemporalAAJitter 1
One more thing: do you see those aliased edges in the World Normal view mode too or do they disappear there?
This information will help me a lot! I suspect it might be caused by the RDG API pipeline changes in UE 5.7 which might be making the Custom Depth mask bleed into the normal pass or it could be an issue with temporal anti aliasing.
I will do my best to fix this in the next patch. Sorry again for the hassle!