Ironspine
README.md
suitgeom
The hard-surface mesh builder the IRONSPINE exosuit is made of. Shapes are appended into ONE vertex buffer per part, so a plate with forty bolt heads is still one draw.
| Call | Shape |
|---|---|
Geo.slab(b, fr, hx, hy, hz, ch, col, taper?) | a box with every edge chamfered — the workhorse |
Geo.cylinder(b, fr, r1, r2, h, seg, col, capA?, capB?) | a tapered tube along the frame's +Y |
Geo.torus(b, fr, R, r, majorSeg, minorSeg, col) | a ring — hydraulic ribs, clamp collars |
Geo.bolt / Geo.boltRow | a hex head sunk in a washer, alone or in a row |
Geo.sweep(b, pts, r, seg, col) | a tube through a path — cabling, hoses, the tether |
Geo.fin(b, fr, len, root, tip, thick, col) | a flat tapered vane — cooling fins, boot cleats |
Frames are built with Geo.frame(origin, up, forwardHint) and moved around with
Geo.offset and Geo.rotated, so a sub-shape is placed in the part's own terms
rather than in world numbers.
Two things make the result read as a made object rather than a box stack:
Chamfers. Every plate edge is cut, so a raking storm sun catches a highlight along it. A raw cube has nothing to catch.
Vertex colour. col is either a flat {r,g,b} or a function of the local
point and its normal, and the builtin pbr shader multiplies it into
base_color — so one material carries rust, verdigris, salt bloom and edge wear
across a single mesh.
Geo.noise / Geo.fbm are deterministic, so the same seed gives the same rust
every boot and a screenshot taken today matches the one taken tomorrow.
Geo.upload(builder) hands the accumulated geometry to the GPU and returns a
MeshHandle a Model component takes directly, plus the triangle count.