Gaitkit Sign in Open the lab
Trout, A wild 45 cm river trout, brown (olive back, golden flanks, black spots and pale-ringed red spots) or rainbow (green-olive back peppered with black spots, a pink band along the side, silver belly): a streamlined, slightly flattened body built from five nested segments and a tail that bend smoothly, a real trout head with a long mouth line, hinged lower jaw, gill cover and an eye with a glint, a small adipose fin and a square tail. Swims by distance with a body wave that grows toward the tail and cruises 0.6 m deep; named clips Swim (cruise loop) and Flap (a fast thrash with a gaping mouth, for a leap out of the water or wriggling in talons).
Creature · Swims

Trout

A wild 45 cm river trout, brown (olive back, golden flanks, black spots and pale-ringed red spots) or rainbow (green-olive back peppered with black spots, a pink band along the side, silver belly): a streamlined, slightly flattened body built from five nested segments and a tail that bend smoothly, a real trout head with a long mouth line, hinged lower jaw, gill cover and an eye with a glint, a small adipose fin and a square tail. Swims by distance with a body wave that grows toward the tail and cruises 0.6 m deep; named clips Swim (cruise loop) and Flap (a fast thrash with a gaping mouth, for a leap out of the water or wriggling in talons).

Size
0.07 × 0.15 × 0.45 m
Triangles
3,767
Open in the lab

FreeFree download, no account needed.

Also as , a .zip with the .obj and its .mtl.

Loop clip inside. The download carries the knobs you set here.

The other 6 in UnderwaterPro

Pro is $12 a month: all 590 specimens, every knob baked into GLB or OBJ. Or $79 once. See Pro plans

Tune it

3 knobs: Species, Size, Markings.

Specs

Size
0.07 × 0.15 × 0.45 m
width × height × depth
Triangles
3,767
of 6,000
Draw calls
1
one vertex-colour material
Loop clip
0.293 m
of travel per cycle
Altitude
0.6 m
below the surface
Moving parts
9
body_0 · rotate, body_1 · rotate, body_2 · rotate, body_3 · rotate, body_4 · rotate, tail · rotate, jaw · rotate, pectoral_L · rotate, pectoral_R · rotate
Knobs
3
3 presets
Night lights
0
none

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/trout.mjs';

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

let dist = 0;
renderer.setAnimationLoop(() => {
  dist += speed * clock.getDelta();
  trout.position.set(0, groundY + trout.userData.altitude, dist);
  trout.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
specieschoicebrown rainbowbrownbrown (brown trout: olive-brown back, golden flanks, black spots and red spots ringed pale, cream belly) or rainbow (rainbow trout: green-olive back with small black spots over the back and fins, a pink-red band along the side, silver belly).
sizerange0.6 to 1.5, step 0.051Uniform scale. 1 is a 45 cm adult; 0.6 is a 27 cm stream trout; 1.5 is a 68 cm trophy fish.
seedrange1 to 40, step 15Seed for where the spots fall; every number is a different fish of the same species.

Presets: river brown {"species":"brown"} · rainbow trout {"species":"rainbow"} · trophy brown {"species":"brown","size":1.4,"seed":17}

Files

FileWhat
trout.glbGLB, default look · 521 KB
trout.mjsES module, every knob live
trout.objOBJ, static; colours in the .mtl
trout.mtlOBJ colours; keep it next to the .obj
trout-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.