Dragon
A bus-sized fantasy dragon, about 8 m nose to tail with a 10 m wingspan. Flies by distance: slow, heavy wingbeats with the wingtips folding on the upstroke, the body lifting on each downstroke and the tail rippling behind; legs tucked. Eyes and throat embers glow at night.
- Size
- 11.4 × 2.9 × 11.7 m
- Triangles
- 2,002
- Kit
- Monsters
Tune it
4 knobs: Scales, Horns, Spines, Size.
Specs
- Size
- 11.4 × 2.9 × 11.7 m width × height × depth
- Triangles
- 2,002 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 13 m of travel per cycle
- Altitude
- 4.5 m above the ground
- Moving parts
- 12 wing_L · rotate, wing_R · rotate, wingtip_L · rotate, wingtip_R · rotate, tail_0 · rotate, tail_1 · rotate, tail_2 · rotate, tail_3 · rotate, tail_4 · rotate, neck_0 · rotate, jaw · rotate, body · slide
- Knobs
- 4 3 presets
- Night lights
- 2 eye, ember
Passed the validator: real scale, rests on y = 0, front faces +Z, deterministic.
Use it
Code for the specimen as it is set up above; it follows your knobs.
import { createAsset } from 'https://gaitkit.com/cdn/dragon.mjs';
const dragon = createAsset();
scene.add(dragon); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
dragon.position.set(0, groundY + dragon.userData.altitude, dist);
dragon.userData.tick(dist); // wings beat with the distance
renderer.render(scene, camera);
});import { useMemo, useRef } from 'react';
import { useFrame } from '@react-three/fiber';
import { createAsset } from 'https://gaitkit.com/cdn/dragon.mjs';
export function Dragon({ speed = 1 }) {
const model = useMemo(() => createAsset(), []);
const dist = useRef(0);
useFrame((_, dt) => {
dist.current += speed * dt;
model.position.set(0, groundY + model.userData.altitude, dist.current);
model.userData.tick(dist.current); // wings beat with the distance
});
return <primitive object={model} />;
}# Import dragon.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $Dragon/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 13 # one Loop = 13 m of travel// Import dragon.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 13 // one Loop = 13 m of travelUse the gaitkit MCP server: get_variant({ "id": "dragon", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
scales | choice | ember forest frost obsidian gold | ember | Colour family: ember (red with orange wings), forest (green), frost (ice blue and white), obsidian (black with red eyes), gold. |
horns | toggle | on / off | true | A pair of swept-back horns on the head. Off = a smooth-headed wyrm. |
spines | toggle | on / off | true | A row of dorsal spines from the head down to the tail. |
size | range | 0.3 to 1.5, step 0.05 | 1 | Uniform scale. 1 is about 8 m long; 0.3 is a pony-sized young dragon; 1.5 is a 12 m ancient. |
Presets: frost wyrm {"scales":"frost","horns":false} · young dragon {"scales":"forest","size":0.35,"spines":false} · ancient {"scales":"obsidian","size":1.5}
Files
| File | What |
|---|---|
| dragon.glb | GLB, default look · 290 KB |
| dragon.mjs | ES module, every knob live |
| dragon.obj | OBJ, static, no colour |
| dragon-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.