Pirate Galleon
A 24 m three-masted galleon with a tall stepped stern castle, raised forecastle, beakhead and long bowsprit, a broadside of cannons behind hinged gunports, square sails on the fore and main mast and a lateen on the mizzen. The bow points +Z; it rides the water surface (altitude 0) and bobs, rolls and pitches gently as it sails. The keel rests on y = 0 and the waterline is about 2 m up (userData.waterline). Stern lanterns and cabin windows glow at night.
- Size
- 9.4 × 24.1 × 30.1 m
- Triangles
- 3,850
- Kit
- Pirates
Tune it
5 knobs: Hull paint, Sails, Sail colour, Cannons, Flag.
Specs
- Size
- 9.4 × 24.1 × 30.1 m width × height × depth
- Triangles
- 3,850 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 18 m of travel per cycle
- Altitude
- 0 m below the surface
- Moving parts
- 4 bob · slide, roll · rotate, pitch · rotate, flag · rotate
- Knobs
- 5 3 presets
- Night lights
- 2 lantern, window
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/pirate-ship.mjs';
const pirateShip = createAsset();
scene.add(pirateShip); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
pirateShip.position.set(0, groundY + pirateShip.userData.altitude, dist);
pirateShip.userData.tick(dist); // the body waves 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/pirate-ship.mjs';
export function PirateShip({ 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); // the body waves with the distance
});
return <primitive object={model} />;
}# Import pirate-ship.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $PirateShip/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 18 # one Loop = 18 m of travel// Import pirate-ship.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 18 // one Loop = 18 m of travelUse the gaitkit MCP server: get_variant({ "id": "pirate-ship", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
hull | choice | black and gold oxblood oak navy sea green | black and gold | Hull colour scheme: black and gold (black hull, gold gunport band, pale tallowed bottom), oxblood (dark red), oak (bare varnished wood), navy (blue with a cream band), sea green. |
sails | choice | full furled | full | full (every sail set and bellied out by a following wind, plus a jib) or furled (sails rolled tight on their yards, as at anchor). |
sailColor | choice | canvas white black red striped | canvas | Sail cloth: canvas (warm off-white), white, black, red or striped (canvas with red horizontal stripes). Plain cloth, no emblems. |
cannons | range | 0 to 7, step 1 | 5 | Gunports per side along the main deck, each with an open lid and a cannon muzzle. 0 gives a merchant galleon with a plain band. |
flag | choice | black red red and gold blue and white green and white | black | Colour of the plain flag at the mainmast head and the pennants: black, red, red and gold stripes, blue and white stripes, green and white stripes. |
Presets: black flag raider {"hull":"black and gold","sailColor":"black","flag":"black","cannons":7} · navy flagship {"hull":"navy","sailColor":"white","flag":"blue and white","cannons":6} · at anchor {"hull":"oak","sails":"furled","cannons":3,"flag":"red and gold"}
Files
| File | What |
|---|---|
| pirate-ship.glb | GLB, default look · 508 KB |
| pirate-ship.mjs | ES module, every knob live |
| pirate-ship.obj | OBJ, static, no colour |
| pirate-ship-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.