Gaitkit Open the lab
Roman Legionary, A walking Roman-style foot soldier about 1.75 m tall: segmented iron armour bands with shoulder plates over a red tunic, studded belt apron, neck scarf, hobnailed sandals, a helmet with cheek guards and neck guard, a big curved rectangular shield with a plain border and boss (no lettering or emblems), and a javelin or short sword. Style, crest, weapon and shield are knobs; pairs with the Ancient World kit.
Character · Walks on 2 legs

Roman Legionary

A walking Roman-style foot soldier about 1.75 m tall: segmented iron armour bands with shoulder plates over a red tunic, studded belt apron, neck scarf, hobnailed sandals, a helmet with cheek guards and neck guard, a big curved rectangular shield with a plain border and boss (no lettering or emblems), and a javelin or short sword. Style, crest, weapon and shield are knobs; pairs with the Ancient World kit.

Size
1.1 × 2.3 × 1.0 m
Triangles
3,058
Open in the lab Walk clip inside. The download carries the knobs you set here.

Tune it

4 knobs: Style, Crest, Weapon, Shield.

Specs

Size
1.1 × 2.3 × 1.0 m
width × height × depth
Triangles
3,058
of 6,000
Draw calls
1
one vertex-colour material
Legs
2
2 gait groups
Stride
44 cm
duty factor 0.6
Foot slide
0.00 mm
limit 1 mm
Walk clip
1.095 m/s
at playback speed 1
Moving parts
3
spine · rotate, chest · rotate, neck · rotate
Knobs
4
3 presets
Night lights
0
none

Passed the validator: real scale, rests on y = 0, front faces +Z, deterministic, planted feet never slide past 1 mm.

Use it

Code for the specimen as it is set up above; it follows your knobs.

JavaScript
import { createAsset } from 'https://gaitkit.com/cdn/roman-legionary.mjs';
import { walker } from 'https://gaitkit.com/runtime/walk.mjs';

const romanLegionary = createAsset();
scene.add(romanLegionary);                      // rests on y = 0, front faces +Z
const gait = walker(romanLegionary, { ground: (x, z) => terrainHeight(x, z) });   // or omit ground for a flat floor

let dist = 0;
renderer.setAnimationLoop(() => {
  dist += speed * clock.getDelta();
  romanLegionary.position.z = dist;
  gait.poseAt(dist);                  // feet stay planted, at any frame rate
  renderer.render(scene, camera);
});

More in the docs; agents can fetch all of this through MCP.

Knobs

KnobTypeValuesDefaultWhat it does
stylechoicestylized realistic chibi blockystylizedArt style of the whole figure: stylized (5.5 heads, chunky adventure-game look), realistic (about 7 heads, adult proportions), chibi (big head, 1.1 m) or blocky (voxel boxes).
crestchoicenone plume transverseplumeHelmet crest: none (plain marching helmet), a front-to-back red plume, or a side-to-side transverse crest that marks an officer.
weaponchoicejavelin short swordjavelinA heavy javelin held upright in the right hand (the short sword then hangs sheathed on the right hip), or the short sword drawn.
shieldchoicered blue green noneredThe curved rectangular shield on the left arm: red with a gold border, blue with a pale border, green with a gold border, or no shield.

Presets: line infantry {"crest":"none","weapon":"javelin","shield":"red"} · centurion {"crest":"transverse","weapon":"short sword","shield":"red","style":"realistic"} · little legionary {"crest":"plume","weapon":"short sword","shield":"blue","style":"chibi"}

Files

FileWhat
roman-legionary.glbGLB, default look · 329 KB
roman-legionary.mjsES module, every knob live
roman-legionary.objOBJ, static, no colour
roman-legionary-params.jsonknob schema, presets, night zones

Licence

Use it in games, apps, renders and client work, commercially and without credit. Do not resell it as an asset or train a 3D generator on it. The full licence.