TL;DR: This is an advance notice that outlines are going to be removed from Roblox in the coming weeks.
UPDATE This change is now in effect (since May 19).
On July 1st 2019, we’ve officially deprecated outlines. You can read the detailed reasoning as to why this was important here: Deprecating Outlines. When we did this, we promised to maintain the new option, Lighting.LegacyOutlines, at least until the end of the year.
Because it’s now 2020, the time has come to reevaluate this. As we invest more into rendering features like PBR, there’s more pressure to keep our shaders lean - and outlines have a performance cost.
When you disable outlines, we completely eliminate the performance cost on CPU, and eliminate some of the cost on GPU on lowest quality settings - however, there’s still unfortunately some GPU overhead that we have to pay, both on lowest quality and especially on higher quality.
For every feature that deeply affects the rendering pipeline like this it’s common to have to embed some shader code into every shader permutation that is used - we have close to a thousand of those. If you want a feature to come at zero cost, you - unfortunately - have to precompile shader variants that have this feature enabled & disabled - this increases the permutation count 2x and is taxing because more shaders have to be compiled offline (which makes graphics engineers sad) and created at runtime (what if you suddenly toggle outlines in Studio?). This also makes it hard to maintain and optimize shader code, as anyone who saw functions with dozens of nested if statements can attest to.
Because of this, we don’t have shader permutations for outlines - (when we shipped outlines) we used to have an assumption that everyone wants outlines, and so we should optimize for the presence of outlines. This assumption has proven to be false.
Looking at our analytics, we observe that almost no game is using outlines today; these are stats from last weekend, weighted by game popularity (don’t pay mind to the event count, this is heavily sampled production data, so only percentages are representative:
As you can plainly see, in vast vast vast vast vast vast vast majority of game sessions outlines are disabled. We have also looked at the long tail of games that have outlines enabled and it’s not clear that they serve a significant visual purpose among the few places that use them. We didn’t know this last year - which is why we kept the option to enable outlines. Given this, it doesn’t make sense to maintain outline support on the platform any longer.
This is an advance notice that outlines are going to be removed from Roblox in the coming weeks. There’s no specific timeline yet because the impact of the change is small and visual only - but don’t be surprised if one day you stop seeing outlines altogether. Specifically what will happen is:
- Lighting.LegacyOutlines will disappear from Studio, and existing places that set it to true will behave as if it’s false
- Lighting.Outlines will be preserved (as deprecated) for scripts that happen to reference it, but won’t do anything.
- We will be able to streamline some of our shaders which will slightly improve performance in some cases, and make our lives easier.
If you’re affected by this, the existing workarounds involve using a Decal with a single-pixel opaque black border on an otherwise transparent texture. You can vary the texture size / border width to reach the thickness you want. This doesn’t work well unless the geometry is simple blocks, or if the block size is highly variable, but for most gameplay-related needs this should be reasonably practical.
If you would like to have other ways to reach the visuals that you were hoping to reach with outlines, please don’t hesitate to create threads in Feature Requests forum. While we are currently focusing on making our renderer produce more physically realistic pictures, support for stylization is at the back of our minds - it won’t be prioritized soon but we want to keep hearing the feedback to help us plan ahead.