Performance Guide
Every number here was measured on a phone, not estimated and not taken from an editor.
What it costs
Section titled “What it costs”Galaxy S20 FE (Adreno 650, the same GPU as a Quest 2), 1080p, MSAA 4x, in a busy scene. Milliseconds added per frame:
| One layer | Four layers | |
|---|---|---|
| Performance mode | 1.75 ms | 2.62 ms |
| Compatibility mode | 16.47 ms | 19.61 ms |
Galaxy A53 (Mali-G68), a slower phone, same scene and settings:
| One layer | Four layers | |
|---|---|---|
| Performance mode | 3.91 ms | 5.28 ms |
| Compatibility mode | 41.30 ms | 44.78 ms |
Every Performance mode result on the S20 FE held a steady 60 fps, including four layers with MSAA 4x.
The difference between the two modes is not the outline doing more work. See Rendering Modes for which one to use.
What makes it cost more, and what does not
Section titled “What makes it cost more, and what does not”Almost all of the cost is fixed per frame. Only one part of it grows:
| Effect on cost | |
|---|---|
| Number of outlined objects | Each one is drawn once more with a very cheap shader. Around 0.3 to 1.0 ms for 120 objects. This is the only part that grows, and Pro Mode removes it. |
| Outline width | None. A 16 pixel outline costs what a 2 pixel one costs. |
| Softness | None. |
| Number of layers | Going from one layer to four costs 0.87 ms on the S20 FE, 1.37 ms on the A53. |
| How much of the screen your outlined objects cover | This is the one that matters. See below. |
Cost follows the area your outlined objects cover
Section titled “Cost follows the area your outlined objects cover”The outline only works on the part of the screen your outlined objects occupy, plus a margin for the outline’s own width. A typical selection highlight covers 5 to 15% of the screen instead of all of it.
Measured on an S20 FE with two outlined objects taking up 6.7% of the screen, MSAA 4x:
| Cost | |
|---|---|
| Whole screen | 7.22 ms |
| Just the outlined area | 3.35 ms |
That is 53.5% of the outline’s cost removed, and it is on by default. It never changes what the outline looks like.
It switches itself off, and works on the whole screen instead, when your outlined objects
cover most of the screen anyway, in VR, and when an outlined object is partly behind the
camera. OutlineZeroFeature.ScissorActive tells you which frames did that, and
ScissorCancelReason tells you why.
What this means for your game: a few outlined objects in one part of the screen is the cheap case. Outlining something that fills the screen is the expensive one. The number of objects barely matters; the area they cover does.
Settings that make a difference
Section titled “Settings that make a difference”- Rendering Mode: Performance. By far the biggest one on phones and headsets.
- Downscale: 2 (the default). The outline is built at half resolution and looks the same. Downscale 1 costs four times as much for no visible gain in most scenes.
- MSAA. With MSAA off the outline is cheap in either mode.
- Turn off URP’s Opaque Texture and Depth Texture if nothing else in your project needs them. This package never does, and both are expensive on mobile.
One limit worth knowing
Section titled “One limit worth knowing”Objects drawn by Entities Graphics or Unity 6’s GPU Resident Drawer cannot be outlined automatically. Pro Mode handles them, and the project validator warns you when it sees the GPU Resident Drawer turned on.
How these numbers were measured
Section titled “How these numbers were measured”- On real phones, from a release build, not in the editor.
- Each stage of the outline was measured on its own by switching the later ones off, so the cost of each is a real measurement rather than a share of a total.
- Only frames where the GPU was the limit are quoted. When a phone finishes early it slows itself down, which makes timings look worse than they are.
- Two runs per configuration, interleaved, agreeing within 0.07 ms.
- Compare numbers only within one table. Phones get slower as they get hot: the same configuration measured 2.9 ms hot and 1.4 ms cool. Each table here was captured in one session; tables from different sessions are not comparable.
The editor’s Game view is not a benchmark. Vsync, editor overhead and a desktop GPU all distort it, so use it to see the shape of a change rather than its size, and measure on the device you ship on.