I’ve created a remake of this resource with the goal of improving clarity and performance. My version is structured as a single, type-safe module with around 170 lines of code. In terms of optimization, the original approach involved cloning and parenting a local script that generated multiple Parts using SpecialMeshes set to Wedge, rather than using WedgeParts. My module simplifies this by creating a single part designed to cover the entire frame and automatically hides it when the ScreenGui or Frame is not visible.
Usage:
Code-wise
REVISION 1
If you only want to handle blurring manually, then the module presents 3 simple functions (which you’d need only 2) for usage:
.new
(GuiObject: GuiObject, Arguments: UIBlurArguments) : UIBlur
This function simply creates the blur effect on a (usually Frame)GuiObject
instance. The arguments table accept as follows:
{
Corner : number?, -- 0 - 3
Fragmented : boolean?, -- Little sunlight effect using displaced geometry
Inverted : boolean?, -- Inverts the screen colors for that particular GuiObject
DisableBelowNeededGraphics : boolean?, -- Disables the blur effect if the "QualityLevel" is set to a value below 8
}
-
Update(self: UIBlur)
simply updates the blur effect. This is a function which you don’t need to call since the module already updates the effect Pre-Render. -
Destroy(self: UIBlur)
simply destroys the blur effect (not the BlurEffect instance, see Object-wise for info) and clears the little resources it used.
For an example on how to use, you simply:
local UIBlur = require(game.ReplicatedStorage.UIBlur)
UIBlur.new(script.Parent.Frame)
Object-wise
If the module’s AutoAddEnabled
attribute is enabled, the module will automatically* scan the Player’s PlayerGui for BlurEffect instances, and apply a blur effect accordingly. Setting the BlurEffect.Enabled
to false also disables the blur, like the real thing!
*Note: for the auto-adder to work, the module should be required, but only that! No need to actually use the .new
function.
Features (BloatWare):
Corners?
REVISION 1
Yes, the module uses a pre-modelled MeshPart instead of a regular part for rounding. Corners also support fragmentation! This method isn’t that good either, because on 1:1 ratios the corner will look stretched, but this is best for buttons.
- Level 1 is a barely rounded square
- Level 2 is a square rounded 50% of the way
- Level 3 is a circle
REVISION 2
Corners are automatically created using complicated math, but objectively look better, and also auto-update:
All with the same line of code!
Fragmentation?
Yes, since the parts used to make the blur are Glass-material, with some neat geometry one could make a “shiny” bloom just like below (third frame):
Inverted colors?
Yes, using a cool little trick from a tutorial (linked in the Update Log) I also added this functionality. Beware that it might look too crisp for simple usage, so I recommend turning this on only for a square Frame. The sample place file provided below also features a ColorCorrection effect (disabled by default).
Make sure the version of the module (found at line 5
) and this post’s title match to get the latest product!
Despite the name, I think this may have become too bloated.
Please let me know if you encounter any issues/bugs, or have improvement ideas!
Update Log
17 June 2025
- Added objectual creation (
BlurEffect
insideGuiObject
) to revision 2 - Updated sample place file for better visualization
14 June 2025
- Recreated the entirety of the module to use another method of rounding. Using this revision is completely optional, but the earlier version will not be updated anymore. I’m gonna add bug fixes and customization to the second revision as time goes on.
11 June 2025
- If the
Corner
argument was passed as “0”, internally it becomesnil
(0 is no corner).
2 June 2025
- Update Log forgot we’re in 2025
- Improved typechecking for functions
16 May 2025
- Changed how arguments passed on Blur creation are made, please update all your scripts accordingly (I know I should’ve done this when I added Fragmentation sorry)
- Added inverted colors (thanks to this tutorial)
11 May 2025
- Added fragmentation (order of arguments changed!)
- Added variable depth scaling depending on the
Corner
used (DepthOfField is weird)
26 April 2025
- Added a sample place file
25 April 2025
- Added functionality to the corner argument
- Updated
Part.Size
formula