Octopus
A reef octopus about 1 m across the arms, with a bulbous mantle, slit-pupil eyes and eight suckered arms. Swims by distance: the arms draw together in a jet pulse and spread again while waves curl down each arm and the mantle swells; it drifts 0.6 m above the sea floor.
- Size
- 0.99 × 0.73 × 0.95 m
- Triangles
- 2,168
Tune it
4 knobs: Kind, Arm curl, Mottling, Size.
Specs
- Size
- 0.99 × 0.73 × 0.95 m width × height × depth
- Triangles
- 2,168 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 0.9 m of travel per cycle
- Altitude
- 0.6 m below the surface
- Moving parts
- 42 body · slide, mantle · rotate, arm_0 · rotate, arm_0_1 · rotate, arm_0_2 · rotate, arm_0_3 · rotate, arm_0_4 · rotate, arm_1 · rotate, arm_1_1 · rotate, arm_1_2 · rotate, arm_1_3 · rotate, arm_1_4 · rotate, arm_2 · rotate, arm_2_1 · rotate, arm_2_2 · rotate, arm_2_3 · rotate, arm_2_4 · rotate, arm_3 · rotate, arm_3_1 · rotate, arm_3_2 · rotate, arm_3_3 · rotate, arm_3_4 · rotate, arm_4 · rotate, arm_4_1 · rotate, arm_4_2 · rotate, arm_4_3 · rotate, arm_4_4 · rotate, arm_5 · rotate, arm_5_1 · rotate, arm_5_2 · rotate, arm_5_3 · rotate, arm_5_4 · rotate, arm_6 · rotate, arm_6_1 · rotate, arm_6_2 · rotate, arm_6_3 · rotate, arm_6_4 · rotate, arm_7 · rotate, arm_7_1 · rotate, arm_7_2 · rotate, arm_7_3 · rotate, arm_7_4 · rotate
- Knobs
- 4 3 presets
- Night lights
- 1 ring
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/octopus.mjs';
const octopus = createAsset();
scene.add(octopus); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
octopus.position.set(0, groundY + octopus.userData.altitude, dist);
octopus.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/octopus.mjs';
export function Octopus({ 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 octopus.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $Octopus/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 0.9 # one Loop = 0.9 m of travel// Import octopus.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 0.9 // one Loop = 0.9 m of travelUse the gaitkit MCP server: get_variant({ "id": "octopus", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
kind | choice | common pacific blueringed mimic ghost | common | Species: common (red-brown, mottled), pacific (big bright red-orange giant), blueringed (small sandy-yellow with electric blue rings that glow at night), mimic (white with dark brown bands on long arms), ghost (pale pink deep-sea octopus). |
curl | range | 0 to 1.5, step 0.05 | 0.8 | How tightly the arm tips curl up and inward. 0 is straight trailing arms; 1.5 is tight spirals. |
seed | range | 1 to 30, step 1 | 3 | Seed for the skin blotches and each arm's own rhythm; every number is a different octopus. |
size | range | 0.2 to 6, step 0.1 | 1 | Uniform scale. 1 is 1 m across the arms; 0.2 is a tiny 20 cm octopus; 3 is a giant; 6 is a ship-grabbing kraken. |
Presets: blue-ringed {"kind":"blueringed","size":0.25} · giant pacific {"kind":"pacific","size":3,"curl":1.1} · kraken {"kind":"pacific","size":6,"curl":1.4,"seed":17}
Files
| File | What |
|---|---|
| octopus.glb | GLB, default look · 374 KB |
| octopus.mjs | ES module, every knob live |
| octopus.obj | OBJ, static, no colour |
| octopus-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.