Overview
Add one component. Assign a profile. The object has an outline. That is the whole setup — for a mesh and for a sprite alike — and everything below is what happens once you want more than the default.
Your material is never touched. Keyline does not swap the shader on your renderer, does not require a particular one, and does not add a pass to it. The outline is drawn from a separate hull with its own material, so your objects keep whatever they had — Lit, Shader Graph, a third-party toon shader, a character carrying a stack of custom passes. Nothing has to be re-authored to become outlinable, and removing the component leaves the object exactly as it was.
It is a per-object effect, not a fullscreen one. You can outline a single enemy through a wall in orange while a pickup two metres away pulses green, and everything without the component stays untouched. X-Ray decides per object which layers it is allowed to show through — glass only, walls only, or both — so one prop can be seen through a window and its neighbour through nothing at all. That is the trade against a post-process edge detector, which sees the whole frame at once and gives every edge in it the same weight.
Sprites are first-class in 1.2.0. Keyline Outline 2D gives a SpriteRenderer the same profiles, the same fifteen styles and the same passes, with the rim measured from a distance field baked out of the artwork — so it follows what is drawn, holes included. Pixel art gets its own field mode: the edge lands on texel boundaries, corners come out square, and the width is counted in whole texels of the source at any zoom and any Pixels Per Unit.
The part that is genuinely hard to write yourself is the hull. Flat leaves, single-sided cards and thin prongs turn into blades under a naive normal-based extrusion. Mixed mode decides per face whether to follow the surface normal or stay in the plane; Sheet Solidify gives a flat island enough thickness to hold a rim. Stretch the model to a non-uniform scale and the outline and its style keep their proportions. The same component covers a static prop, a skinned character, a foliage card and a texture-cut decal — it picks the hull it can build from the mesh in front of it.
Fifteen styles, and every one of them is tunable and works on every pass — rim, X-Ray, fill — on meshes, sprites and cutouts. Each pass picks its own blend mode, so the same colour reads as light over a dark scene and as ink over a bright one; Single Layer paints each pixel once where a hull folds over itself; adjustable edge softness smooths any style, with a stepped variant for pixel art.
URP and HDRP live in the same package and are selected automatically by the pipeline tag. A hard-edged outline needs no renderer feature, no prepass and no project setting; the optional Soft Edge pass is added and removed in one click. A Light shader profile is included for mobile.
Key features
- Per-object passes — outer rim, X-Ray rim for when the object is hidden, interior fill, and X-Ray interior fill, plus an optional cutout overlay on meshes. Each carries its own complete profile.
- Fifteen outline styles, every one of them tunable: Solid, Neon, Halo, Sketch, Pattern, Double, Electric, Rainbow, Gradient, Frost, Lava, Smoke, Crystal, Water, Fire.
- Sprites are first-class: Keyline Outline 2D gives a SpriteRenderer the same profiles, styles and passes, with the rim measured from a distance field baked out of the artwork rather than from an extruded hull — so it follows what is drawn, holes included. Sprite Atlas and per-frame fields for animation clips are supported.
- Pixel art is a first-class case: the sprite's distance field can be baked on the texel grid instead, so the edge lands on texel boundaries, corners come out square, and the width is counted in whole texels of the source — two texels of outline at any zoom and any Pixels Per Unit.
- X-Ray layer filtering: each component names the Unity layers its X-Ray may show through — glass only, walls only, both — and two objects behind the same wall can disagree. Costs nothing until a mask is actually narrowed.
- Seven blend modes plus Default, per pass — Alpha, Additive, Multiply, Screen, Lighten, Darken, Subtract — so the same colour can be laid over the frame as light, as ink, or as ordinary transparency.
- Single Layer: where a hull folds over itself, paint the pixel once instead of twice — for the styles where the overlap is a defect, not the look.
- Adjustable edge softness on every style and every pass, with a stepped ring-by-ring falloff for pixel art. On meshes it rides on the optional Soft Edge pass, added and removed in one click; without it the component behaves exactly as before, hard-edged and with nothing to install.
- Hard-mesh handling — Mixed expand decides per face which rule applies, Sheet Solidify thickens flat islands enough to hold a rim.
- Cutout from material alpha: the outline follows the shape the texture defines, not the one the mesh has, with double-sided rendering for every style and pass. Foliage cards, decals, sprites on quads.
- Uniform scale handling: stretch the model and the outline and its style keep their proportions instead of stretching with it.
- Merge groups draw several objects as one silhouette, explicitly or automatically, with no internal edges between them — and X-Ray unions across the group the same way.
- Skinned meshes follow the animation without re-baking per frame — all passes, on a rigged character.
- Width in world units, in constant screen pixels, or in texels of the source sprite, whichever the shot needs.
- Draw Config exposes queue, ZTest, ZWrite, Cull, depth bias and stencil state per object instead of keeping them as constants.
- Thirteen drop-in components for hover, selection, damage, gauges, waves and reveal — plus an arbiter that stops them fighting over the same object.
- Instance override: profiles are shared by default, and an object forks its own private copy the moment it needs to differ.
- Full scripting API, documented section by section in the manual.
Outline styles
What's included
- Two outline shaders — Keyline/Outline (Full) and the Light profile for mobile — each carrying a SubShader per render pipeline, plus the hidden Soft Edge, X-Ray occluder and 2D occluder shaders behind them. No Shader Graph dependency.
- Under Add Component ▸ Keyline: the mesh and sprite outline components, the two sprite occluders, Merge Group, Draw Config, and thirteen recipes in Runtime/Recipes/.
- Sixteen ready-made profile assets — one per style, plus a Light profile for mobile.
- 84 pattern textures (PNG, 256 × 256) for the Pattern style.
- A ten-chapter demo scene, built entirely from script and safe to delete — meshes, skinned character, cutouts, sprites and pixel art.
- Demo models, sprites and textures by Kenney (CC0).
- A 17-section HTML manual with 39 illustrations, plus a quick start — both offline, inside the package.
- README, CHANGELOG, License.txt and Third-Party Notices.txt at the package root.
Technical details
| Outline styles | 15 |
| Passes per object | rim, X-Ray rim, fill, X-Ray fill — plus an optional cutout overlay on meshes |
| Blend modes | 7 + Default, chosen per pass |
| Profile parameters | 110+ fields — the inspector shows only the ones the chosen style reads |
| Components | mesh outline, sprite outline, 2 sprite occluders, merge group, draw config, 13 recipes |
| Shaders | Full + Light outline shaders, Soft Edge, X-Ray occluders, 2D occluder — with shared .hlsl includes |
| Pattern textures | 84 · PNG · 256 × 256 |
| Demo | 1 scene, 10 chapters |
| Batching | 400 outlined objects → 7 SRP batches |
| Allocation | 0 bytes per frame from the outline runtime |
| Render pipelines | URP 17.x and HDRP 17.x — one package |
| Sprite field modes | 3 — Smooth (Euclidean, sub-texel edge) and Pixel Art 8-way / 4-way (texel grid) |
| Width modes | world units, constant screen pixels, texels (sprites) |
Requirements
- Unity 6000.3 or newer.
- Universal Render Pipeline 17.x or High Definition Render Pipeline 17.x — both ship in the same package and are selected automatically.
- The Built-in Render Pipeline is NOT supported.
- Tested on Windows (URP and HDRP), Android (Vulkan and OpenGLES3) and WebGL. Soft Edge switches itself off under single-pass stereo VR; outlines still render.
Tags
Version history
v1.2.0
- SpriteRenderer support: Keyline Outline 2D with the same profiles, styles and passes, plus two components for declaring what counts as an occluder in a scene that has no depth of its own. Sprite Atlas (Full Rect) and per-frame fields for animation clips.
- Pixel art fields: Field Mode bakes the sprite's field on the texel grid, with a diagonal costing one step (8-way) or two (4-way). The edge lands on texel boundaries, corners are square, and Width counts whole texels of the source. Rim Falloff fades the rim a whole ring at a time.
- X-Ray layer filtering: each component names the layers its X-Ray may show through, and Transparent Occluder Layers lets glass and water count as occluders.
- The cutout rim is measured from a baked distance field instead of by sampling the alpha on a ring — smooth at any zoom, one texture fetch at any width. Rim Samples is gone; Rim Softness and Rim Inset take its place. Double-sided rendering for every style and pass on cutouts.
- Five new styles: Lava, Smoke, Crystal, Water and Fire. Fifteen in total, and a profile ships for each. Fire and Smoke gained a second direction angle for meshes.
- Blend modes per pass, and Single Layer to paint each pixel once where a hull covers it twice.
- Optional Soft Edge pass for a soft rim on meshes, opt-in and removable in one click. Edge softness on sprites needs no pass.
- Uniform scale: outline and style keep their proportions on a non-uniformly scaled object.
- Draw Config exposes queue, ZTest, ZWrite, Cull, depth bias and stencil state instead of keeping them as constants.
- Rewritten inspector: only the fields the chosen style reads are shown, with width in the unit the mode uses.
- KeylineOccludedXRay is now KeylineXRayWhenHidden; the old name still compiles as a deprecated subclass, so nothing has to change on update.
v1.0.0
- Initial release.
- Per-object outlines, highlights and X-Ray for URP and HDRP in a single package.
- Four passes per object, ten styles, hard-mesh handling, cutout from material alpha, merge groups, skinned mesh support.
- Thirteen drop-in components and a ten-chapter demo scene.
FAQ
Do I have to change my materials or shaders?
Does it work on sprites and pixel art?
Does it work on flat meshes, foliage cards and thin geometry?
Can I control what the X-Ray shows through?
Does it support skinned and animated characters?
How expensive is it?
URP and HDRP — is that two packages?
Can I try it before buying?
Can I outline a group of objects as one shape?
What is the licence on the demo art?
Question about "Keyline"?
I'll help with setup and integration. Updates are free for buyers.
Contact support-
DocumentationOpen the guide →
