Skip to content

Carrom: 3D asset contract ​

Tournament-size carrom board (74 cm playing surface, cut pockets), 9 white + 9 black coins, the red queen and a striker.

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_carrom_board0.86 × 0.86 × 0.030 m; playing surface 0.74 m at z = 0.012, rails 18 mm above itcentre of the bottomFace lumo_carrom_face covers the 0.74 m surface, UV 0..1. Textures in lumo_carrom_board.ytd (not embedded, for a DUI). Pockets r 22.5 mm at (±0.346, ±0.346), floor z 0.003. Box collision.
Coinslumo_carrom_coin_white, _coin_black, lumo_carrom_queenØ 30.2 mm × 8 mmcentre of the bottomEmbedded textures. No collision.
Strikerlumo_carrom_strikerØ 41.3 mm × 8 mmcentre of the bottomEmbedded.
Ytyplumo_carrom.ytyp——One archetype per model

Markings: baselines 10.15 cm from each rail (two lines 3.18 cm apart, red end circles at x = ±0.2191), centre circle r 8.5 cm, pocket arrows. Numbers in shared/props.lua. Physics is up to the game code (the board's collision is only a box so peds don't walk through it).

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_carrom.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."