assetyardby Binary Helix

PLAYABLE · THREE.JS · 864,931 TRIANGLES

The same pack,
in three dimensions.

A town square, a long hall, and a vault with something in it. Each room is one generated picture, rebuilt in 3D with a walkable floor. The character you move and the ones that come at you are the rigged GLBs from the free pack, playing the clips that ship inside them.

Starting the renderer.

WASD or arrows to move. Shift to run.

WASD moves, Shift runs. Click or J attacks, and three hits chain. Hold right mouse or K to block; raise it just before a blow lands to parry. F bashes, Q drinks, E talks or uses a door. The town and the hall each open a glowing ring at their far door.

What is running

In the worldFrom the packThe command that made it
The town square, the hall and the vaultOne picture each, rebuilt as a GLB with the source camera and a walkable floorassetyard generate image painted the pictures. The environment backend rebuilt them, and assetyard generate environment runs the same step.
You, the merchant, the stalkers and the wardenRigged glTF with clips insideassetyard generate model --animation-pack
Sword, greatsword, cratesProp meshes, held in hand bones or set on the floorassetyard generate model --geometry-profile prop
Shield faceA painted image cut to a heater outline with an iron rim, strapped to the forearmassetyard generate image
Score, impacts, the cryMusic, effects, speechassetyard generate music · sfx · tts

Nothing here is a placeholder cube with a placeholder texture. Every figure, prop and sound came out of the same command line with one account. The rooms came from the environment backend, which runs from the same command line.

The rooms are pictures

The image model paints each room from a raised viewpoint, with a wide floor in frame. The environment backend estimates the depth of every pixel and returns one GLB: a backdrop mesh at metric scale, the camera that took the picture, and a floor collider with a walkable grid.

Every account runs it with one command. It costs 0 credits during the free beta.

assetyard generate environment \
  --reference-image assets/environment-hall.png \
  --out assets/environment-hall.glb

The game camera starts where the picture was taken. It pans and zooms to follow the fight, drifts a little, and pushes in when a fight starts, so the depth of the room shows. It never walks around the room, because one picture has nothing behind its pillars. The backdrop writes depth, so the figures pass behind pillars and walls. People, crates and lamps are placed by picture position, cast onto the rebuilt floor.

How one picture becomes a room, and how to make your own →

The clips are in the file

A rigged character from Asset Yard arrives as a single GLB: mesh, skeleton, skin weights and named animation clips in one download. Three.js plays them with no conversion step and no import pipeline.

assetyard generate model \
  --prompt "A shieldmaiden warrior in a neutral A-pose" \
  --geometry-profile character \
  --animation-pack humanoid_sword \
  --out assets/hero.glb

This build asks each character for a role rather than a clip name, and takes the first clip the pack actually provides. That is what the readout below reports, so you can see which swing is a real sword clip and which is standing in.

Reading the clips out of the GLB files.

Every published animation pack and its clips →

Use it as a template

The world is one file, no build step, no bundler. Swap the asset names at the top and it is a different game: a lot of what people call a prototype is this file with other meshes in it.

curl -O https://assetyard.dev/demo3d/world3d.js

It reads window.HOLLOWREACH_3D for the file names and window.PACK_VERSIONS for cache busting. Both are written by the page, so a new pack needs no code change.

The other half

The turn-based crawler runs on the flat half of the same pack, in Phaser.