Tools · Procedural 3D asset engine
Kiln is a procedural 3D asset pipeline. Every asset is a declarative JSON recipe: a generator, a seed and every parameter. Kiln compiles it into a game-ready glTF 2.0 model with a JSON sidecar: a chair, a cottage, a whole market town, a rigged archer mid-draw, even the town’s music. Builds are deterministic, so the same recipe yields the same bytes every time. No hand modelling, no AI image generation: every model is computed.
How it works
Each kind of thing has a generator, a Python module: doors, windows, trees, seating, buildings, towns, characters. Each asset is a registry entry, a JSON recipe that names its generator and pins every parameter. A new oak is a new entry; a new kind of thing is a new generator. The catalogue grows by adding entries to the registry, not by modelling.
kiln make builds from it. Width, depth, leg count, splay, slats and wood colours are all explicit parameters; nothing falls back to a default.A JSON entry names a generator, a seed and every parameter. There are no default values anywhere: a missing parameter is an error, not a guess, so the recipe fully specifies its asset and diffs and versions like code.
The generator emits geometry, materials, skeleton and animation clips as a .glb, plus a sidecar recording triangle count, bounds, node and clip names, a SHA-256 content hash and the licence.
Doors, windows and wall panels are assets in their own right. Buildings reference them and towns instance the buildings. Change the door, and every house that uses it rebuilds with it.
Every asset goes through Godot’s own glTF importer and is measured: bounds, meshes, skeleton, clips. It passes only if the engine agrees with the sidecar.
Kiln renders its own output: turntables from the game’s camera angles at on-screen size, animations sampled frame by frame, and lineups of whole sets.
One command ships finished assets to a game’s inbox under a versioned contract (units, scale, budgets, bone and clip names), with the licence and hash of every file.
Composition
A building generator assembles walls, doors, windows, stairs and chimneys, and furnishes its rooms from the furniture generators. A town generator lays out streets, a square, back lanes and gardens, and places the buildings, wells, market stalls, lamps and trees. Shared parts are stored once: a window reused two hundred times in a town is one mesh.
Variety
Change the seed and the same town recipe yields a different town: other streets, other houses on other plots, a new market square. Change one number and a chair becomes a stool. Variety comes from shape, size and colour, not only from a reshuffled seed.
Reproducible
All randomness comes from named, seeded streams (FNV-1a), so a recipe always produces the same bytes. Each recipe also pins the SHA-256 hash of the asset it makes. When Kiln changes, drift detection rebuilds and re-hashes every asset and names any that moved, so a week spent on the tree generator provably leaves every house unchanged.
When a generator gains a parameter, every existing recipe is retrofitted with the value that reproduces it exactly. Old assets never drift.
Buildings
In motion
Assets carry their own animation: doors open, chests open and can be left looted, lanterns flicker, the well bucket sways, chimneys smoke, fountains spray and the mill’s sails turn. Characters share one skeleton, so every motion works on every body.




Towns, wilds and the small things
Between towns, a wilds generator lays out streams with fords and stepping stones, standing stones, ruins, camps and barrows. Every placeable thing carries tags for what it is for and where it may stand, and Kiln refuses to put anything where it doesn’t belong: you won’t find a signpost in a cellar.
The furniture and props get the same care as the buildings: chairs, beds, cupboards, shelves of books and jars, anvils, cauldrons, hearths, candles, tankards, chests, barrels and sacks, each from its own generator, each with its states.
Characters
Sound
Kiln also composes and renders music. Instruments are JSON recipes; themes are melodies with their harmony; pieces are built from themes, with sections in different keys, development and variation. It writes long-form town music that keeps changing for eight minutes and more without repeating, and each piece can carry a combat layer that plays in step with it. Everything renders to WAV or Ogg, reproducible to the byte like the models.
Built for production
Built with Python 3 · NumPy · glTF 2.0 · Godot 4 (validation and rendering) · Blender with MPFB · FNV-1a seeded streams · SHA-256 fingerprints · libsndfile and Ogg Vorbis. Buildings, props, trees, rocks, creatures and music are computed from scratch. Characters are built on open CC0 foundations: MakeHuman base bodies and garments, and Quaternius animation clips retargeted to Kiln’s skeleton.
Kiln is the 3D counterpart of TiGen, our 2D tile and sprite engine. Both are in-house tools and are not released.