Duck
A farm duck about 0.4 m tall and 0.5 m long, as a green-headed mallard drake, a mottled brown mallard hen, a white pekin, a black cayuga or a khaki duck, with an optional crest pompom. Waddles on two short orange legs whose ankles bend back, webbed feet flat and planted, rolling side to side with the head bobbing and the tail wagging.
- Size
- 0.23 × 0.42 × 0.56 m
- Triangles
- 1,458
- Kit
- Animals
Tune it
3 knobs: Plumage, Crest, Size.
Specs
- Size
- 0.23 × 0.42 × 0.56 m width × height × depth
- Triangles
- 1,458 of 6,000
- Draw calls
- 1 one vertex-colour material
- Legs
- 2 2 gait groups
- Stride
- 8 cm duty factor 0.6
- Foot slide
- 0.00 mm limit 1 mm
- Walk clip
- 0.188 m/s at playback speed 1
- Moving parts
- 3 neck · rotate, head · rotate, tail · rotate
- Knobs
- 3 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.
import { createAsset } from 'https://gaitkit.com/cdn/duck.mjs';
import { walker } from 'https://gaitkit.com/runtime/walk.mjs';
const duck = createAsset();
scene.add(duck); // rests on y = 0, front faces +Z
const gait = walker(duck, { ground: (x, z) => terrainHeight(x, z) }); // or omit ground for a flat floor
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
duck.position.z = dist;
gait.poseAt(dist); // feet stay planted, at any frame rate
renderer.render(scene, camera);
});import { useMemo, useRef } from 'react';
import { useFrame } from '@react-three/fiber';
import { createAsset } from 'https://gaitkit.com/cdn/duck.mjs';
import { walker } from 'https://gaitkit.com/runtime/walk.mjs';
export function Duck({ speed = 1 }) {
const model = useMemo(() => createAsset(), []);
const gait = useMemo(() => walker(model), [model]);
const dist = useRef(0);
useFrame((_, dt) => {
dist.current += speed * dt;
model.position.z = dist.current;
gait.poseAt(dist.current); // feet stay planted, at any frame rate
});
return <primitive object={model} />;
}# Import duck.glb (download below). It carries an in-place "Walk" animation.
@onready var anim: AnimationPlayer = $Duck/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Walk")
anim.speed_scale = speed / 0.188 # Walk clip covers 0.188 m/s at 1x// Import duck.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Walk");
animator.speed = speed / 0.188 // Walk clip covers 0.188 m/s at 1xUse the gaitkit MCP server: get_variant({ "id": "duck", "want": "default look" })
then place the result and walk it with walker() so the feet stay planted.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
plumage | choice | drake hen pekin cayuga khaki | drake | Plumage: drake (mallard male: green head, white collar, chestnut breast, grey body, blue wing patch), hen (mottled brown mallard female), pekin (all white farm duck with an orange bill), cayuga (black with a green sheen), khaki (soft khaki brown). |
crest | toggle | on / off | false | A fluffy pompom crest on top of the head, like a crested farm duck. |
size | range | 0.4 to 1.3, step 0.05 | 1 | Uniform scale. 1 is a grown duck about 0.4 m tall; 0.4 is a duckling (pekin plumage reads best); 1.3 is a big farm breed. |
Presets: pond mallard {"plumage":"drake"} · duckling {"plumage":"pekin","size":0.45} · crested pekin {"plumage":"pekin","crest":true,"size":1.1}
Files
| File | What |
|---|---|
| duck.glb | GLB, default look · 186 KB |
| duck.mjs | ES module, every knob live |
| duck.obj | OBJ, static, no colour |
| duck-params.json | knob 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.