Skateboard
A real-size skateboard: a 0.81 m double-kick popsicle street deck, a 0.71 m cruiser with a rounded nose and one kick tail, or a 1 m pintail longboard. The pressed deck has concave, a two-tone ply edge, an abstract graphic (stripes, flames, chevrons, waves) under clear grip or black/grey grip tape with the truck bolts showing; two trucks with baseplates, kingpins, bushings and hangers carry four urethane wheels (wheel_0..3) that roll with distance.
- Size
- 0.21 × 0.14 × 0.81 m
- Triangles
- 2,336
Tune it
4 knobs: Deck shape, Graphic, Wheel colour, Grip tape.
Specs
- Size
- 0.21 × 0.14 × 0.81 m width × height × depth
- Triangles
- 2,336 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 0.17 m of travel per cycle
- Moving parts
- 4 wheel_0 · spin, wheel_1 · spin, wheel_2 · spin, wheel_3 · spin
- Knobs
- 4 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.
import { createAsset } from 'https://gaitkit.com/cdn/skateboard.mjs';
const skateboard = createAsset();
scene.add(skateboard); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
skateboard.position.z = dist;
skateboard.userData.tick(dist); // wheels roll exactly 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/skateboard.mjs';
export function Skateboard({ speed = 1 }) {
const model = useMemo(() => createAsset(), []);
const dist = useRef(0);
useFrame((_, dt) => {
dist.current += speed * dt;
model.position.z = dist.current;
model.userData.tick(dist.current); // wheels roll exactly with the distance
});
return <primitive object={model} />;
}# Import skateboard.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $Skateboard/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 0.17 # one Loop = 0.17 m of travel// Import skateboard.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 0.17 // one Loop = 0.17 m of travelUse the gaitkit MCP server: get_variant({ "id": "skateboard", "want": "default look" })
then place the result and drive it with userData.tick(distance).
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
shape | choice | popsicle cruiser longboard | popsicle | popsicle (0.81 m double-kick street and park deck, small hard wheels), cruiser (0.71 m, wide rounded nose, one kick tail, soft fat wheels) or longboard (1 m pintail, flat, wide trucks and big soft wheels). |
graphic | choice | stripes flames chevrons waves plain | flames | Abstract bottom graphic, no logos: stripes (navy with mustard and cream bands), flames (orange and yellow flames licking up from the tail on black), chevrons (blue and red chevrons pointing to the nose on cream), waves (pale wave bands on deep blue) or plain (natural maple). |
wheels | choice | cream red teal yellow black purple | cream | Urethane wheel colour: cream, red, teal, yellow, black or purple. |
grip | choice | black grey clear stripe | clear | Top of the deck: black grip tape, grey grip tape, clear grip (the graphic shows through on top) or stripe (black grip with a band of the graphic colour across the middle). |
Presets: street deck {"shape":"popsicle","graphic":"stripes","wheels":"red","grip":"black"} · beach cruiser {"shape":"cruiser","graphic":"waves","wheels":"teal","grip":"clear"} · downhill longboard {"shape":"longboard","graphic":"chevrons","wheels":"yellow","grip":"stripe"}
Files
| File | What |
|---|---|
| skateboard.glb Pro | GLB, default look · 238 KB |
| skateboard.mjs Pro | ES module, every knob live |
| skateboard.obj Pro | OBJ, static; colours in the .mtl |
| skateboard.mtl | OBJ colours; keep it next to the .obj |
| skateboard-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.