Outline Thickness property for new Highlight object

Something I would also love to see is crease and angle settings.
Currently outlines mostly outline the outer silhouette of an object, it would be nice to configure it so it can add outlines to edges, corners, intersections and such of a model as well to allow cartoon graphics in games.

5 Likes

It won’t allow for cartoon graphics anyway, because the max limit of simultaneously rendered highlights is very low (22 I think?) for that purpose.

1 Like

There is literally no reason to limit it unless it creates a massive amount of draw calls or lag, even then, it should be the developer’s choice and responsibility to use it.
But Roblox is known for not being very efficient at rendering certain 3D graphics and limiting or hiding graphics related settings and features.

Iirc the highlight feature draws a new layer for each highlight that is rendered (this is why highlights cannot be layered to blend color)

4 Likes

TBH sounds like highlights are a sort of half-baked implementation then. A feature released in modern roblox, designed in a way that makes it extremely specific-usage rather than broad-usage.

2 Likes

No idea where you’re getting that idea, Roblox is insanely efficient in terms of rendering; they have to run on phones that have been obsolete for years. It’s usually just the cross-platform compatibility they have to accommodate that creates obscure limitations in what’s possible that are not very visible to us.

See my reply here for a little more speculation/insight into why there is a limit.
CC @Maxwell_Edison

For further context, an outline shader is usually done by running typically a 3x3 kernel over a silhouette image to calculate a new texture containing the edges. 3x3 convolution filters are limited to a 2 pixel outline by nature of the way they work. I’m not sure if this is exactly what Roblox is doing, but it rings very close. Using this approach, AFAIK to get a thicker outline you would need to use a larger kernel, but this increases the number of texture samples per pixel quite a lot, which gets expensive.

11 Likes

Have you tried making scenes with lots of foliage, trees and complex 3D objects? Optionally you can add PBR on top of it too.
Roblox starts lagging insanely when you do that. game engines like Unity, Unreal Engine and Godot don’t have a issue with this.

Roblox is terrible with detailed games or having lots of lights.
Once you start working with high polygon counts, PBR and lots of lighting your frames start dropping really fast.

Also objects like union operations have caused me many headaches, meshes made in Blender often seem to perform significantly better.

(And yes I am aware of things like mesh/object instancing, shared data, cluster/batch render calls, etc.)

1 Like

It’s important to keep in mind that Roblox likely uses a lot of tricks behind the scenes that enable it to run on mobile devices in the first place. Out of the box you would see a Unity game with the same kind of foliage run even worse on a mobile device than Roblox runs on a powerful PC with the same dense geometry. There is probably a performance ceiling being hit on more powerful devices due to such tricks, or else further implementation details outside of my boathouse that limit performance.

Also unions are not particularly relevant to this; they are by nature inferior to hand-authored assets because they are automatically generated, and very frequently cannot resolve certain cases in a clean way, producing very inefficient geometry. They’re more a convenience tool than anything, and have no play in rendering performance.

12 Likes

Yeah, I understand this limitation, moreso I feel that there should have been an alternative way to design this. What you’re saying is likely true, but I’m wondering if it had to be true - plenty of games have much more complex visual outline effects, even of varying thicknesses.

Perhaps it’s true that this was the clear best way for roblox to make the system, but somehow I feel as though there could have been some more clever method that could be used.
Roblox has a very talented team, this seems like a very bog-standard implementation however.

4 Likes

Apparently other engines have a “mesh outline” system, where it clones, resizes, inverts the normals of and gives a solid colour to a mesh. This does not give support for a FillColor system, however, and might not even be very viable for Roblox because their vision is for everything to be dynamic, and this way of outlines, without some clever tricks, will likely be very slow in the case of objects that are created while the game is running or is modified otherwise, especially high-poly meshes.

just make a simple script that lowers the transparency of the outline transparency based on how far away the camera is from the highlighted object, and if the camera is 50 studs away it would be fully transparent.

The best part about this is that it does have the property, the bad part, it is a level 5 thing, try changing the thickness, itll error, not because it doesnt exist, but because you lack core permissions

1 Like

That’s not the same as changing the thickness? I think the main use case is to be able to make it larger to be more noticeable, but the workaround you provided can only make it look smaller.

2 Likes

The highlight effect definitely needs this feature. My biggest use case for the highlight effect is marking ground loot items. As you move further away from the items, I do not want the highlight effect to become more noticeable.


10 Likes

I’m surprised this feature request have aged a year and we still got no response from roblox admins, kinda like in light range limit increase request (although they did respond, but then all we have is radio silence again. been 6+ months zzz…)
What bothers me more is that outline thickness for highlights is already a thing, but isn’t officially available in Highlight instance itself.
You can find this a thing in Outlines selection style, here’s example below.
RobloxStudioBeta_jfocd
It’s configurable through Studio Settings > Studio > Hover Line Thickness, and there is no problem with outline whatsoever.
All of this just begs question why won’t engineers expose the thickness property to highlight instance (yes ik it’s much harder in reality than what it seems, but what I showed proves there is nothing bad happening with outline in the screenshot)

EDIT: Apparently, thickness property ACTUALLY exists in Highlight instance, but for whatever reason it is locked to Roblox Script security. You can try checking API dumps and see it yourself. I have no idea WHY it is locked away in the first place.

16 Likes

It really starts falling apart at higher values though… maybe they are trying to figure out a way for it to work correctly at these values? It could be the result of whatever black magic they are performing to get it to run well at 64 pixels thick, because, reading the explanation of how it works, it doesn’t seem likely it would work out-of-the-box at that value, nevertheless run well on my laptop.

image

5 Likes

Fair point, but I guess they could add thickness property but clamp it at point where it works all fine.
That would be beneficial while engineers are working on a solution

5 Likes

I would love this! It would be so useful. I wonder if they could also make you use two outlines at once?

yes thats what i wanna use it for in my game, i want just the characters to have outlines so they stand out and have a cartoon type style. it would be so pretty but sadly they have still not added a thickness property also if anyone at roblox is reading this can it be a set thickness so the farther away the camera is from the outline is the smaller it would get. that way the outlines stay consistent

Even if it was just maxed out at say 4 px it would be a lot better.

1 Like