As a Roblox developer, it is currently too hard to make beams look great on low settings.
My hexagon ring.
I use hexagon-like rings for my project. The part uses 2 animated beams with 2 attachment points.
Beams are using 3 segments.
They are like this, because their animation looks really smooth and pretty.
It’s also opted and it’s really easy to manage them.
On lower settings, their level of detail gets… uhh…
Do we really have to opt something that is already opted?
Maybe some kind of bool named like “ForceSegments” could prevent engine from doing this?
If Roblox does something about my issue, that would save me from using local script hacks.
I don’t want to use them just because of a three-segmented beam.
If not, then I hope only beams with higher amount of segments get affected.
The major flaw in beams, trails, glass, particles, and even lights and shadows is that we can’t use any of them for actual gameplay because we can’t make sure the user will actually be able to see them. All these features are so great but their uses are limited to unimportant visial effects because they don’t appear properly for a lot of players.
It’s not that great how quality level acts as a multiplier for segments. Six segments is nothing – it doesn’t affect performance – but despite that the multiplier butchers the #segments. On the contrary, if I have way too many beams, just adding a multiplier isn’t going to help performance – there are still too many.
Instead of quality level being a multiplier for segments, there should be a maximum number of segments depending on quality level. That way, responsible use of beams doesn’t decrease #segments, and irresponsible spamming of beams is performant on low quality levels. This obviously doesn’t solve the issue Sharksie pointed out, but it would be better behavior than a multiplier.
I’d also really like some way to force a certain minimum amount of segments.
Here I’d like to align the beam with a model, which looks fine on maximum quality with a low amount of segments per curve (~5–6):
However, when reducing graphics quality, it starts to look like this, where all beams get reduced to a single segment:
This can be “fixed” by multiplying the number of segments by 5, which adds only a single additional segment per curved beam on the lowest quality setting, making it look good enough for me. That obviously has the side effect that there are a lot of unnecessary segments drawn on higher quality graphics settings, which is something I’d obviously like to avoid…
This, so much. Roblox lacks options for gameplay visuals significantly. It’s why you see so many games that lack visual feedback for tons of actions and features.
I’m not even entirely sure why beams behave this way, especially at such a low polygon count in the first place. If they’re using planes for beams, there’d only be about 36 triangles in the level 8-10 image, 16 if we don’t we add in the extra ones on the other side. I don’t see how or why such low polys need to be clipped, unless of course, this is a regression caused by mobile device support. Could be wrong though.
They behave this way because the intended functionality was for them to serve a graphical purpose, i.e. as a special effect. They were not made for showing curves in fixed shapes regardless of quality level. That’s why we have this feature request.
The correct word would be “feature”, not “regression”. Nothing has regressed, this is all intended functionality.
This would be useful for collision meshes as well - when a collision mesh is generated, it would be nice to have a maximum amount of collision triangles allowed in the world at a time, and the collision mesh would change accordingly. This would allow for small maps to have accurate collision when there are few meshes in a world.
@Player1unknown@Mah_Bucket Please provide use cases instead of simple “we need this” replies, it gives engineers a better gauge of why they should prioritize this feature.
Beams are currently completely useless for functional purposes in-game. Even for visual purposes they are crippled. I am unable to make beams in my game visually coherent on all quality levels while still preserving my artistic vision.
Here is just one example of where even the purely presentational use of this feature is messed up by having no control over number of segments. This waterfall requires at least 2-3 segments to curve enough so that it does not clip into the wall while still blending decently into the terrain water. Fudging this waterfall to still work with one segment takes an extremely long time iterating back and forth between quality levels and results in an artistically inferior result by the end because I cannot rely on the beam being able to curve even a little.
We need the ability to set the minimum number of segments for a beam so that LoD can simply scale between the desired number and the minimum, instead of being hardcoded to scale all the way down to one.
The onus is on developers to not be stupid with it.
Posted a solution for all cases (unless roblox themselves changes the LOD structure in the future so keep in mind), this removes the interference from the engine when camera is too far away or graphics quality is changed in settings so it provides the intended visuals by developers.
Bumping this post since it is absolutely needed, I feel like developers should have more controls over optimizating options (for this, and particleemitters as well). Having to drastically increase the amount of beams and using manually looped :Emit() for particleemitters just to keep it unaffected from forced optimizations sounds just wrong.
It’s honestly quite displeasing to see ROBLOX engine being capable of doing alot of stuffs I didn’t even know existed, yet most of I expect to see not being there.
Would be really appreciated if you could consider more about this topic. Better late than never!
Wireframe view, notice the zigzag lines which indicates the amount of segments
Distant view, less beam segments are shown until they eventually reach 0 as the camera moves further, causing me to add even more segments onto something that doesnt need to be detailed at all