Unity Lab · Materials · Dye Craft · verified autopilot win + lose, live telemetry

Dye Yard

A village textile dye yard where color is chemistry you can misjudge. Steep white cloth in indigo, madder or weld and the shade builds in real time - but cloth DRIES LIGHTER than it looks wet, so the dyer's skill is pulling darker than the commission swatch reads. Deep greens and plums need an overdye across two vats (weld then indigo makes green, exactly like real dye, because the color model is multiplicative transmittance). Hang each bolt on the line, watch it lighten as it dries, and fill five commission swatches before nine bolts of cloth run out; every steep spends the vat's strength, so late dips build slower in a paler, quieter vat. There is no keybind menu - every verb is a click on the world: basket, vat, line, board, well. AI agents authored the whole piece end to end: concept painting, six Blender-coded asset kits, the Unity scene, and a G-dorian work song for nylon guitar, viola, pan flute, marimba, taiko and a reserved glockenspiel reward ladder - every sound a sampled instrument.

Play it now

CLICK the world: basket takes cloth · vat steeps / pulls · line hangs · board delivers · well discards · P pauses · 8.6MB payload, playing in ~20s

▶  Play

The concept is the contract

The piece was concepted first — an AI key-art painting — and its asset kits were then code-modeled in headless Blender and audited against that concept, unit by unit, until clean. The pair below is the contract and the live build.

AI concept painting
1 · AI concept
live in the engine
The same yard, live in the engine
Concept prompt

The verbatim prompt file was lost in a session outage between concept generation and close-out (recorded honestly in the lab ledger). The concept painting above is the authored artifact the piece was audited against: a village textile dye yard - three coopered vats of indigo, madder-red and weld-gold liquor with cloth draped over their rims and a dyer's pole across two of them, graded drying lines, a stone dye house with terracotta roof and smoking chimney, a stone well, wicker baskets of white cloth, dye-stained flagstones, green hills and cumulus sky.

Code-modeled in Blender

Six asset kits were modelled by agents writing Blender code against the platform sculpt kit — no downloaded models anywhere — and audited render-by-render (23 judged unit rounds to clean) before entering the engine. The engine re-tints the cloth kit per dye state at runtime; one material per mesh is the contract.

dye vat kit
U1 · Coopered vat — stave lathe, iron hoops, pole-rest markers (5 judged rounds)
cloth kit
U2 · Cloth kit — rim drape with wrap radius, 3 fold-variant panels, bolt stack (6 rounds)
dye house
U3 · Dye house — arch door recess at mm-proud offsets, tiled roof, chimney (5 rounds)
well and baskets
U4 · Well + coiled baskets — interior liner seals the weave (4 rounds)
posts and commission board
U5 · Line posts + commission board with 5 engine-tinted swatch cards (1 round)
tree and wall kit
U6 · Lobed tree variants + drystone wall modules (2 rounds)

Measured, honestly

MeasureValueConditions
glb payload8.57 MB, largest 2.10 MB6 asset kits; prune+dedup only — quantize was measured folding mesh pivots into node transforms and burying a re-seated drape, so it was rejected with the finding
Source triangles~30,500summed across the six kits, parsed from the glb accessors
Unity build38.2 MB (11.8 wasm + 26.3 data)Unity 6 WebGL, entirely code-built scene, Minimal template
Blender unit rounds23 judged rounds to cleanvat 5 · cloth kit 6 · dye house 5 · well+baskets 4 · posts+board 1 · trees+wall 2
Engine rounds7 (r1-r3 + r4-r7 after a 3-day credential outage)audit-until-clean on the live URL; every fix round rebuilt, redeployed, md5-verified
Boot to first frame19.4-31.5 sSwiftShader (CPU) audit rig at host load 7-25; GPU browsers are far faster
Autopilot win5/5 delivered by game-minute 3 — 3 perfect, 2 acceptedmatch distances 0.026 / 0.064 / 0.037 / 0.052 / 0.042 against tolerance 0.10 (perfect < 0.045); the green and plum are two-vat overdyes
Honest rowsprompt file lost; 2 rounds burned on quantize; 34 audio-load warningsthe concept prompt was lost in a session crash before its save; gltf-transform quantize cost two engine rounds before the pivot-fold was root-caused; first plays of sampled clips log a Unity "sound not loaded yet" warning (a LabComposer preload improvement is queued) — none of the three visible to a player

Made by AI, compiled by the real Unity 6 engine

The color model is multiplicative dye transmittance: each steep multiplies the cloth color toward the dye's transmittance curve, so weld over indigo yields green the same way real dye does, and the five commissions are SIMULATED through the identical model at authoring time - achievable by construction. Wet cloth displays at ×0.72 shade and dries by lifting 28% of the way back toward undyed white, which is the judgment the whole game trains. A closed-loop telemetry autopilot (the lab's audit instrument) drove the real click verbs end to end on the live build: it read the piece's own steep telemetry, pulled at computed depth targets, dried, overdyed and delivered all five commissions to a verified WIN, then proved the pause and the out-of-cloth LOSE path in the same session. In the shipped run the autopilot filled all five commissions by game-minute three (3 perfect, 2 accepted), then proved the pause and the out-of-cloth lose in the same session — 0 console errors across 38 telemetry lines.

What this piece earned

Multiplicative dye model
Overdye mixes like real dye: weld × indigo = green, madder × indigo = plum. Commissions are simulated through the same model, so every target is reachable.
World-as-readout teaching
Line two ships pre-hung with the SAME weld dye at wet / half / dry, so the wet→dry lighten is taught by looking at the yard, not by a text wall.
Click-the-world verbs
No keybind HUD: basket, vats, line pegs, commission board and well are the interface, raycast under a fixed yard camera that dollies toward the active vat.
Telemetry autopilot audit
The piece logs steep depth, dry prediction and best-commission distance every 0.5s; the audit parses its own console feed and plays to a real win — screenshots alone cannot prove a color-judgment loop.
Composed sampled score
G dorian at 72 BPM: nylon-guitar bass walk + strums, viola drone, pan-flute work song, marimba water figure, taiko plunges — and a glockenspiel ladder reserved for commission matches. 42 note files, 3 ambience beds.
Authored atmosphere
Three ridge ranks pre-lerped toward the horizon color, cloud quads placed by computed elevation, an inward-wound gradient sky ring, and a 12,600-blade merged-mesh grass field in three tones.
STEEP_RATE 0.15/sDRY_LIFT 0.28WET_SHADE ×0.72MATCH 0.045 / 0.10STRENGTH −0.15 per pull, floor 0.35DRY_TIME 12 sG dorian @ 7242 note files + 3 bedsfog 0.0038 exp²sky renderQueue 2900