Outline
This page is for people turning on the normal outline for the first time. It draws a comic-style contour outside the character silhouette. It takes about 3 minutes.
What is this
It draws one more slightly inflated shell of the mesh, leaving a line on the silhouette.
It does not read the depth texture, so it draws on a normal VRChat screen too.
When to use it
- When you want the avatar to read as sharp and cartoon-like
- When the character silhouette gets lost against a bright background
Turn it on in 30 seconds
- Pick one converted material.
- Turn on Enable Normal Outline.
- Leave Outline Width at 1.
- Change Outline Color to something darker than the base.
If you see a line outside the silhouette, it worked.
If there is no line at all, go to outline troubleshooting.
Normal Outline
Basic setup
- Turn on Enable Normal Outline.
- Choose a Width Mode.
- Set Outline Width and Outline Color.
Width Mode defaults to WorldSpace, and the line thins out with distance.
PixelStable works in screen pixels, so the thickness stays the same at any distance.
PixelStable is the safe choice for avatars.
A URP project needs the feature on every renderer in the active URP asset.
Without it every value still edits, but not a single pixel of line is drawn.
StudioRaming > MingToon > URP > Install Outline Renderer Feature
Outline Master is the shared switch for the normal outline and Inner Depth Edge.
If it is off, neither tab draws.
Values you will touch often
| Inspector label | What it changes | Suggested starting value | Raise it / lower it |
|---|---|---|---|
| Outline Width | The thickness of the line | Leave at default (1) | Raise it and it thickens; at 0 it disappears |
| Outline Color | The color of the line | Darker than the base | The closer to black, the stronger the cartoon look |
| Outline Tint Strength | How much the color blend mode takes effect | Leave at default (1) | Lower it to 0 and the blended color has no influence |
| Pressure Contrast | The size of the per-area thickness difference | Leave at default (2) | Raise it and thin areas get thinner; at 0 pressure is ignored |
| Far-Distance Minimum Pixels | The minimum thickness the line keeps at a distance | Leave at default (0.95) | Raise it and the line survives at a distance; at 0 it looks broken up |
| Depth Bias | How far the whole line is pushed forward or back | 0 | Raise it and buried lines emerge; raise it too far and it floats in front of the face |
| Protect Outline From DOF | Keeps depth-of-field blur from erasing the line | Leave at default (on) | Turn it off and the line smears away in worlds with depth of field on |
Every field and its range is in the Outline reference.
Protect Outline From DOF behaves the same on BRP and URP.
The only place the backends differ is whether the Renderer Feature above is installed.
A different line thickness per area
Choosing a pressure source
Pressure Source sets which channel controls the thickness. The default is Constant.
| Value | What it reads |
|---|---|
Constant | Reads nothing and uses the width as-is |
VertexAlpha | Vertex color A |
VertexRed | Vertex color R |
WidthMask | The width mask texture |
OutlineNormalUV8 | The value baked into UV8. Long faces get thicker, corners get thinner |
Which lines the pressure applies to is set separately by Apply to Normal Outline and Apply to Inner Outline.
This toggle sits in the normal outline group but keeps acting on Inner Depth Edge. Leave it on for a mesh with black vertex colors and the inner lines vanish completely.
Painting directly in the Scene view
- Set Pressure Source to
VertexAlphaorVertexRed. - Put the renderer that uses this material under your selection. Picking the MingToon Manager works.
- Select only one material.
- Press Paint Outline Width in Scene View.
Drag to paint, and hold Shift while dragging to erase.
Change the brush size with [ and ], and finish with Esc.
Adjust Radius, Strength, Falloff and Paint Through Backfaces in the overlay.
It is blocked in Play mode, because Unity will not undo it for you. Other renderers using the same mesh change as well.
To affect only this renderer, duplicate the mesh, assign it, and then paint.
If Pressure Source is VertexRed and Normal Source is VertexColorTS,
the two read the same channel. Change the pressure source to VertexAlpha.
When the line breaks at sharp corners
The cause is Normal Source. The default is MeshNormal.
VertexColorTS and UV8TS are only correct when smoothed values were baked in advance.
Choosing UV8TS on an unbaked mesh makes the line break up even more.
How to bake UV8 is in Mesh UV Bakes.
When the line leaves the shape on hair and skirts
A model with normals transferred from a sphere or cylinder has shading normals that differ from its shape.
Turn on Compute For Edited-Normal Models when you bake UV8. → Models with edited normals
You can also give the direction with a texture directly.
Turn on Authored Vector Direction and set Vector UV and Vector Scale.
If stray lines appear inside the body, raise Inner Line Suppression Offset.
Making the outline color follow the lighting
Turn on Apply Lighting and form shadow, rim and front light apply to the line as well.
It leaves the impression of a thick line darkening with the light.
Turn it off and the line keeps a uniform color independent of lighting.
Front Light Color and Front Light Strength let you give the lit side its own color.
If Front Light Strength is 0, the front light color has no effect.
To print screentone on the line too, turn on Outline Shadow Pattern.
In VRC Light Volume worlds the line brightness follows the volume level. BRP reads the volume once per vertex and passes only that scalar to the fragment, so it adds no per-pixel volume sample.
More detail
- Outline reference — every field and range
- Mesh UV Bakes — baking UV8 smooth normals
- Outline troubleshooting — when the line does not show or breaks