# Authored cycling anatomy

The hardware renderer uses a continuous, skinned human mesh derived from the **MakeHuman Community** base mesh, adult anatomical morphs, and original painted joint weights. MakeHuman's graphical assets are explicitly **CC0**, separate from its application source code. No MakeHuman application code is included.

- [Official split-license explanation](https://github.com/makehumancommunity/makehuman/blob/master/LICENSE.md)
- [Official system assets and skin licenses](https://static.makehumancommunity.org/assets/assetpacks/makehuman_system_assets.html)
- [Full CC0 asset license](./LICENSE-MakeHuman.txt)
- [Male source URLs and SHA-256 hashes](./sources.json)
- [Female source URLs and SHA-256 hashes](./sources-female.json)

The male anatomy has 25,102 vertices and 47,598 triangles; the female anatomy has 25,342 vertices and 48,030 triangles. Each uses a 22-bone cycling skeleton. Female riders use separately authored female anatomical targets and a matching skin texture, plus MakeHuman facial targets (a narrower jaw and chin, a smaller nose, fuller lips, higher cheekbones and brows, a slimmer neck); the male face gets a slightly squarer jaw. The lean and broad builds are MakeHuman muscle/weight macro morphs of the athletic body, shipped as per-vertex offsets (`buildLean`, `buildBroad`, tenths of a millimetre) and their smooth normals (`buildLeanNormal`, `buildBroadNormal`), with each bone's own joint motion removed, so they change girth and leave the rig, helmet, gloves and shoes fitted; the runtime also moves the shoulder joints and thickens the limb bones per build (`BUILDS` in `rider_pose.rs`). Spectators take a per-person share of the broad morph. `lips` marks the centre of the mouth for the lip tint in the rider and crowd shaders. Vertical landmarks are retargeted to the existing cycling rig. The 2K skin texture retains the original anatomical UV mapping and is tinted for each rider. Original helper geometry is excluded. At load time the bare hands fold into the glove cuffs, the sock tubes extend into the shoe collars, and a vertex-clustered ~8k-triangle body is derived for distant riders.

Every jersey carries the Everycol logo across the shoulder blades and the chest (drawn from `public/everycol-logo.svg` in `src/engine/riders.ts`), inked in the kit accent when it contrasts with the jersey. Kit regions (jersey, bib shorts, socks) come from the authored arm, leg and hand weights per pixel, so hems are smooth curves. Short hair is painted on the scalp, nape and sideburns from a per-vertex coverage mask; women's hair has no sideburns and sweeps over the temples, the tops of the ears and further down the nape. The helmet shell, eyewear, Y straps and ponytail are fitted to each body's own skull (a radius map of the head), and road shoes to its ankle, in `engine/crates/render/src/kit.rs`.

The bicycle, gloves and cycling equipment are original procedural game assets (`engine/crates/render/src/bike.rs`): aero tube profiles swept along smooth paths, a 42 cm drop bar with hoods, deep carbon rims and tyres, two-cross spokes, disc rotors and calipers, toothed chainrings, chain, cassette and derailleurs, saddle, bottle and cage, Look-style pedals, and mitts that wrap the bar. Rider kinematics live in `engine/crates/render/src/rider_pose.rs`: bone frames keep a fixed twist reference so limbs never spin about their own axis, the cleat stays on the pedal spindle with natural ankling, and the hands hold the hood horns or, in an aero tuck, the drops. Road speed drives wheel rotation, while measured cadence drives the crank and legs.

## Rebuilding and reviewing

`python3 scripts/import-rider.py` rebuilds the male binary mesh and metadata from the upstream CC0 data. Add `--gender female` to rebuild the female model (the male metadata must exist first for landmark retargeting). `scripts/import-rider-texture.mjs` rebuilds the male texture; add `--female` for the female texture. Run the texture importer after the matching geometry importer to append texture provenance. Both texture builds use the optional Sharp authoring dependency documented in that file. These tools are not runtime dependencies.

`node scripts/review-rider.mjs artifacts/rider-review female --headless` (or `male`) captures orbit, side, front, rear, face, hands and legs views of the actual renderer in Chrome, in the cruising, aero and standing poses, against the showroom's studio cove. `scripts/read-rider-fit.mjs` is an authoring utility for fitting pockets; raycasting is never performed when a player joins a running game.
