Skip to main content

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​

  1. Pick one converted material.
  2. Turn on Enable Normal Outline.
  3. Leave Outline Width at 1.
  4. 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.

The character's upper body side by side with the normal outline off and on

Normal Outline​

Basic setup​

  1. Turn on Enable Normal Outline.
  2. Choose a Width Mode.
  3. 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.

URP needs the Renderer Feature

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 labelWhat it changesSuggested starting valueRaise it / lower it
Outline WidthThe thickness of the lineLeave at default (1)Raise it and it thickens; at 0 it disappears
Outline ColorThe color of the lineDarker than the baseThe closer to black, the stronger the cartoon look
Outline Tint StrengthHow much the color blend mode takes effectLeave at default (1)Lower it to 0 and the blended color has no influence
Pressure ContrastThe size of the per-area thickness differenceLeave at default (2)Raise it and thin areas get thinner; at 0 pressure is ignored
Far-Distance Minimum PixelsThe minimum thickness the line keeps at a distanceLeave at default (0.95)Raise it and the line survives at a distance; at 0 it looks broken up
Depth BiasHow far the whole line is pushed forward or back0Raise it and buried lines emerge; raise it too far and it floats in front of the face
Protect Outline From DOFKeeps depth-of-field blur from erasing the lineLeave 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.

ValueWhat it reads
ConstantReads nothing and uses the width as-is
VertexAlphaVertex color A
VertexRedVertex color R
WidthMaskThe width mask texture
OutlineNormalUV8The 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.

Apply to Inner Outline works even with the normal outline off

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​

  1. Set Pressure Source to VertexAlpha or VertexRed.
  2. Put the renderer that uses this material under your selection. Picking the MingToon Manager works.
  3. Select only one material.
  4. 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.

The outline width painting overlay in the Scene view over a painted mesh

Vertex painting writes the mesh asset straight to disk

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​