Grasshopper
A grasshopper at real size (1 = 4.5 cm long; the size knob scales it up to a 1.8 m giant): a tall, flat-faced head with big striped eyes and jaws, a saddle-shaped shield with a keel over the thorax, a ringed abdomen under two long folded wings, small front legs and huge striped hind thighs folded with the knees above its back and spiny shins. Walks on all six legs with an alternating tripod gait, the big hind legs stepping along. Green, brown or painted (green with yellow and black bands and red shins); short grasshopper or long katydid antennae.
- Size
- 0.02 × 0.02 × 0.06 m
- Triangles
- 2,414
- Kit
- Garden Bugs
Tune it
4 knobs: Colour, Antennae, Wings, Size.
Specs
- Size
- 0.02 × 0.02 × 0.06 m width × height × depth
- Triangles
- 2,414 of 6,000
- Draw calls
- 1 one vertex-colour material
- Legs
- 6 2 gait groups
- Stride
- 1 cm duty factor 0.55
- Foot slide
- 0.00 mm limit 1 mm
- Walk clip
- 0.019 m/s at playback speed 1
- 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.
import { createAsset } from 'https://gaitkit.com/cdn/grasshopper.mjs';
import { walker } from 'https://gaitkit.com/runtime/walk.mjs';
const grasshopper = createAsset();
scene.add(grasshopper); // rests on y = 0, front faces +Z
const gait = walker(grasshopper, { ground: (x, z) => terrainHeight(x, z) }); // or omit ground for a flat floor
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
grasshopper.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/grasshopper.mjs';
import { walker } from 'https://gaitkit.com/runtime/walk.mjs';
export function Grasshopper({ 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 grasshopper.glb (download below). It carries an in-place "Walk" animation.
@onready var anim: AnimationPlayer = $Grasshopper/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Walk")
anim.speed_scale = speed / 0.019 # Walk clip covers 0.019 m/s at 1x// Import grasshopper.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Walk");
animator.speed = speed / 0.019 // Walk clip covers 0.019 m/s at 1xUse the gaitkit MCP server: get_variant({ "id": "grasshopper", "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 |
|---|---|---|---|---|
color | choice | green brown painted | green | green (meadow grasshopper), brown (field or desert locust), painted (dark green with yellow and black bands and bright red hind shins). |
antennae | choice | short long | short | short (a grasshopper: thick antennae shorter than the body) or long (a katydid / bush cricket: thread-thin antennae sweeping back past the tail). |
wings | toggle | on / off | true | Long folded wings lying along the back past the abdomen (an adult). Off = a young nymph with short wing pads and a bare ringed abdomen. |
size | range | 1 to 40, step 0.5 | 1 | Uniform scale. 1 is real size (4.5 cm long); 10 is a 45 cm game-readable bug; 40 is a 1.8 m giant monster. |
Presets: meadow grasshopper {"color":"green"} · desert locust {"color":"brown","size":1.3} · painted katydid {"color":"painted","antennae":"long"}
Files
| File | What |
|---|---|
| grasshopper.glb Pro | GLB, default look · 443 KB |
| grasshopper.mjs Pro | ES module, every knob live |
| grasshopper.obj Pro | OBJ, static; colours in the .mtl |
| grasshopper.mtl | OBJ colours; keep it next to the .obj |
| grasshopper-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.