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.
| Source | Licence | Style | Formats |
|---|---|---|---|
| Kenney | "public domain licensed (CC0)", every asset; "Attribution is not required" | clean low-poly, one shared colour texture per pack | GLB 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 characters | glTF in the newer packs, older ones FBX / OBJ / Blend only |
| Poly Haven | "CC0", every asset | realistic textures (and large realistic models) | textures as JPG / PNG (pick 1K) |
| Poly Pizza | each model has its own licence: only models whose own page says "Public Domain (CC0)"; many are CC-BY | low-poly, thousands of models from many makers | GLB, 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.
| Theme | GLB | FBX / OBJ only (convert first) |
|---|---|---|
| Vehicles, tanks, turrets | Car Kit, Toy Car Kit, Racing Kit, Train Kit, Watercraft Kit, Tower Defense Kit, Blaster Kit | none |
| Space and sci-fi | Space Kit, Space Station Kit, Modular Space Kit, Factory Kit | none |
| Boards and tabletop | Hexagon Kit, Marble Kit, Minigolf Kit, Mini Arena, Prototype Kit | none |
| Nature | Nature Kit, Mini Forest, Survival Kit | none |
| Towns and buildings | City Kit (Roads), City Kit (Commercial), City Kit (Suburban), City Kit (Industrial), Building Kit, Modular Buildings, Retro Urban Kit | none |
| Fantasy, castles, dungeons | Castle Kit, Fantasy Town Kit, Retro Fantasy Kit, Pirate Kit, Graveyard Kit, Mini Dungeon, Modular Dungeon Kit | none |
| Characters | Mini Characters, Blocky Characters, Cube Pets | Animated Characters Retro, Animated Characters Protagonists, Animated Characters Survivors |
| Platformers, props | Platformer Kit, Furniture Kit, Food Kit | none |
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).
| Theme | glTF (.gltf or .glb) | FBX / OBJ only (convert first) |
|---|---|---|
| Vehicles, tanks, turrets | Ultimate Spaceships | Animated Tanks, Cars, Modular Train, Ships, Public Transport, Turrets, Spaceships |
| Robots and sci-fi | Sci-Fi Essentials Kit, Modular Sci-Fi MegaKit, Ultimate Space Kit, Animated Mech, Cyberpunk Game Kit, Toon Shooter Game Kit, Sci-Fi Modular Guns | Animated Robot |
| Boards and cards | 3D Card Kit - Fantasy, Cube World Kit | none |
| Nature | Stylized Nature MegaKit, Ultimate Stylized Nature | Ultimate Nature, Stylized Trees, Simple Nature |
| Towns and buildings | Downtown City MegaKit, Medieval Village MegaKit | Ultimate Textured Buildings, Farm Buildings, Modular Ruins, Modular Streets |
| Characters and monsters (animated) | Universal Base Characters, Universal Animation Library, Ultimate Monsters, Animated Animals, Zombie Apocalypse Kit | Animated Dinosaurs, Knight |
| Fantasy and RPG props | Fantasy Props MegaKit, Ultimate Fantasy RTS, Pirate Kit | Medieval Weapons |
Put a model in your game
- Unzip the pack in a folder of its own, outside your game. Copy only the models you use into your game's
models/folder. - File names: lower case letters, digits,
.,-,_, starting with a letter or digit, at most 64 characters, ending in.glb(the kit check refuses others). RenameTank_Blue.glbtotank-blue.glb. - 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.
- 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:anddata: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 theregisterline 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 ablob:ordata: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
modelsline 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.animationswith aTHREE.AnimationMixer. For several copies of one animated model, useSkeletonUtils.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-kitModels: Ultimate Spaceships by Quaternius, CC0, quaternius.com/packs/ultimatespaceships.htmlModels: 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.