Gaitkit Open the lab
Cargo Ship, A container ship at real scale, 140 m long and 22 m wide by default, with a bulbous bow, a white accommodation block and bridge aft, a funnel, a free-fall lifeboat and bays of 40 ft containers stacked as high as the load knob says. Sits on the water surface (keel at y = 0, waterline 7.5 m up); propeller and radar turn with distance; windows and lights glow at night.
Vehicle · Swims

Cargo Ship

A container ship at real scale, 140 m long and 22 m wide by default, with a bulbous bow, a white accommodation block and bridge aft, a funnel, a free-fall lifeboat and bays of 40 ft containers stacked as high as the load knob says. Sits on the water surface (keel at y = 0, waterline 7.5 m up); propeller and radar turn with distance; windows and lights glow at night.

Size
23.3 × 38.3 × 141.0 m
Triangles
2,941
Open in the lab Loop clip inside. The download carries the knobs you set here.

Tune it

5 knobs: Hull, Load, Deck cranes, Length, Seed.

Specs

Size
23.3 × 38.3 × 141.0 m
width × height × depth
Triangles
2,941
of 6,000
Draw calls
1
one vertex-colour material
Loop clip
60 m
of travel per cycle
Altitude
0 m
below the surface
Moving parts
3
propeller · spin, radar · spin, ship · rotate
Knobs
5
3 presets
Night lights
3
window, nav, floodlight

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.

JavaScript
import { createAsset } from 'https://gaitkit.com/cdn/cargo-ship.mjs';

const cargoShip = createAsset();
scene.add(cargoShip);                      // rests on y = 0, front faces +Z

let dist = 0;
renderer.setAnimationLoop(() => {
  dist += speed * clock.getDelta();
  cargoShip.position.set(0, groundY + cargoShip.userData.altitude, dist);
  cargoShip.userData.tick(dist);            // the body waves with the distance
  renderer.render(scene, camera);
});

More in the docs; agents can fetch all of this through MCP.

Knobs

KnobTypeValuesDefaultWhat it does
hullchoiceblue red black green greyblueHull colour above the red antifouling: blue, red, black, green or grey. The funnel band takes a contrasting colour.
loadrange0 to 1, step 0.050.6How full the deck is: 0 sails empty with bare hatch covers, 0.6 has uneven stacks two to four high, 1 is fully loaded five high.
cranestoggleon / offfalseThree deck cranes along the port side, so it can load itself in small ports (a geared feeder ship).
lengthrange100 to 200, step 5140Length overall in metres; the beam stays 22 m and more container bays are added as it grows. 100 is a small feeder, 200 a large regional carrier.
seedrange1 to 50, step 17Shuffles the container colours and the stack heights.

Presets: empty return {"load":0,"hull":"red"} · geared feeder {"cranes":true,"length":110,"hull":"green","load":0.5} · fully laden {"load":1,"length":190,"hull":"black"}

Files

FileWhat
cargo-ship.glbGLB, default look · 349 KB
cargo-ship.mjsES module, every knob live
cargo-ship.objOBJ, static, no colour
cargo-ship-params.jsonknob 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.