Skip to content

Create a Mesh Model Variant

Add a variant to an existing static meshed asset-generation version (asset_kind = "mc-model", "sn-model" or "dc-model", one model sculpted from a signed-distance field and meshed by the mc, sn or dc binary). Creating a Mesh Model Variant is the full procedure.

A variant varies the brief the model sculpts toward: a tighter palette, a stricter operation budget, or a required CSG technique such as mirror-only symmetry, hard unions, or dc --sharp edges. It may also declare its own [voxel] table, which replaces the case’s field bounds for runs of that variant. The asset_kind is version-level, so a variant keeps the case’s meshing binary. An asset-generation case declares no references, so resolution rejects a reference on the case or on any variant.

  1. Choose a consistent slug (symmetric) and display name (Mirror-Symmetric) naming the constraint the variant imposes. Favour one a reviewer can observe in the extracted mesh.
  2. Write specs/<slug>.md as an additive brief, stated as a delta against the common brief (“same subject, volume and mesher, except …”) with precise, testable constraints such as exact colors, an operation cap, or the required CSG technique. It may reference the common specs. It may not reference another variant’s spec.
  3. Create variants/<slug>.toml, a standalone TOML file whose top-level keys are the variant’s fields, and add its path to the variants list in test-case.toml. The first entry in that list is the default variant.
variants/symmetric.toml
slug = "symmetric"
name = "Mirror-Symmetric"
description = "Same subject and mesher, built left/right symmetric with the mirror op."
spec = [{ source = "specs/symmetric.md" }]

A spec entry’s dest defaults to its source with any trailing .hbs removed. Spec entries are additive on the common specs, and within one variant two seeded entries may not share a dest. An asset-generation case is judged on one overall rating, so a variant declares no [[review_item]].

A variant that declares a [voxel] table runs at those field bounds in place of the case’s. Declare width, height, depth and background exactly as the case does. A brief that has to state its dimensions reads them from the spec-template context as {{voxel.width}}, {{voxel.height}}, {{voxel.depth}} and the inclusive maximum index on each axis, so one .hbs brief serves every size.

Terminal window
tcab seed --test-case <slug> --version <version> --variant <new-variant>
tcab prompt --test-case <slug> --version <version> --variant <new-variant>

Seed and render the new variant, then repeat for the existing variants to confirm nothing else changed, the brief resolves self-contained, and each variant keeps the case’s meshing binary.