Propeller Plane
A four-seat single-engine light aircraft, 8.3 m long with an 11 m wing, on fixed tricycle wheels or seaplane floats; the wing can sit high on struts or low under the cabin. The propeller spins with distance flown, wingtip nav lights and cabin windows glow at night; it cruises 8 m up.
- Size
- 11.1 × 3.0 × 8.5 m
- Triangles
- 1,086
Tune it
4 knobs: Scheme, Wing, Floats, Wheel fairings.
Specs
- Size
- 11.1 × 3.0 × 8.5 m width × height × depth
- Triangles
- 1,086 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 1.5 m of travel per cycle
- Altitude
- 8 m above the ground
- Moving parts
- 2 propeller · spin, airframe · slide
- Knobs
- 4 3 presets
- Night lights
- 4 nav, beacon, window, 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/propeller-plane.mjs';
const propellerPlane = createAsset();
scene.add(propellerPlane); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
propellerPlane.position.set(0, groundY + propellerPlane.userData.altitude, dist);
propellerPlane.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/propeller-plane.mjs';
export function PropellerPlane({ 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 propeller-plane.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $PropellerPlane/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 1.5 # one Loop = 1.5 m of travel// Import propeller-plane.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 1.5 // one Loop = 1.5 m of travelUse the gaitkit MCP server: get_variant({ "id": "propeller-plane", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
scheme | choice | classic bush sky silver forest | classic | Paint: classic (white with a red stripe), bush (yellow with black trim), sky (white and blue), silver (polished grey with orange) or forest (green with cream trim). |
wing | choice | high low | high | high: the wing sits on the cabin roof, braced by struts (bush plane, trainer). low: the wing runs under the cabin with the wheels on it (sport plane). |
floats | toggle | on / off | false | Seaplane floats instead of wheels, for taking off from lakes and the sea. |
pants | toggle | on / off | true | Streamlined fairings over the wheels. Off shows bare tyres for rough strips. Ignored with floats. |
Presets: bush plane {"scheme":"bush","wing":"high","pants":false} · seaplane {"scheme":"sky","wing":"high","floats":true} · sport plane {"scheme":"silver","wing":"low"}
Files
| File | What |
|---|---|
| propeller-plane.glb | GLB, default look · 135 KB |
| propeller-plane.mjs | ES module, every knob live |
| propeller-plane.obj | OBJ, static, no colour |
| propeller-plane-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.