Skip to content

Chess + Checkers: 3D asset contract ​

Walnut 8×8 board with a–h / 1–8 border, a boxwood/ebony Staunton set (12 models) and checkers (2 models). Checkers uses the same board.

The game code positions every prop from these numbers (also in shared/props.lua). Change sizes, origins, names or face mappings only together with the scripts in blender/ and a re-export.

AssetName (model + file)SizeOriginNotes
Boardlumo_chess_board0.48 × 0.48 × 0.023 m, face at z = 0.020centre of the bottomFace lumo_chess_face covers the central 0.46 m (8 × 50 mm squares + 30 mm border), UV 0..1. Textures in lumo_chess_board.ytd (not embedded). a1 dark, bottom-left on white's (−Y) side. Box collision.
Pieceslumo_chess_<white|black>_<pawn|rook|knight|bishop|queen|king>pawn 42 mm … king 76 mm tall, bases Ø 27–34 mmcentre of the base, z = 0 bottomKnight faces +Y (turn black's 180°). Embedded textures. No collision.
Checkerslumo_chess_checker_white, _blackØ 38 mm × 9 mmcentre of the bottomKing = two stacked (second at z + 0.009).
Ytyplumo_chess.ytyp——One archetype per model

Square (c, r): c = file 0..7 along +X, r = rank 0..7 along +Y; offset x = (c − 3.5) × 0.05, y = (r − 3.5) × 0.05. ChessProps.piece(colour, kind) and ChessProps.squareOffset(c, r) in shared/props.lua.

Face textures: UV v up = +Y in Blender; Sollumz flips V on export, so in game v = 0.5 − y / size (v = 0 is the +Y edge) and the PNG's top row is the +Y edge.

Rebuild ​

Needs Blender 5.2 LTS, Sollumz 2.9 and texconv.exe (Microsoft DirectXTex) on PATH or in %USERPROFILE%\.local\bin (the lumo-ludo pipeline).

  1. Only if the art changed: python blender/make_textures.py (Python 3 + Pillow + numpy).
  2. Blender → Scripting → Text → Open blender/build_all.py → Run Script (or blender --background --python blender/build_all.py). It empties the open scene, rebuilds every prop, exports to stream/ and saves blender/lumo_chess.blend.
  3. Never hand-edit the files in stream/; change the scripts and run again.

Blender MCP prompt: "Run blender/build_all.py in Blender with __file__ set to its path, show me the report and the files it wrote, then screenshot the props in Material Preview."