kapy academy

Surface Textures

5 min readUpdated Aug 2026

A knurl on a thumbwheel, a grid on a grip, a pattern of relief slots on a wall: a surface texture is authored code run across an area of your part rather than geometry you draw. Pick a Surface textures tile and it either lands on the face you had selected or asks you to point at one.

Two ways one arrives

Which gesture you get depends on how the object was written.

A fill texture covers an area. If a face or region was selected when you picked the tile, it applies immediately, with no cursor step at all. If nothing was selected, it starts a face or region pick and waits for you.

A positioned code object behaves like any other placement: a ghost on the cursor, and a click to drop it. Finding and Placing an Object covers that gesture.

Either way, reopening the item from the timeline lets you re-target it. Hover another face and the preview follows; drop it to move the texture there. That is the way to correct a texture that landed on the wrong face: re-target it rather than deleting it and starting again, because the parameters you have already set stay with the item.

Region beats face

You can point a texture at a whole face, or at a region: a closed area drawn by a sketch on that face. A region always wins over the face it sits on. If a region is selected, the texture is restricted to it, even though the face underneath is selected too.

What that produces depends on what is under the region.

  • A region on a body cuts or embosses that body, confined to the region's outline. This is how you texture a patch of a wall rather than the whole wall.
  • A region on a bare plane, with no solid under it, becomes its own new body. Nothing is modified because there was nothing there; you get a fresh body made of the texture. If what you wanted was a pattern in the part, the sketch is on the wrong thing: draw it on the face.

Both routes need something flat. A texture runs against a planar face, or against a region drawn on one, and there is no way to wrap one round a cylinder or a fillet in this release. Regions and Profiles covers how a region gets defined in the first place.

The parameters you can change

The popover shows the object's declared parameters, and nothing else. Numeric ones take an expression, so a pitch can be driven by a document parameter. Boolean ones are toggles, and the ones the author declared as a fixed set of options are dropdowns.

Depth and the cut-or-add choice are not among them. A fresh code texture is seeded to subtract, 1.5 mm deep, with no margin, and the popover renders no control for any of those three. There is no field to change the depth and no toggle to make it emboss rather than cut. What is editable is what the object's author chose to expose, so if depth matters to you, look for an object that declares it as a parameter.

1.5 mm is deep for a printed wall

That default is worth doing arithmetic on before you apply it. A 1.5 mm cut goes clean through a 1.2 mm wall, three lines from a 0.4 mm nozzle and a perfectly ordinary wall to have chosen. On a 2 mm wall it leaves 0.5 mm behind, thinner than two lines, which is a wall that will not survive handling.

Check the thickness of the wall you are texturing before you commit. If the wall cannot afford 1.5 mm, thicken it, or use a texture whose depth you can set.

A fill texture has no handles

A fill texture is given no anchor point, and that has a visible consequence: no rotation ring and no positioning dimensions. There is nothing to grab and nothing to constrain, because the texture covers the area rather than sitting at a point in it. A positioned code object does have both. If you need a pattern turned to a particular angle, that is the kind to reach for.

When it fails

The first row of an imported texture is blank. An object imported as code arrives with no stored preview, so its picker row shows nothing until one is generated in the background. Give it a moment, or use the header's refresh button. The object itself is fine.

Loading object code… stays on screen. The definition is still being fetched. It resolves or it turns into the message below.

This object's code source is unavailable — it could not be loaded. The code behind the texture could not be fetched at all, so its parameters cannot be edited. Versions and What Goes Wrong covers the version and refresh controls that clear this.

Object failed to regenerate. The code ran and did not produce usable geometry. Change the parameter you changed last back to a value that worked, or point the texture at a different face.

Nothing happened when you picked the tile. A fill texture with a face already selected applies instantly, with no ghost and no click. Look at the timeline: the item is already there.

See also

Discord