Escutcheon
A downloadable asset pack
Escutcheon
Illustrated character sheets, generated from the stat block you already have.
Point it at a character and it composes a finished sheet: a heraldic crest built from their class and house, an emblem for every attribute chosen from your own attribute names, a border that grows more ornate as they advance, merit roundels for their titles, and rank pips for their level.
Your players see it. That is the point.
Nothing in this package is an imported image
Every mark is drawn in C# by a software rasteriser that ships with the tool as readable source. There is no sprite atlas, no texture, no shader, no material and no network call anywhere in the art path.
That is not a technical boast, it buys you four things:
- It works on Built-in, URP and HDRP with no variants and nothing to configure, because there is no shader to break.
- It is deterministic. The same character produces byte-identical artwork on every machine and in every session. The test suite asserts this.
- It runs headlessly. No graphics device. It works in batch mode, on a build agent, and in an EditMode test.
- It scales. The same emblem is drawn at 44 pixels in the attribute grid and at 300 on the crest, from one code path.
The honest caveat, stated up front: all of that is CPU work, so composing a sheet takes seconds, not milliseconds — measured at roughly 17 s for 450×600 and 35 s for 900×1200 on a busy desktop, less on an idle one. This is a screen you build when a character changes and then cache, not something to call every frame, and the tool is built that way throughout: the editor window previews at 600×800, the demo composes each sheet the first time you page to it, and the export button bakes a PNG when you want the big version.
What is in it
| 48 attribute emblems | eight virtues of six: Might, Swift, Vigour, Lore, Spirit, Guard, Edge, Fortune |
|---|---|
| 24 heraldic charges | beasts, works and the world — lion, wolf, stag, raven, serpent, boar, eagle, bear, tower, crossed swords, key, crown, anchor, gauntlet, chalice, wheel, sun, moon, star, tree, mountain, wave, rose, flame |
| 12 border treatments | fillet, dentil, chevron, rope, chain, meander, vitruvian, laurel, oak, thorn, cable, filigree |
| 8 heraldic tinctures | Gules, Azure, Vert, Sable, Purpure, Or, Argent, Sanguine — authored ramps, not a hue rotation |
| 8 field divisions | plain, per pale, per fess, quarterly, per bend, per chevron, per saltire, barry |
| 7 ordinaries, plus plain | fess, pale, chevron, bend, cross, saltire, chief — or none at all, which is the eighth choice |
The crest alone is 24 × 8 × 8 × 8 = 12,288 distinct coats of arms, before a single attribute emblem is drawn. None of them is stored anywhere. They are drawn when you ask for them.
Your words choose the art
AttributeEntry.Name is not a label. It is the primary input to the emblem.
A stat named Ferocity draws a bared fang. Warding draws a lapped scale. spellPower draws the orrery — the tokeniser splits camelCase, SCREAMING_SNAKE and digits, so MAX_HEALTH, critChance and armour_rating all resolve without you renaming anything in your project.
Matching is by whole word, so Intimidation does not quietly become int.
If nothing in a name is recognised the emblem is derived from the character key instead. That result is stable and consistent, just arbitrary rather than apt. The editor window tells you which attributes matched by name and which were derived, so you can see at a glance whether renaming one stat buys you a better sheet.
The crest works the same way. Calling is read first, then each Mark, then the hash. A Wolfsbane Ranger bears the wolf because you said so.
Two members of one house come out matching
Field division, border style and tincture are all derived from the house, not the character. So a party's sheets read as a party, differenced by their own charges and their own marks. That is what heraldry actually is, and it is one line of your data.
It draws no text, deliberately
Your game already has a font, a localisation system and an opinion about type. Baking glyph shapes into the artwork would fight all three and make the sheet untranslatable.
Instead the composer reserves the space and tells you where it is: NamePlate, CallingPlate, MarksPlate and one rect per attribute, all in UV space, which converts directly to a RectTransform, a sprite rect or a world-space quad. The demo scene does the whole lettering job in about forty lines with TextMesh. Adapt it to TMP, UGUI or UI Toolkit as you prefer.
Integration is a few lines
You almost certainly already have a character class with fifty fields on it. Do not migrate it.
CharacterRecord ToRecord(MyHero hero)
{
var attrs = new List<AttributeEntry>();
foreach (var stat in hero.Stats)
attrs.Add(new AttributeEntry(stat.DisplayName, stat.Current, stat.Max));
return CharacterRecord.Create(
hero.Name, hero.ClassName, hero.FactionName, hero.Level, attrs, hero.Titles);
}
SheetPage page = SheetComposer.Compose(ToRecord(hero));
That is the integration. No prefab to configure, no atlas to rebuild, no art to import.
What ships
- The full package under
Assets/CSAF/Escutcheon/, every script in a named, platform-constrained assembly definition, editor code Editor-only, and noResources/folder. - A demo scene you open and press Play on. Eight sample characters, composed at run time, paged with the arrow keys.
- An editor window (Window ▸ CSAF ▸ Escutcheon Character Sheet) with a live preview, the derivation panel, and PNG export.
- Bulk bakers for every sample sheet, the 48-emblem contact sheet, the 24-charge contact sheet and the 12-frame sampler.
- Raw, readable, commented C# source. The corpus is meant to be extended, and the comments explain why each construction is the way it is rather than restating what the line does.
Unity 2022.3 or newer. No third-party dependencies.
Documentation
The complete user guide is readable before you buy: https://github.com/onefreeman1337/csaf-releases/blob/main/docs/escutcheon/README.md
From the same workshop
Every one of these generates its artwork in C# from a hand-authored corpus, the same way this does.
- Bestiary Codex — illustrated creature pages composed from your stat blocks. https://csaf.itch.io/bestiary-codex
- Provenance Atlas — armoury plates derived from where your equipment came from. https://csaf.itch.io/provenance-atlas
- Synthesis Web — the same derivation idea applied to crafting recipes. https://csaf.itch.io/synthesis-web
- Constellation Atlas — generated star-chart skill trees. https://csaf.itch.io/constellation-atlas
- Boughwright — generated skill-tree node marks. https://csaf.itch.io/boughwright
Licence
Use it on unlimited projects, commercial or free, forever. Keep 100% of your revenue. The artwork it generates for your characters is yours, with no attribution and no restriction on where it appears. Do not resell the tool itself, and do not repackage the generated sheets as a standalone art pack. Full terms in LICENSE.txt.
AI disclosure: the code and the artwork in this package were produced with AI assistance. The sheets themselves are not made by an image model — they are drawn in code by the rasteriser included here, from a corpus of 72 hand-authored silhouettes you can read, edit and extend.
| Published | 1 day ago |
| Status | Released |
| Category | Assets |
| Author | CSAF — Core Systems Asset Factory |
| Made with | Unity |
| Tags | Character Customization, Characters, character-sheet, Fantasy, Generator, heraldry, Medieval, Procedural Generation, Unity, User Interface (UI) |
| Languages | English |
| AI Disclosure | AI Assisted, Code, Graphics |
Purchase
In order to download this asset pack you must purchase it at or above the minimum price of $19.99 USD. You will get access to the following files:








Leave a comment
Log in with itch.io to leave a comment.