Robokade

3D models

Where to get free 3D models for your game, how to check the licence, and how to load them in Robokade. You (or your AI agent) download the models from their makers' own sites; Robokade doesn't host them. Use only models you may publish: CC0 is the simplest.

For AI agents: this page as plain text at /docs/models.md; all docs are listed in /llms.txt.

The rule: CC0 only

  • CC0 means the maker gave up all rights: you may use, change and publish the model in your game, no credit needed. Read the licence on the maker's own page (the pack's or the model's) when you download it, every time: makers can change the terms of new packs.
  • Leave out everything else: CC-BY and other licences that need credit or set conditions, "free for personal use", models with no licence shown, models ripped from games, and other people's characters, brands and logos. Review refuses art you have no right to publish (What we accept and what we refuse).
  • Download from the maker's page, one pack or model at a time, the ones you chose. No scraping, no bulk downloads, no scripts that walk the sites (Poly Pizza's terms forbid scraping). Kenney asks if you want to donate first; "Continue without donating" is free.
  • Keep the pack's licence file with your own copy of the pack, outside your game; don't copy it into the game.
  • Don't use the makers' logos or their preview pictures in your game, its screenshots or its video.

Sources

Licence lines as each site says it, checked on 2026-10-27.

SourceLicenceStyleFormats
Kenney"public domain licensed (CC0)", every asset; "Attribution is not required"clean low-poly, one shared colour texture per packGLB in most packs (Models/GLB format/), also FBX and OBJ
Quaternius"License CC0" on each free pack's page (one pack says QAL: leave it out; the paid "Source" files are not part of this)low-poly, many animated charactersglTF in the newer packs, older ones FBX / OBJ / Blend only
Poly Haven"CC0", every assetrealistic textures (and large realistic models)textures as JPG / PNG (pick 1K)
Poly Pizzaeach model has its own licence: only models whose own page says "Public Domain (CC0)"; many are CC-BYlow-poly, thousands of models from many makersGLB, glTF
  • Poly Pizza: check each model's own page; take it only if that page says CC0. Many models there are CC-BY: leave those out.
  • Quaternius packs download from Google Drive, which sometimes answers "Quota exceeded". Try again later, or take the same model from Quaternius's own uploads on Poly Pizza (poly.pizza/u/Quaternius), if that model's page says CC0.
  • Poly Haven: the textures fit best; its models are usually too large for a game's 8 MB.

Packs by theme

Checked on 2026-10-27: Kenney from the file list of each zip, Quaternius from each pack's page. The makers add and change packs, so read each page when you download.

Kenney packs

All CC0. The three animated character packs have FBX only: convert them (see Convert FBX or OBJ to GLB) or use Mini Characters, Blocky Characters or Cube Pets.

Quaternius packs

The free packs below say CC0 on their pages. Their glTF often comes as .gltf files: an Arena game needs .glb, so convert those as well (an Arcade game can use .gltf as it is).

Put a model in your game

  1. Unzip the pack in a folder of its own, outside your game. Copy only the models you use into your game's models/ folder.
  2. File names: lower case letters, digits, ., -, _, starting with a letter or digit, at most 64 characters, ending in .glb (the kit check refuses others). Rename Tank_Blue.glb to tank-blue.glb.
  3. Size: your whole Arena or world game stays within 8 MB and 60 files. Kenney models are about 5-300 KB each, and a pack has up to a few hundred: copy only the ones you use. Models with their pictures inside (Quaternius, Poly Pizza) are often 1-3 MB each: check the size before you pick one.
  4. Run the kit check (node public/kit/test/cli.js public/games/<id>) and play the game with the kit's server (node tools/mc-local/serve.mjs). It sends our pages' Content-Security-Policy, so a model that won't load on Robokade won't load there either.

Kenney's GLB files keep their colours in a separate picture, Textures/colormap.png, next to the models (a few packs have more pictures in Textures/). Copy the pictures to models/textures/ (lower case: the kit check refuses Textures). The loader below sends the model there.

