How would you create an effective "low graphics mode"?

Hey there,

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).

1 Like

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.

2 Likes

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.

2 Likes

I guess you could change Lighting.Technology and maybe delete some meshes that will never be used.

Check here for more

2 Likes

Is it even possible to change lighting technology from the local client?

Actually nvm its seems that roblox has disallowed the ability to do so.

I remember being able to

weird

1 Like

Yeah it’s quite annoying, that’s something that causes great lag on lower end devices.

well, it is possible. I have made a Gui slider that does that

Some optimisations:

Disable Lighting Shadows by

  • Removing Cast Shadow from parts
  • Turning off Shadows in lights
  • Turning off GlobalShadows

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

3 Likes

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
4 Likes

This is a really good solution. Goes into a lot of detail while simplifying the detail.

2 Likes

Pretty late on this but would there be a way to undo it and bring everything back to normal?

You can’t change the lighting technology with scripts

literally just copy & paste the script but reverse everything