I’m trying to find a good way to create a sort of “low graphics” button on the local client (meaning with a local script). My game has lots of point lights, meshes, textures, and shadows. It even has a good amount of unions.
How would I go about reducing all this significantly from the local client? (It would also have to be temporary, so when the button is clicked again everything is reverted back to normal).
What I think you’ll find is that Roblox’s graphics settings option will be more performance beneficial on a per-client basis than custom scaling client graphics will ever be. A script stuck in a consistent feedback loop of deciding what lights should be active will absolutely hinder performance.
I would recommend StreamingEnabled long before I would recommend any custom graphics decision.
That said, if your script is not meant to actually decide what should be active consistently based on the character’s position, and instead just disable certain instances in favor of performance- that is do-able simply by calling :GetChildren() on workspace and class-checking to disable what you’d like to.
Some may call me lazy on this one, but I would just put in either the game description, or somewhere in the game itself, text that says “Lower graphics mode recommended for the best experience” or something like that. It’s simply not practical in my opinion, when you can just lower the graphics quality in the settings that Roblox has already provided. I like the idea though.
Turn Glass materials into SmoothPlastic or Metal
Disable SunRays
Disable Clouds
Utilising Distance Fog (fog that lowers the render distance)
Changing StreamingEnabled targets
Lowering Texture Density (image size) on parts that have them
Lower graphics settings automatically make technology fallback to ShadowMap or Voxel
Yeah, like, build the map, based on whether the Player is on a desk-top or phone (More or less Detail). Then you want a script to switch the entire map…
Maybe the Builder Forum could point you to a script, or a plug-in you can mod…
And some guy said he has a GUI Slider, which may do that…? But he didn’t point. :{
This is very helpful information thank you. Two questions, one what do you mean by changing StreamingEnabled targets? Two, how would you go about utilizing distance fog that lowers render distance? I think that’s a big problem with this game I am working on, the build is too detailed from far away. (example below)
workspace:FindFirstChildOfClass('Terrain').WaterWaveSize = 0
workspace:FindFirstChildOfClass('Terrain').WaterWaveSpeed = 0
workspace:FindFirstChildOfClass('Terrain').WaterReflectance = 0
workspace:FindFirstChildOfClass('Terrain').WaterTransparency = 0
game:GetService("Lighting").GlobalShadows = false
game:GetService("Lighting").FogEnd = 9e9
settings().Rendering.QualityLevel = 1
for i,v in pairs(workspace:GetDescendants()) do
if v:IsA("Part") or v:IsA("UnionOperation") or v:IsA("MeshPart") or v:IsA("CornerWedgePart") or v:IsA("TrussPart") then
v.Material = "Plastic"
v.Reflectance = 0
elseif v:IsA("Decal") then
v.Transparency = 1
elseif v:IsA("ParticleEmitter") or v:IsA("Trail") then
v.Lifetime = NumberRange.new(0)
elseif v:IsA("Explosion") then
v.BlastPressure = 1
v.BlastRadius = 1
end
end
for i,v in pairs(game:GetService("Lighting"):GetDescendants()) do
if v:IsA("BlurEffect") or v:IsA("SunRaysEffect") or v:IsA("ColorCorrectionEffect") or v:IsA("BloomEffect") or v:IsA("DepthOfFieldEffect") then
v.Enabled = false
end
end