Skip to Content
DocumentationFeaturesOutline

Outline

Outline is the keystone of any toon stack — a hard ink stroke around the silhouette of a mesh. Genesis ships an inverted-hull outline as a second material pass, plus a renderer-feature module for screen-space outlines when you need pixel-perfect edges.

Video

A toon character orbited by the camera so the inverted-hull outline traces the silhouette and stays consistent as the view distance changes.

features/outline/outline-orbit.mp4

The inverted-hull outline tracing a toon character's silhouette.

When to use it

  • Toon characters — the canonical anime ink line.
  • Comic and illustration — pairs with Posterize for the full comic stack.
  • Gameplay readability — outline enemies in tactical games.
  • Selection feedback — a runtime-toggleable outline for picked units.

Modes

  • Inverted hull — a second pass expands the mesh along its normals by _OutlineWidth, flips the cull mode to Front, and writes the outline color. Width scales with camera distance.
  • Screen-space (via module) — runs as a renderer feature on the depth and normal buffers, holding a steady pixel width regardless of distance. Genesis drives both modes from the same color and width properties.
Screenshot

Side-by-side of the same mesh with an inverted-hull outline (width scaling with distance) and a screen-space outline (constant one-pixel edge), labelled Inverted hull and Screen-space.

features/outline/outline-modes.png

Lit material with no edge stroke.

A crisp black outline tracing the silhouette, scaled by camera distance.

Off
Inverted hull · black

The same material with and without the inverted-hull outline. Drag to compare.

Properties

Inspector labelShader propertyTypeDefaultDescription
Enable Outline_OutlineEnabledToggleOffMaster toggle. Adds a second mesh pass.
Outline Color_OutlineColorColorRGB(0,0,0)Ink tint written by the outline pass.
Outline Width_OutlineWidthFloat (0–0.05)0.004World-space hull offset.
Fade Start_OutlineFadeStartFloat (0–100)5.0Distance where the outline begins to shrink.
Fade End_OutlineFadeEndFloat (0–100)30.0Distance where the outline disappears.
Noise_OutlineNoiseFloat (0–1)0.0Sinusoidal width wobble for a hand-drawn feel.
Z Offset_OutlineZOffsetFloat (-1–1)0.0Depth bias to push the outline behind or in front of the mesh.
Use Vertex Color_OutlineUseVertexColorToggleOffMultiplies width by vertex-color R for per-vertex painting.

Usage

  1. Enable Outline and pick a color (black is classic; a warm dark brown reads softer).
  2. Set Width between 0.002 and 0.008; too high and the outline pokes through the mesh.
  3. Tune Fade Start / End so the outline disappears at gameplay distance.
  4. For a hand-drawn feel, set Noise to 0.1–0.3.
material.SetFloat("_OutlineEnabled", 1f); material.SetColor("_OutlineColor", new Color(0.05f, 0.05f, 0.1f)); material.SetFloat("_OutlineWidth", 0.005f);

Tips & gotchas

  • Hard-edged meshes split the outline: vertices at hard edges have duplicate normals, so the hull tears. Use the Mesh Utility to bake soft normals into UV3 or tangents.
  • The outline does not respond to lighting by design — it is an ink stroke, not a shaded surface.
  • Inverted hull adds a full extra draw. Group outline-eligible objects into one render layer to keep batching tight on mobile.
  • Pixel-width screen-space outlines need adjustment for per-eye resolution in single-pass stereo.
Last updated on