Load a model

This function works in Arena and world games, with every kit. Put it in your view.js, or in a file next to your models/ folder that view.js imports (it finds the models next to the file it is in). Skip the import lines you already have.

import * as THREE from "../../vendor/three/0.186.1/three.module.js";
import { GLTFLoader } from "../../vendor/three/0.186.1/addons/loaders/GLTFLoader.js";

/** Loads models/<file> from your game folder. Resolves to the glTF ({ scene, animations }). */
function loadModel(file) {
  const manager = new THREE.LoadingManager();
  // Kenney: the model asks for Textures/colormap.png; your copy is models/textures/colormap.png.
  manager.setURLModifier((url) => url.replace("/Textures/", "/textures/"));
  const loader = new GLTFLoader(manager);
  // Textures inside the model (Quaternius, Poly Pizza, most exporters): load them as pictures. Needed with kits
  // before 1.29.0 and on pages with the older policy (they block blob: and data: reads in Chromium); harmless elsewhere.
  loader.register((parser) => { parser.textureLoader = new THREE.TextureLoader(parser.options.manager); return { name: "img_textures" }; });
  return loader.loadAsync(new URL(`./models/${file}`, import.meta.url).href);
}

Use it like this (in your view's setup, where scene is your THREE.Scene):

loadModel("ambulance.glb").then((gltf) => scene.add(gltf.scene));
  • Our pages now let the loader read blob: and data: URLs (and so does the local server of kit 1.29.0 and newer), so plain three.js code keeps the textures inside a .glb too. Keep the register line anyway: with an older kit's local server (or the older policy) a model whose textures are inside the .glb shows without its colours in Chromium (the browser console says the page refused to connect to a blob: or data: address).
  • A model must not point at a file on another site: our pages block it, and the model loads without it. The kit check's models line warns about it (kit 1.29.0 and newer), and about texture files the model asks for that aren't in your game.
  • Models come in different sizes: a Kenney car and a Quaternius tree can be 100 times apart. Scale each one after loading, for example to 2 units tall: const h = new THREE.Box3().setFromObject(gltf.scene).getSize(new THREE.Vector3()).y; gltf.scene.scale.setScalar(2 / h);
  • Animated models: play gltf.animations with a THREE.AnimationMixer. For several copies of one animated model, use SkeletonUtils.clone(gltf.scene) (see /starter/AGENTS.md, "3D with three.js").

Arcade games

An Arcade game can use a Kenney folder as it is (upper case names and .gltf files are allowed, and its page lets the loader read blob: and data: URLs). Import three.js and GLTFLoader from your own copy (Arcade games bring their own libraries); the body of loadModel works there unchanged. List every pack you use in the file your assets field names (see /arcade.md), one line per pack as below.

Say where your models came from

Write one line per pack in your game's spec.md (Arena and world games) or in your assets file (Arcade), without https://: a link with https:// in a game's text makes the kit check warn. For example:

  • Models: Car Kit by Kenney, CC0, kenney.nl/assets/car-kit
  • Models: Ultimate Spaceships by Quaternius, CC0, quaternius.com/packs/ultimatespaceships.html
  • Models: Twisted Tree by Quaternius, CC0, poly.pizza/m/8oraKn9m0x (one model from Poly Pizza: give its own page)

Models you made yourself need no line. Reviewers use these lines to check the source quickly, and may ask when a game has models and no line.

Convert FBX or OBJ to GLB

Packs with FBX or OBJ only, and .gltf files for an Arena game, need converting to .glb first. In Blender (free): File, Import (FBX, OBJ or glTF 2.0), then File, Export, glTF 2.0, with Format set to glTF Binary (.glb). Check the colours in your game afterwards.

Textures from Poly Haven

Download a texture's 1K JPG maps from its page (colour, and normal or roughness if you want them), put them in your game folder (for example textures/wood-diff-1k.jpg), and load them with THREE.TextureLoader. Keep to a few: each 1K JPG is roughly 100-500 KB of your 8 MB.