Every solid thing a world shows (a lantern, a wall, a boat) is drawn from a mesh: a surface of triangles a graphics card can draw. (Lights, sounds and on-screen panels are drawn in other ways; this page is only about surfaces.) A 3-D modeling program usually saves each surface as its finished mesh. A ConeScript world does not ship the mesh. It describes how to make it: a procedural generation pipeline, a series of steps such as "draw the post's cross-section, then turn it on a lathe". The visitor's 3-D browser downloads that description and runs the pipeline, which hydrates it into the mesh that is drawn.

This page follows one object, a garden lantern, from its first block to its finished form, and introduces each kind of step at the point the lantern needs it. The lantern uses most of the tools; the few it has no need for (rounding edges, for one) are shown on other small objects along the way. By the end you will know the four things a pipeline does (start from a solid, shape from paths, combine pieces, refine the surface) and which tool to reach for at each. Every tool's exact options are in the Shape tools appendix, which this page links to rather than repeats.

Why a recipe instead of a mesh

A mesh lists every point of every triangle; the lantern's recipe is a few dozen numbers. Sending the recipe has three payoffs:

Every machine runs the same recipe and gets exactly the same mesh, so every visitor sees the same lantern.

The first steps: a ready-made solid

The simplest pipeline is a single step that makes a ready-made solid: a box, a cylinder, a sphere or a cone. The lantern's head sits on a plinth, a flat block 14 cm square:

box(x: -0.07 ..= 0.07, y: 0.24 ..= 0.26, z: -0.07 ..= 0.07)     // 14 cm square, 2 cm thick

Sizes are in meters, and y is up. A range such as 0.24 ..= 0.26 says where the box starts and ends on that axis, so this one sits 24 cm above the ground. The four corner posts of the head are boxes too, tall and thin. A surprising amount of any world starts this way.

But most things aren't boxes: start from a path

The lantern stands on a stake: a thin round post that tapers to a point where it goes into the ground. No box makes that. What an artist would do is draw the post's side view, half of it, and spin it round. ConeScript does the same.

The half side view is a profile path: a line of points drawn flat, like a curve on paper. Each point says how far out from the middle the post is, and at what height:

let stake = [(0, -0.22), (0.008, -0.20), (0.018, -0.12), (0.018, 0.244), (0, 0.244)]
            // (out from the middle, height): a point in the ground, a 1.8 cm post, a flat top
lathe(profile: stake, steps: 32)                                 // spun round in 32 steps

The lathe turns the profile round the vertical axis, as wood is turned. Posts, vases, bulbs and balloons are all made this way.

A profile path can do three other things, each for a different kind of form:

The lantern's roof is a loft. It is hipped: 19 cm square at the eaves, it rises gently, then more steeply, to a top 10.4 cm square, all in 5 cm of height. Three squares at three heights describe it:

loftAlong(profiles: [profilePath.rectangle(width: 0.19,  height: 0.19),     // the eaves
                     profilePath.rectangle(width: 0.14,  height: 0.14),     // where the pitch changes
                     profilePath.rectangle(width: 0.104, height: 0.104)],   // the top
          path: spacePath.line(from: (0, 0.388, 0), to: (0, 0.438, 0)),    // 5 cm straight up
          stations: [0, 0.28, 1],             // where each square sits along the path
          caps: false)                        // open underneath: it sits on the fascia

The stations place the squares: the first at the bottom, the middle one 28% of the way up, the last at the top. Putting the middle square low makes the first band shallow and the second steep.

One piece is rarely the object: combine them

The lantern now has a stake, a plinth, posts and a roof, each made separately and each sitting where its numbers put it. Combining tools gather them into one shape, copy them, and cut them.

Each piece stays in its own material: the lantern's glass, its bulb and its bronze are separate parts, each drawn in its own material. A shape is one surface in one material, so an object of several materials is several shapes.

It looks machine-made: refine the surface

Pieces made of boxes and lathes have perfectly sharp edges and perfectly flat faces, which real things rarely do. The last group of tools works on the surface of a shape already made. Most of them ask which part of the surface to change, and you say it by description rather than by numbering faces: "the edges sharper than 30 degrees", "the faces facing up". That description is a selection.

The lantern is crisp metalwork, so it keeps its sharp edges and skips this step. A stone, a cushion or a carved handle would not.

Then hand it on

A finished shape still needs to know how a texture wraps it. Each tool leaves sensible texture coordinates as it goes: a lathe wraps round and up the profile, a box wraps each face. The uv tools replace them where you want something else. What the surface is made of is the next subject: Materials and Textures.

The whole lantern

Put together, the lantern's pipeline is the four steps in order: ready-made boxes for the plinth and posts; a lathe for the stake and a loft for the roof; join and copy to assemble the head; no refining, because it is metal. The complete recipe, with every number from the island, is on The lanterns.

Beyond sculpting

Some forms are better made by a specialist than by sculpting: a tree grown from a seed, a rock, a person's body from measurements, cloth draped over it, hair, or grass across a meadow. Each has its own package, which takes a few settings and returns a finished form. They are listed in the Shape tools appendix and described on the pages for Generators and Fitted and grown.

Where to look things up

Narrative draft, 20 Oct 2026, beside the current Sculpting page for comparison. It uses proposed names: profilePath for a flat path (today outline), spacePath and path: for a path through space (today spine). A part's address (a.b) would be its part path.

← Composing the tools | Contents | Generators and scattering →