Model a game-ready low-poly 3D prop from a one-line brief, within a tight triangle budget
Exact prompt
# Game-ready low-poly 3D asset from a one-line brief `asset.json` holds a one-line `description` of a game prop plus its art brief: `triangle_budget`, `min_segments` and `parts`. Write `solve.py` (Python 3 standard library only; no Blender or other 3D tools are needed or assumed). `python solve.py input.json answer.json` (first argument unused; read `asset.json` from the current directory) writes `asset.obj` and `answer.json`. Fresh briefs (other props) are generated when scoring. ## Geometry rules (metres, +Y up, ground plane y = 0) 1. Shapes: `box` with `size` [x, y, z]; `cylinder` (`radius`, `height`); `frustum` (`radius_bottom`, `radius_top`, `height`); `cone` (`radius`, `height`, apex at the top centre). Round shapes have their axis along +Y. 2. Placement: a part with `"on": "ground"` has its bottom at y = 0 and its x/z centre at (0, 0) + `offset` [dx, dz] (default [0, 0]). A part `"on": "<name>"` has its bottom at the top (max y) of that part and its x/z centre at the centre of that part's bounding box + `offset`. If the named part is an array, use the bounding box of all its instances. 3. `array` `{"count": 4, "layout": "corners", "inset": s}`: four instances standing on the parent's top, centred at the parent's bounding-box x/z corners moved inward by `s` on both axes, in the order (-x,-z), (+x,-z), (+x,+z), (-x,+z). 4. Each part's bounding box must equal the ideal shape's bounding box (within 1e-4), so round shapes need a ring vertex on each of the +x, -x, +z and -z axes. 5. Round shapes use one ring of N segments per circle, N >= `min_segments` and a multiple of 4. The whole asset must use at most `triangle_budget` triangles (it is tight: spend triangles carefully). 6. Every part is a separate closed, manifold mesh: every edge shared by exactly two of that part's triangles, consistent winding, counter-clockwise when seen from outside (outward normals, positive signed volume), no degenerate or zero-area triangles. Vertices may be shared or duplicated; edges are compared by position. ## asset.obj Wavefront OBJ, `v x y z` and triangle-only `f` lines. One `o <name>` per part; array instances are `o <name>.1` .. `o <name>.4`. No other objects. ## answer.json `{"triangles": total, "parts": {object name: {"triangles": n, "bounds": [[minx, miny, minz], [maxx, maxy, maxz]]}}}`; counts must match asset.obj. ## Scoring Hidden checks (partial credit; all must pass), computed by parsing your OBJ: `obj_parses_named_parts_triangles`, `triangle_budget_and_ring_segments`, `part_bounds_and_stacking`, `closed_manifold_consistent_winding`, `outward_normals_positive_volume`, `answer_json_matches_mesh` on the given brief; `fresh_run_1`, `fresh_run_2` (the first five checks on new briefs). 30-second limit per run.
Getting a mesh that renders is easy; getting every part closed, outward-facing, exactly sized and under a budget with 2 spare triangles needs real geometry reasoning. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).
Success criteria: 1. obj_parses_named_parts_triangles 2. triangle_budget_and_ring_segments 3. part_bounds_and_stacking 4. closed_manifold_consistent_winding 5. outward_normals_positive_volume 6. answer_json_matches_mesh 7. fresh_run_1 8. fresh_run_2
Best model for this task so far: Claude Haiku 5.5 (effort default (no --effort flag) · thinking on) (success, $0.02, 2m).
Latest output per model
All runs (7)
86% pass rate across 7 eligible runs: 6 pass, 0 partial, 1 fail. Partial and failed runs are listed below with everything else.ⓘ
| Model | Cost | Time | Step-insⓘ | Autonomy | Outcome | Trustⓘ | Date | Compare |
|---|---|---|---|---|---|---|---|---|
| KKimi K3.1 Pro (Venice)thinking on | $0.23 | 6m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-29 | |
| GGemini 4 Argonmedium · thinking on | $0.26 | 4m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-28 | |
| MMistral Small 3.2 24B Instruct (Venice)thinking on | $0.0022 | 40s | 0 | Fully autonomous | fail | Trust 80% | 2026-10-23 | |
| OGPT-6.1 Soldefault · thinking on | $0.04 | 1m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-22 | |
| AClaude Haiku 5.5default · thinking on | $0.02 | 2m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-20 | |
| AClaude Opus 5.5default · thinking on | $0.24 | 1m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-20 | |
| AClaude Sonnet 5.5default · thinking on | $0.09 | 35s | 0 | Fully autonomous | pass | Trust 80% | 2026-10-20 |
Embed this result
A live badge for this use case. It links back here and updates as new runs are published.
Get new runs and ranking changes weekly
Which models got better or cheaper on real tasks like this one.