Skip to Content
DocumentationURP ModulesScreen Space Outline

Screen Space Outline

Screen Space Outline detects edges by sampling the Depth Texture and normal buffer, producing strokes that wrap silhouettes, normal creases, and inner edges with a single full-screen pass. Unlike inverted-hull outlines (which live inside the material), this module sees the whole scene — foreground props get outlined against background props, and inside-mesh creases ink themselves naturally. Screen Space Outline is an optional module added through the Renderer Feature Installer.

Video

A camera moving through a scene mixing several shader types, with clean black outlines inking every silhouette, inter-object edge, and inner crease consistently regardless of which shader each object uses.

modules/screen-space-outline/sso-scene.mp4

Depth and normal edge detection inking a whole scene in one pass.

When to use it

  • Cel-shaded projects that want comic-book outlines everywhere.
  • Scenes mixing many shaders (Genesis + URP Lit + custom Shader Graph) — one module inks them all.
  • Projects that cannot afford inverted-hull duplication on dense meshes.

How it works

Two operators run per pixel:

  1. A depth difference between neighbors detects silhouettes and inter-object edges.
  2. A normal difference detects inner creases on the same mesh.

Both feed a Roberts Cross kernel; the maximum of the two becomes the outline mask. The mask is multiplied by an artist-authored color and composited over the lit frame.

Renderer Feature setup

  1. Open Window → Genesis → Renderer Feature Installer and enable Screen Space Outline.
  2. Ensure the URP Renderer has both Depth Texture and Normals enabled (the Installer toggles them for you).
  3. Pick a preset: Anime, Comic, or Technical.
  4. Add the Genesis SS Outline Volume override for global tuning.

Settings

Inspector labelShader propertyTypeDefaultDescription
Outline Color_OutlineColorColorRGB(0, 0, 0)Multiplied over edges. A desaturated dark blue reads well in warm scenes.
Thickness_OutlineThicknessFloat1.0Pixel width of the stroke at 1080p; scaled by reference resolution.
Depth Threshold_DepthThresholdFloat0.02Depth difference required to count as an edge. Higher reduces false positives.
Normal Threshold_NormalThresholdFloat (0–1)0.4Cosine threshold for normal edges. Lower catches more inner creases.
Depth Fade_DepthFadeFloat50World distance over which outlines fade out.
Angle Sensitivity_AngleSensitivityFloat1.0Boosts edges seen at grazing angles.

Performance & quality

  • Cost is constant per pixel and does not scale with mesh count.
  • Half-resolution mode halves the pass cost; at 4K this is a significant win.
  • For thicker stylized strokes, prefer multiple Roberts Cross taps over a wider kernel — it produces fewer false positives.

Transparent objects do not write to the Depth/Normals textures by default. Enable Render Transparents to Depth in the Genesis material’s Shadow Configuration if you need outlines on glass.

Tips & gotchas

  • For anime line-weight variation, drive Thickness from a fullscreen mask (e.g. a hand-drawn line-thickness texture).
  • Combine with Outline (inverted-hull) for hero characters — the per-material outline adds an artist-tunable inner stroke while the module handles inter-object edges.
Last updated on