Author a Blender Character Test Case
Scaffold an asset-generation test case of
asset_kind = "blender-character": a model builds a rigged, animated, skinned
character in headless Blender by editing a starter build.py and running
tcab-blend, which exports a skinned glTF character.glb plus a model.png
preview. Read
Authoring a Blender Character Test Case
for the full procedure;
Blender cases is the
authoritative schema.
Choose blender-character when the subject needs real topology, a hand-built
armature, or IK. When a signed-distance field is enough, the sibling kind is
Author a Skinned Character Test Case.
Layout
Section titled “Layout”A version lives at
test-cases/asset-generation/<difficulty>/<slug>/<version>/. A version with runs
recorded against it is frozen; revise a case by adding a new version.
test-cases/asset-generation/<difficulty>/<slug>/<version>/ test-case.toml # manifest: type, asset_kind, voxel, tool, output, model variants/ # one standalone TOML file per variant prompt.hbs # rendered into the harness instruction; not seeded changelog.md # required per-version entry; not seeded description.md # site blurb; not seeded specs/brief.md # the character and tool behavior; seeded specs/build.py # the starter Blender script the model edits; seededA run gets headless Blender and tcab-blend on PATH plus a seeded
blender.config.json carrying the bounding box, the authoring axes (+Z up,
facing -Y), the emitted glTF and preview paths, the build-script path, the
required animation names, and any required caller joints. The skeleton and
binding are the model’s to invent. Core emits character.glb and model.png, so
the manifest names neither, and the case declares no [[reference]].
- Pick a catalog slug, the character, and a
versionof the formvX.Y.Z. Choose a body whose credibility rests on real topology and rigging, readable at the bounding box from silhouette and palette alone. - Write
specs/brief.md: silhouette, proportions, and orientation, with the character built +Z up and facing-Y; gear baked into the mesh; the exact opaque#rrggbbpalette; theweapon_socketrule, an empty hand-parented bone with no vertex influence, where the weapon itself stays out of the mesh; each required animation and how it reads as continuous-skin deformation; and that all authoring runs throughbuild.pyandtcab-blend. Keep the brief self-contained. - Write
specs/build.py: a runnable-shaped, well-commented starter that loadsblender.config.json, clears the scene, and leavesTODOs forbuild_body_mesh(),build_armature()includingweapon_socket,bind_skin_weights(), andauthor_animation(name), ending by callingtcab_blend_export.export(config). - Write
prompt.hbs. It renders in strict mode against{{variant.*}},{{#each specs}},{{workspace}},{{time_limit_hours}}, and{{voxel.*}}. Point the model at the brief andbuild.py, and state the hard rules: build and rig only through Blender, bake the gear, keepweapon_socketempty, author every animation, and runtcab-blendbefore returning. - Write
test-case.toml: metadata, the requiredchangelog,type = "asset-generation",asset_kind = "blender-character", and thevariantslist. - Declare
[voxel]as the character’s bounding box plus abackground, and[tool]withbinary = "tcab-blend"andpreview = "model.png", a single file with no{part}token. Declare[output]withactions = "build.py", the recorded authoring trace that is re-run for provenance. - Declare
[model]with one[[model.animation]]per required animation, carrying aname, aloopflag, and anauto_playflag. Add a[[model.joint]]for each caller DOF a game drives at runtime, such asaim_pitch, fixing itsname,kind,axis, andmin,max, andrestlimits in degrees for a rotation. The bones, weights, and F-curves are the model’s. - Declare both seeded files as
[[spec]]entries.specs/build.pyseeds tobuild.pywithkind = "script". - Declare the single
overall[[domain]]. The character is judged as a whole against its brief on that one rating, so the case declares no[[review_item]]checklist, no[build], no[[check]], and none of the per-kind[canvas],[sheet],[ui],[material],[particle], or[audio]tables.
siege-rifleman is the flagship worked example.
Validate
Section titled “Validate”Run these for every variant.
npm run lint:specstcab prompt --test-case <slug> --version <version> --variant <variant>tcab seed --test-case <slug> --version <version> --variant <variant>prompt catches strict-mode template and manifest errors, including a stray
{part} token and a missing required table. seed writes the seeded repository
under tmp/, where you confirm the brief, build.py, and blender.config.json
are self-contained.
Next steps
Section titled “Next steps”- Run a Test Case to exercise it end to end.
- Review a Run to assess the produced character.