Airliner
A twin-engine passenger jet about 38 m long with a 35 m swept wing, two underwing turbofans whose fans spin with distance flown, rows of cabin windows and retractable landing gear. Plain generic paint with a coloured tail and no logos; windows and nav lights glow at night; it cruises 20 m up in the lab.
- Size
- 34.6 × 11.2 × 38.9 m
- Triangles
- 2,720
Tune it
4 knobs: Scheme, Length, Landing gear, Winglets.
Specs
- Size
- 34.6 × 11.2 × 38.9 m width × height × depth
- Triangles
- 2,720 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 4 m of travel per cycle
- Altitude
- 20 m above the ground
- Moving parts
- 3 fan_L · spin, fan_R · spin, airframe · slide
- Knobs
- 4 3 presets
- Night lights
- 4 window, nav, beacon, lamp
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/airliner.mjs';
const airliner = createAsset();
scene.add(airliner); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
airliner.position.set(0, groundY + airliner.userData.altitude, dist);
airliner.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/airliner.mjs';
export function Airliner({ 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 airliner.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $Airliner/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 4 # one Loop = 4 m of travel// Import airliner.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 4 // one Loop = 4 m of travelUse the gaitkit MCP server: get_variant({ "id": "airliner", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
scheme | choice | blue teal sunset grey cargo | blue | Generic paint, no logos: blue (white with a blue tail and cheatline), teal (teal tail and engines, yellow line), sunset (orange tail, red line), grey (grey with a dark tail) or cargo (freighter with no cabin windows and a brown tail). |
length | range | 0.75 to 1.4, step 0.05 | 1 | Stretches the cabin. 1 is about 38 m (180 seats); 0.75 a 32 m short-haul model; 1.4 a 47 m stretched version with more windows. |
gear | toggle | on / off | true | Landing gear down (nose gear plus two four-wheel main legs). Off = gear tucked away for cruise; the jet then rests on its belly and engines. |
winglets | toggle | on / off | true | Upturned wingtip fins. Off = plain tips, an older look. |
Presets: short haul {"scheme":"teal","length":0.8} · long stretch {"scheme":"sunset","length":1.35} · night freighter {"scheme":"cargo","winglets":false}
Files
| File | What |
|---|---|
| airliner.glb | GLB, default look · 324 KB |
| airliner.mjs | ES module, every knob live |
| airliner.obj | OBJ, static, no colour |
| airliner-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.