Add 3d Assets logo

Add 3d Assets

Organization
PlayableIntelligence
add-3d-assets

Replace primitive 3D shapes with real GLB models — animated characters, world props, buildings, and scenery for Three.js games. Use when the user says "add 3D models", "replace the boxes with real models", "add GLB assets", or "make the 3D game look real". For 2D pixel art, use add-assets instead. Do NOT use for 2D pixel art (use add-assets) or gameplay changes (use add-feature).

Overview

PublisherPlayableIntelligence
Repositorygame-creator
Skill nameadd-3d-assets
Stars
331
Forks
41
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by PlayableIntelligence on GitHub. Read the source before you install it.

Installation

Install the Add 3d Assets AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/PlayableIntelligence/game-creator.git /tmp/game-creator
mkdir -p .claude/skills
cp -r /tmp/game-creator/skills/add-3d-assets .claude/skills/add-3d-assets
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Add 3d Assets in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Add 3d Assets on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Add 3d Assets is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Performance Notes

  • Take your time to do this thoroughly
  • Quality is more important than speed
  • Do not skip validation steps

Add 3D Assets

Replace basic geometric shapes (BoxGeometry, SphereGeometry) with real 3D models. Characters get custom Meshy AI-generated models with rigging and animation. World objects get generated or sourced from free libraries.

Instructions

Analyze the game at $ARGUMENTS (or the current directory if no path given).

First, load the game-3d-assets skill and the meshyai skill for the full model pipeline, AssetLoader pattern, Meshy generation, and integration patterns.

Step 1: Get Meshy API Key

Check if MESHY_API_KEY is set. First check .env: test -f .env && grep -q '^MESHY_API_KEY=.' .env && echo "found" If found, export it with set -a; . .env; set +a and skip the prompt.

If not set, ask the user:

I'll generate custom 3D models with Meshy AI for the best results. You can get a free API key in 30 seconds:

  1. Sign up at https://app.meshy.ai
  2. Go to Settings → API Keys
  3. Create a new API key

Paste your key below like: MESHY_API_KEY=your-key-here (It will be saved to .env and redacted from this conversation automatically.)

Or type "skip" to use free model libraries instead.

