Polyfork BrowseKits

Parametric 3D assets for three.js

Every parametric asset here is a factory, not a frozen mesh: the ES module exports createAsset(params) plus a typed schema of its knobs (colors, choices, toggles, ranges) and curated presets. Call it with no arguments and you get the exact published asset; pass params and you get your variant, at the same triangle budget. The schema is public JSON, so coding assistants can read the knobs and generate variants for you.

createAsset(params)typed knob schemacurated presetspublic params.jsonidentical default output
Horizontal Tank low-poly 3D model
Horizontal Tank
free 344 tris
Field Console low-poly 3D model
Field Console
free 396 tris
Street-lamp low-poly 3D model
Street-lamp
free 422 tris
Road-tile low-poly 3D model
Road-tile
free 258 tris
Sidewalk-tile low-poly 3D model
Sidewalk-tile
free 308 tris
Planter low-poly 3D model
Planter
free 260 tris
Picnic-table low-poly 3D model
Picnic-table
free 484 tris
Toy Rocket low-poly 3D model
Toy Rocket
free 618 tris
Traffic-cone low-poly 3D model
Traffic-cone
free 312 tris
Guardrail low-poly 3D model
Guardrail
free 146 tris
Lane-marking-decal low-poly 3D model
Lane-marking-decal
free 298 tris
Fire Escape Section low-poly 3D model
Fire Escape Section
588 tris
Exploration Rover low-poly 3D model
Exploration Rover
1,902 tris
Astronaut Scientist low-poly 3D model
Astronaut Scientist
1,270 tris
Battery Bank low-poly 3D model
Battery Bank
606 tris
Astronaut Engineer low-poly 3D model
Astronaut Engineer
1,264 tris
Wedge-coupe-80s low-poly 3D model
Wedge-coupe-80s
3,748 tris
Tire low-poly 3D model
Tire
520 tris
Astronaut Explorer low-poly 3D model
Astronaut Explorer
1,200 tris
Antenna Mast low-poly 3D model
Antenna Mast
652 tris
Suitcase low-poly 3D model
Suitcase
620 tris
Pickup-truck-70s low-poly 3D model
Pickup-truck-70s
3,750 tris
Speaker-post low-poly 3D model
Speaker-post
528 tris
Phone-booth low-poly 3D model
Phone-booth
708 tris
Oil-drum low-poly 3D model
Oil-drum
532 tris
Muscle-car-60s low-poly 3D model
Muscle-car-60s
4,271 tris
Alien Raider low-poly 3D model
Alien Raider
3,632 tris
Diner-sign low-poly 3D model
Diner-sign
588 tris
Traffic-light low-poly 3D model
Traffic-light
524 tris
Motel-sign low-poly 3D model
Motel-sign
602 tris
Jukebox low-poly 3D model
Jukebox
731 tris
Camper-van low-poly 3D model
Camper-van
3,971 tris
Hatchback-80s low-poly 3D model
Hatchback-80s
3,376 tris
Gas-pump low-poly 3D model
Gas-pump
514 tris
Convertible-60s low-poly 3D model
Convertible-60s
4,784 tris
Boxy-sedan-70s low-poly 3D model
Boxy-sedan-70s
3,442 tris
Corner Shop low-poly 3D model
Corner Shop
1,324 tris
Village Tavern low-poly 3D model
Village Tavern
1,996 tris

One asset, any variant

The module is a factory: no arguments reproduces the published asset, params make it yours. This is Toy Rocket:

import { createAsset } from './toy-rocket-e51241.mjs';

scene.add(createAsset());                                // the published asset, exactly
scene.add(createAsset({ colorway: 'red-white' }));  // a curated preset
scene.add(createAsset({ colorway: 'mint-cream', /* any knob */ }));

// every knob, typed and described, public for you and your AI:
// https://polyfork.dev/cdn/toy-rocket-e51241-params.json

How your agent uses it

Every remixable asset publishes its knobs as JSON, and each knob carries a plain-language description written for a machine reader. An agent can fetch the schema, understand what the asset can change, and produce the variant your scene needs without a human touching a slider.

// 1. ask what this asset can change
const schema = await (await fetch(
  'https://polyfork.dev/cdn/toy-rocket-e51241-params.json')).json();

// schema.params  -> { tallness: { type: 'range', min: .., max: .., describe: '..' }, ... }
// schema.presets -> curated colourways, each a map of zone -> hex

// 2. build the variant
import { createAsset } from 'https://polyfork.dev/cdn/toy-rocket-e51241.mjs';
scene.add(createAsset({ colorway: 'mint-cream', tallness: 1.15 }));

Two guarantees worth relying on: a no-argument call always reproduces the published asset exactly, and every knob value stays inside the same triangle budget, so a variant never quietly costs more than what you bought. The full agent guide lives at /agents.

How do I generate variants of a parametric asset?

  1. Import the ES module and call createAsset() for the stock asset, or createAsset({ colorway: "...", ... }) for a variant.
  2. Read the knobs from /cdn/{id}-params.json: every knob has a type, a default and a plain-language description.
  3. Instantiate as many variants as you need at runtime: same geometry budget, different params, no extra downloads.

FAQ

What is a parametric 3D asset?

A model defined by a function plus typed parameters instead of a single baked mesh. Here that function is a three.js ES module exporting createAsset(params); the default call reproduces the published asset exactly, and any knob change produces a coherent variant.

How are the parameters typed?

Each knob is declared with a type (color, choice, toggle or range), a default, a label and a description written for both people and machines. Curated presets bundle knob values into ready-made looks.

Is there a runtime cost to variants?

No meaningful one: variants rebuild the same low-poly geometry with different values, so triangle counts and draw calls stay at the published budget.

Can AI coding assistants use this?

Yes, that is the point of the public schema: an assistant can fetch /cdn/{id}-params.json, understand every knob from its description, and write the createAsset call for the variant you asked for.

Polyfork

Sign in

One account for your purchases and downloads.

Continue with Google
or

No password needed: the link signs you in directly.