Traluno▶ Play Traluno

Two Material Languages, and Why They Must Not Mix

Traluno's voxel art style has one rule: anything built is stacked blocks, anything manufactured is smooth. Where the line falls, and what breaks if crossed.

The Steam Express standing at a station platform, its smooth black locomotive, tender and coaches in front of station walls and a townhouse built from visibly stacked blocks.

The reference image that set Traluno's voxel art style shows a locomotive and a coach standing on a world made of bricks. The buildings, the hills, the trees and the platform are all visibly stacked cubes. The train is not. It is a solid shape with smooth sides.

That single contrast is the entire art direction, and it is much easier to break than it looks.

The rule behind the voxel art style

Anything built is made of blocks. Buildings, walls, roofs, terrain, trees, fences, platforms, industrial structures. These are drawn with a voxel builder that fills a region with cubes, leaves a seam between them and nudges each cube's brightness, so a wall reads as many bricks rather than one painted surface. The seams are real gaps, 0.055 units wide by default, with a darker box inside the shell so they read as mortar rather than as holes into the model.

Anything manufactured as one piece is smooth. Road vehicles, locomotives, wagons, boats, containers, animals and people. Plain boxes, plates and cylinders, with no seams and no per-cube jitter.

The test is not "is it small?" or "is it detailed?". It is: in the world this thing depicts, was it assembled from parts on site, or did it come out of a factory finished?

The Yard Office is built, and so is the Harbor Crane: an industrial structure, its legs and gantry laid in blocks. The containers it lifts are manufactured, and the Container Stack draws them as smooth boxes with corrugation ribs and end doors. The Fair Booth is built, but its striped awning is fabric over a frame and stays smooth. A tree is built, which surprises people until they think about a model tree, which really is made of separate pieces of foliage stuck on.

A Harbor Crane on a quay, its yellow legs, gantry and bracing laid in blocks with visible seams, straddling the line where the Harbor Shunter stands with its container wagons, among Container Stacks drawn as smooth ribbed boxes.
The Harbor Crane is built in blocks; the containers round it are smooth.

One exception is practical rather than philosophical. A window frame is 0.22 units thick, and subdividing something that thin into cubes shows nothing while costing four times the geometry, so frames, mullions and fence rails are plain boxes even on a house made of blocks.

Why mixing them fails

Voxelise a car and it stops reading as a car. At the size a car occupies from standing height, the cube seams are close enough together to become a texture, and the eye interprets a textured lump as scenery. The car joins the buildings. It stops being a thing that moves.

A red car on a town street, one smooth moulded shape, in front of a cottage whose walls, roof tiles and bushes are all separate seamed blocks.
A smooth car in front of a cottage built from blocks.

The failure runs the other way too, less visibly. Smooth a building and it reads as a prop rather than a place. A smooth house has no scale reference in it, so it could be a doll's house or a tower block. The blocks are what tell you how big a house is: you count the courses.

That is the actual function of the block language. It is not nostalgia, it is a ruler. Not every block is the same size, since the ground is laid five blocks to a cell and doors and paving are finer, but walls are laid in blocks of about one unit, and walls are what you measure a building by. A Cottage's walls are four courses high, a Townhouse's seven, the Apartment Block's eleven.

A Cottage, a Townhouse and an Apartment Block standing side by side, square on to the camera, their walls laid in courses of blocks with the seams between them showing.
Cottage, Townhouse and Apartment Block side by side, each wall laid in courses.

Where the detail goes instead

The hard part of the rule is that it forbids the easiest way to add detail to a smooth model. You cannot subdivide the surface into smaller cubes, because that turns it into a built thing.

Detail on a manufactured model has to come from silhouette. The code-drawn steam locomotive, which still stands in whenever its glTF file is missing, has boiler bands, a smokebox door, a chimney with a cap, a dome, a safety valve and a running board. Each of those is a separate small piece that changes the outline. None of them is a subdivision of an existing surface.

The edges do the rest. Every box on a code-drawn vehicle, vessel, animal or person is chamfered, even where it sits inside a scenery model, like the cows in the Cow Pasture or the Cargo Ship's hull. A chamfered box is six inset faces, twelve bevels and eight corner triangles: 44 triangles against a plain box's 12. A hard-edged cuboid reads as masonry next to a moulded body, and a bevel that catches its own shade is what makes a form read as rounded. Buildings leave the bevel off, which is a budget decision as much as a style one, because a town is thousands of boxes.

Two mechanical traps

There is a builder function for boxes that rotates about the vertical axis only. That is right for almost everything, because almost everything on a layout is upright and turned to face somewhere.

It is wrong for anything lying in the vertical plane: a wheel rim chord, a diagonal strut, a turbine blade, a ladder rail on a slant. Those need the plate builder, which rolls about the depth axis instead; the Ferris Wheel's raking legs and every chord of its rim are plates. Faking a diagonal by chaining small boxes along it does not work. It reads as a dotted line, not a strut.

The second trap is the window function. It draws a glass box into the lit mesh and a tint into the glow mesh, and the glow mesh only shows at night. That is exactly right for a window: dark by day, lit from within after dusk. When the Lights Come On explains the glow mesh itself.

It is exactly wrong for anything meant to read as clear glazing. A bus shelter built with it is a solid near-black box all day, and so would be a glazed canopy. The Bus Stop's shelter was drawn that way once and looked like a coal bunker. It is pale solid panels now, as the tour of buildings at night points out, so it reads as glass by day and never lights up.

Where the line got redrawn

Moving models now come from glTF asset kits, Kenney's public-domain ones, rather than being drawn in code, and that reinforced the rule rather than blurring it: the kits are smooth, single-piece models, exactly the language the manufactured category already wanted. The code models are still there underneath. Each is built and shown first and hidden when its file arrives, so the game still runs with no asset files at all.

Buildings will never make the same move, and not for aesthetic reasons. The Mountain with Tunnels reads the track underneath it to carve tunnel bores where the rails pass through. The Zebra Crossing reads the road beneath it to know which way its stripes run. A static asset cannot do either, because it does not know what it is standing on. And the per-position colour hashing that stops a row of houses looking like a row of copies would have to go, because a static mesh has one set of colours.

So the split is now also a technical split: the trains, road vehicles, people and small boats are assets, and the things that respond to what is around them are code. That was not the plan. It just turned out that the two categories the art direction had already drawn were the same two categories the engine needed.

  • art direction
  • models
  • voxel

◀ All postsMore on behind the build