UFO Saucer
A classic flying saucer about 10 m across: a lens-shaped hull with a glass cupola, a row of portholes and a rim ring of coloured lights that turns as it flies; optional landing legs. The cupola, portholes, rim lights and the underside emitter glow at night; it hovers 8 m up with a slow wobble.
- Size
- 10.7 × 6.8 × 10.6 m
- Triangles
- 2,194
Tune it
4 knobs: Scheme, Rim lights, Landing legs, Size.
Specs
- Size
- 10.7 × 6.8 × 10.6 m width × height × depth
- Triangles
- 2,194 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 8 m of travel per cycle
- Altitude
- 8 m above the ground
- Moving parts
- 2 rim_ring · spin, saucer · slide
- Knobs
- 4 3 presets
- Night lights
- 4 rim, cupola, window, emitter
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/ufo-saucer.mjs';
const ufoSaucer = createAsset();
scene.add(ufoSaucer); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
ufoSaucer.position.set(0, groundY + ufoSaucer.userData.altitude, dist);
ufoSaucer.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/ufo-saucer.mjs';
export function UfoSaucer({ 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 ufo-saucer.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $UfoSaucer/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 8 # one Loop = 8 m of travel// Import ufo-saucer.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 8 // one Loop = 8 m of travelUse the gaitkit MCP server: get_variant({ "id": "ufo-saucer", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
scheme | choice | silver bronze dark mint retro | silver | Colours: silver (polished metal, rainbow rim lights), bronze (brass hull, amber lights), dark (black hull, violet glow), mint (pale green, warm cupola) or retro (cream with a red band, 1950s B-movie). |
lights | range | 6 to 18, step 2 | 12 | Number of lights on the turning rim ring, 6 to 18. |
legs | toggle | on / off | true | Three landing legs with round pads. Off = legs retracted; the saucer then rests on its underside. |
size | range | 0.4 to 2.5, step 0.05 | 1 | Uniform scale. 1 is 10 m across; 0.4 is a 4 m scout pod; 2.5 a 25 m mothership. |
Presets: b-movie {"scheme":"retro","lights":8} · night visitor {"scheme":"dark","lights":16,"legs":false} · scout pod {"scheme":"mint","size":0.45}
Files
| File | What |
|---|---|
| ufo-saucer.glb | GLB, default look · 253 KB |
| ufo-saucer.mjs | ES module, every knob live |
| ufo-saucer.obj | OBJ, static, no colour |
| ufo-saucer-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.