Game guide · source of truth
Production

Character pipeline

Step-by-step, AI-executable pipeline for player characters (5 lineages × 2 genders, 4 origins) — turnaround, base mesh, cleanup, rig, modular armour, textures, LODs, crowd versions, customization — with tests and logs at every stage.

Goal: one canonical humanoid that every lineage, outfit and animation shares. It is built in small, scripted Blender steps that an agent can run headless, test and log. Prove the whole pipeline on Boran (human male) first, then Saran (female), then the lineages. Never build all 16 at once.

Character pipeline — prove on Boran first
  1. 1Turnaround
    A-pose front/side/back
  2. 2Base body
    MPFB2 + height test
  3. 3Lineage shapes
    ears, tusks, tail, antlers
  4. 4Retopo & UV
    clean, 512 px/m
  5. 5Rig
    Rigify → game skeleton
  6. 6Modular split
    hide masks per slot
  7. 7Starter armour ×3
    lamellar, leather, robe
  8. 8Textures
    2K atlas → KTX2
  9. 9LODs + VAT
    crowd version
  10. 10Export + validate
    glTF, budgets
  11. 11In-engine clip
    owner review

◆Inputs

Preparation gate: establish the versioned mannequin and match hierarchy, rest pose, joint axes, bind matrices, grips and sockets before production bodies. Run the animation self-review on body/height extremes and representative armour; a shared bone-name list alone does not establish compatibility.

  • Design: attributes.json (origins, lineages, presets), weapons.json (grips), accepted art (/art/concepts/origins, lineages, /art/ui/rework/origin-*).
  • Contracts: gameplay capsule 0.35 m × 1.8 m (identical for every body), budgets from Performance.
  • Tools: Blender 4.2 LTS (headless), Rigify (bundled), MPFB2 (MakeHuman plugin for Blender, CC0 base meshes); armour pieces may come from the owner's hand-made Tripo models (ADR-033), never rigged in Tripo.
  • Base body plus separate armour (ADR-033): bodies are modelled and rigged in a thin, close-fitting undersuit (undersuit turnarounds per lineage and gender); armour, robes and outer clothes are separate meshes per slot (armour-piece sheets). The armoured turnarounds ART-CHR-050/051 are design reference only.

◆Stages (each stage = one or more logged tasks)

#StageHow (agent)OutputTest (logged)Evidence
1Turnaround sheetimage model with ART-CHR-050/051 prompts (owner/Codex)front/side/back A-pose PNGowner compares with portrait; views aligned (script checks heights ±2%)sheet + note
2Base bodyMPFB2 human with proportions from the sheet (height 1.85/1.72 m), tools/blender/char_base.py.blend with body + default righeight, foot plane at z=0, symmetry, ≤ 15k tris bodyturntable PNG ×4
3Head & lineage shapingsculpt/blend-shapes per lineage (orc jaw/tusks, elf ears, vanara muzzle + tail, auralin antlers + scales)shape keys + attachment meshesbounding box within capsule visual limits; no gameplay changeside-by-side render
4Retopology & UVkeep MPFB topology for deforming areas; decimate accessories; Smart UV for propsclean mesh, UV0 non-overlappingno non-manifold, normals out, texel density 512 px/m ±15%wireframe render
5RigRigify meta-rig → generate → bake to the Zoen game skeleton (65 deform bones, names in Animation)armature + weights≤ 4 influences/vertex, no zero-weight verts, 20-pose deformation test (shoulder/hip/knee extremes)pose sheet render
6Modular splitseparate body regions: head, torso, arms, hands, legs, feet; hide masks per armour slotbody parts + mask tablecovered parts hidden ⇒ no clipping in 20 poses with each armour setclipping report
7Starter armour ×3lamellar (Stoneward), scout leather (Windrunner), scholar robe (Scholar) fitted with Surface Deform; weights transferredarmour meshes per slot≤ budget per slot; deformation test passes; silhouette reads at 64 pxarmour turntables
8Texturesbake AO/curvature → base colour painted (image-model texture pass or hand paint) → 2K atlas → KTX2material + texturesPBR ranges (metal 0/1, roughness 0.3–0.9), no baked lighting seamsmaterial ball + body render
9LODs + crowddecimate LOD1/2; bake VAT (vertex animation texture) for 8 core clips at LOD2LOD meshes, VAT texturestri budgets; VAT error < 1 cm vs skinnedLOD comparison strip
10Export + validateglTF 2.0 .glb (+Y up, metres, apply transforms), meshopt compressionart/build/characters/*.glbtools/validate_glb.mjs: bone names, scale, tris, materials, size ≤ budgetvalidator JSON
11In-engine checkload in Combat Lab, play idle/run/attack, capturescreenshot + 10 s clip0 console errors, feet on ground, weapon in handclip

◆Customization (cosmetic only)

OptionImplementationConstraint
Hair (8 styles/presentation, 10 colours)separate skinned meshes on the head bone; colour by shader parameterhidden by helmets unless "show hair"
Eyes (8), skin (10 tones)material parameters—
Height 160–195 cmuniform scale of the visual root + leg/spine bone scalecapsule, reach and timings never change
Fitness lean → muscular2 shape keys, also driving the armour corrective keysdeformation test at both extremes

◆Lineage retarget rules

All lineages use the same skeleton and bone names. Differences are proportion offsets and cosmetic attachments (tail chain, antlers, ears) that are animated by secondary motion only. Hands and feet are solved with IK so weapons stay in hand and feet on the ground (Animation).

◆Example task breakdown (M3)

M3-01 turnaround review → M3-02 MPFB base body + height test → M3-03 retopo/UV checks → M3-04 Rigify → game skeleton bake + weight test → M3-05 hide masks + clipping test → M3-06 lamellar armour fit → M3-07 textures → M3-08 LODs + VAT → M3-09 export + validator → M3-10 in-engine clip + owner review. Then repeat 02–10 for Saran (faster with templates), then the lineage deltas.

Source: zoen/docs/production/CHARACTERS.md · 917 words · edit the Markdown, not this page.