I am aware that it’s not possible to modify Lighting.Technology during client runtime, but is there any sort of “hacky” workaround?
I was thinking of something along the lines of a pre game menu that allows you to select between “High quality” (Future), and “High performance” (Compatibility). Future would be the default technology so if a client selects Compatibility, it would save that value to a datastore then proceed to kick the player and prompt them to rejoin. Upon rejoining, their technology would have already been set to Compatibility. I feel like something like this should work in theory because it’s not modifying Lighting.Technology during runtime.
Do you guys think this would work, or is it simply not possible?
Disabling GlobalShadows doesn’t help enough sadly. I’ve been testing one of my builds on an empty baseplate with only two spotlights on Future technology and I’ve been noticing a huge performance impact on lower end devices. When using the microprofiler, I noticed that “Shadows” only accounted for around 5-10% of the load and the other 90% was “ID_opaque”. I looked around but didn’t really find any good explanations for “ID_opaque” other than it possibly relating to meshparts, and opaque/semi-transparent parts. I tried changing the transparency of my windows to 0, and even deleted all parts/models except the walls but still didn’t notice any significant improvements.
I’m going to logically say the answer is no, switching the lighting technology during or outside of runtime is not currently possible.
From my understanding, you cant switch the lighting engine during runtime because its likely each one uses vastly different render methods internally. It’d be like ripping out the hard drive of your computer while its running and putting a new one in. It just wont work without causing some significant errors if not catastrophic failure.
Your idea of kicking the player, switching the lighting engine and then having them join back is significantly more feasible. Although this would require the modification of the data model which gets sent to the client when you join a game. With the way Roblox’s joining process is laid out, I do not believe this would be a simple feat for Roblox to smoothly implement. Regardless of that, there is no way for you to dynamically modify the data model for a single client before they join the game.
As it currently stands, there is no hacky solution you could do to achieve this.
Is this something that the server works at? If not, maybe roblox could add a “Lighting Technology Preference” option, applying on player join with options like Shadow Map, Voxel, Future and others, plus an “Owner Option”, which yields the game load so the owner can use a custom function to return a proper technology. For example, I would make a function to check the player’s graphic levels, and if it’s 3 or lower, it returns Voxel, else it returns ShadowMap. There still wouldn’t be a way to change lighting technology at the middle of gameplay, but you can at least filter who will play the game with shadowmap or voxel. You could even make the player chose what lighting technology he wants to use, as long as you put a warning like “To apply changes you need to reopen the game”.
I think the reason they said that was because somebody earlier said that it could cause issues but considering it works fine in Studio when you change it, why shouldn’t it work on the actual client?