Step 2: Audit

  • Read package.json to confirm this is a Three.js game (not Phaser — use /add-assets for 2D games)
  • Read src/core/Constants.js for entity types, sizes, colors
  • Read entity files (src/gameplay/*.js, src/entities/*.js) — find BoxGeometry, SphereGeometry, etc.
  • Read src/level/LevelBuilder.js for environment primitives
  • List every entity using geometric shapes
  • Identify which entity is the player character (needs animated model)

Step 3: Plan

Split entities into two categories:

Animated characters (player, enemies with AI) — generate with Meshy AI:

EntityMeshy PromptNotes
Player"a heroic knight, low poly game character, full body, t-pose"Generate → rig → animate
Enemy"a goblin warrior with a club, low poly game character"Generate → rig → animate

If Meshy unavailable, fall back to assets/3d-characters/:

  • Soldier — realistic military (Idle, Walk, Run) — best default
  • Xbot — stylized mannequin (idle, walk, run + additive poses)
  • RobotExpressive — cartoon robot (Idle, Walking, Running, Dance, Jump + 8 more)
  • Fox — low-poly animal (Survey, Walk, Run) — scale 0.02

World objects (buildings, props, scenery, collectibles) — generate with Meshy or search free libraries:

EntityMeshy PromptFallback Source
Tree"a low poly stylized tree, game asset"Poly Haven
House"a medieval house, low poly game asset"Poly Haven
Barrel"a wooden barrel, low poly game asset"Poly Haven
Coin"a gold coin, game collectible item"Sketchfab

Step 4: Generate / Download

With Meshy (preferred):

bash
# Generate characters
MESHY_API_KEY=<key> node <plugin-root>/scripts/meshy-generate.mjs \
  --mode text-to-3d \
  --prompt "a heroic knight, low poly game character, full body" \
  --polycount 15000 --pbr \
  --output public/assets/models/ --slug player

# Rig characters for animation
MESHY_API_KEY=<key> node <plugin-root>/scripts/meshy-generate.mjs \
  --mode rig --task-id <refine-task-id> --height 1.7 \
  --output public/assets/models/ --slug player-rigged

# Generate static props
MESHY_API_KEY=<key> node <plugin-root>/scripts/meshy-generate.mjs \
  --mode text-to-3d \
  --prompt "a wooden barrel, low poly game asset" \
  --polycount 5000 \
  --output public/assets/models/ --slug barrel

Without Meshy (fallback):

bash
# Characters — copy from library
cp <plugin-root>/assets/3d-characters/models/Soldier.glb public/assets/models/

# World objects — search and download
node <plugin-root>/scripts/find-3d-asset.mjs --query "barrel" --source polyhaven \
  --output public/assets/models/ --slug barrel

Step 5: Integrate

  1. Create src/level/AssetLoader.jsuse SkeletonUtils.clone() for animated models (import from three/addons/utils/SkeletonUtils.js). Regular .clone() breaks skeleton → T-pose.
  2. Add CHARACTER to Constants.js with path, scale, facingOffset, clipMap
  3. Add ASSET_PATHS and MODEL_CONFIG for static models
  4. Update Player.js:
    • THREE.Group as position anchor
    • loadAnimatedModel() + AnimationMixer
    • fadeToAction() for idle/walk/run crossfade
    • Camera-relative WASD via applyAxisAngle(_up, cameraAzimuth)
    • Model facing: atan2(v.x, v.z) + CHARACTER.facingOffset
    • model.quaternion.rotateTowards(targetQuat, turnSpeed * delta)
  5. Update Game.js:
    • Add OrbitControls — third-person camera orbiting player
    • Camera follows: move orbitControls.target + camera.position by player delta
    • Pass orbitControls.getAzimuthalAngle() to Player for camera-relative movement
  6. Replace environment primitives with loadModel() calls + .catch() fallback
  7. Add THREE.GridHelper for visible movement reference
  8. Preload all models on startup with preloadAll() for instant loading

Step 6: Tune & Verify

  • Run npm run dev — walk around with WASD, orbit camera with mouse
  • Confirm character animates (Idle when stopped, Walk when moving, Run with Shift)
  • Adjust MODEL_CONFIG values (scale, rotationY, offsetY) per model
  • Run npm run build to confirm no errors
  • Generate ATTRIBUTION.md from .meta.json files

Example Usage

With Meshy AI

/add-3d-assets examples/space-explorer

Result: Generates custom knight model via Meshy → rigs and animates (Idle/Walk/Run) → replaces BoxGeometry player with animated GLB → adds OrbitControls camera → world props from free libraries.

Without Meshy (fallback)

/add-3d-assets examples/3d-platformer

Result: Copies Soldier.glb from character library → configures SkeletonUtils.clone() → fadeToAction animation crossfade → replaces all primitives with library/downloaded models.

Troubleshooting

Model stuck in T-pose (not animating)

Cause: Using .clone(true) instead of SkeletonUtils.clone() breaks skeleton bindings on animated GLB models. Fix: Always use SkeletonUtils.clone() from three/addons/utils/SkeletonUtils.js for any model with animations. Regular .clone() copies the mesh but not the skeleton bindings.

Meshy AI generation fails or returns low quality

Cause: Vague prompts or wrong generation mode selected. Fix: Use specific, descriptive prompts (e.g., "low-poly medieval wooden treasure chest, game asset" not "chest"). For characters, use image-to-3D mode with a reference image. Set art style to "game-asset" or "low-poly" for better game integration.

Rigging fails on generated model

Cause: The model geometry is not suitable for auto-rigging (too complex, non-manifold, or not humanoid). Fix: Simplify the prompt to produce cleaner geometry. Ensure the model is a single connected mesh in a humanoid pose. Non-humanoid models (props, vehicles) should not be rigged — use them as static assets instead.

meshopt decoder error on load

Cause: Some GLB files use meshopt compression which requires a decoder not loaded by default. Fix: Add the meshopt decoder before loading: import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js'; loader.setMeshoptDecoder(MeshoptDecoder);

Model facing wrong direction

Cause: Different model sources use different forward directions. Mixamo models face -Z, some others face +Z. Fix: Store a facingOffset per character model. Apply it as model.rotation.y = facingOffset + movementAngle. Common values: Soldier/Xbot need +Math.PI, Robot/Fox need +0.

Next Step

Tell the user:

Your 3D game now has custom models! Characters were generated with Meshy AI (or sourced from the model library), rigged, and animated. World objects are loaded from GLB files.

Files created:

  • src/level/AssetLoader.js — model loader with SkeletonUtils
  • public/assets/models/ — generated and downloaded GLB models
  • OrbitControls third-person camera

Controls: WASD to move, Shift to run, mouse drag to orbit camera, scroll to zoom. Run the game to see everything in action. Adjust MODEL_CONFIG in Constants.js to fine-tune scale and orientation.

Frequently asked questions

What does the Add 3d Assets AI skill do?

Replace primitive 3D shapes with real GLB models — animated characters, world props, buildings, and scenery for Three.js games. Use when the user says "add 3D models", "replace the boxes with real models", "add GLB assets", or "make the 3D game look real". For 2D pixel art, use add-assets instead. Do NOT use for 2D pixel art (use add-assets) or gameplay changes (use add-feature).

Why use Add 3d Assets on TypingMind?

Because you install it once and use it with any model. Add 3d Assets is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Add 3d Assets in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/PlayableIntelligence/game-creator/tree/main/skills/add-3d-assets. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Add 3d Assets?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Add 3d Assets?

As many as you like. As long as a model supports skills, you can use Add 3d Assets with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Add 3d Assets AI skill free?

Yes. It is published on GitHub by PlayableIntelligence under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