Why Roblox clothing looks frayed at the seams
Two different faults get called a seam, and only one of them is the file’s fault. The common one: the avatar does not sample your texture one pixel at a time, so where a face meets its 2px gutter a single sample straddling that edge picks up half painted pixel and half nothing — measured, it keeps 50% of full opacity, and that missing half reads as a pale fringe. Filling the gutter takes the same sample back to 100%.
| Which seam you have | What is wrong | Fixable on export? |
|---|---|---|
| Sampling seam | The artwork already lines up. The gutter and texture filtering expose a hairline anyway. | Yes — measured below |
| Authoring seam | The two sides of a fold are painted different colours, so there is a real edge in the design. | No. Nothing can invent the colour you did not paint |
Everything below is about the first one. If the two sides of your fold are genuinely different colours, that is a drawing to change, not an export setting — and a tool claiming otherwise is one export away from being caught.
The measurement
A single face filled to its own boundary, then the same file after the exporter’s
bleed stage. These are the real texels either side of the edge of
torso.front, at x = 358, magnified:
Painted to the edge — the gutter is empty
After the bleed — the gutter carries the edge colour
tools/make_seam_demo.mjs, which runs the same
dilate() the exporter runs.| Sample centred on the boundary | Alpha | Colour returned |
|---|---|---|
| Painted to the edge | 50% | rgb(0, 57, 107) |
| After the bleed | 100% | rgb(0, 114, 214) |
Why it gets worse the further away you stand
The measurement above is the gentlest case: one sample, four texels. At distance the renderer switches to smaller mip levels, where a single texel already averages several of yours, so the same missing alpha is spread across a wider band. This is why a shirt can look clean in Studio at full size and show pale lines at the seams in a real game — nothing changed except how far away the camera is.
Why you cannot just paint past the edge
You can, and you should — but not by hand. The 2px gutter is unpainted template, not part of any face, and what belongs in it is whatever sits at the edge of the face beside it. Painting into it by eye means guessing that colour 18 times over, and getting it wrong is a coloured line rather than a pale one.
The correct fill is mechanical: take the colour of the nearest painted texel and extend it outward far enough to survive filtering. Our exporter runs 3 passes, one more than the gutter is wide, so a sample landing anywhere on the boundary lands on colour.
Next door on the sheet is not next door on the body
Filling the gutter from the face beside it is only right when that face is the one the surface actually continues onto. Often it is not: the template packs the limb strips so that a rectangle’s neighbour on the sheet can be a completely different part of the avatar, and the two limb strips do not even run in the same order.
So the exporter does not guess from the layout. It asks the body geometry which texel continues the surface across each 3D edge — including a check that the two surfaces face the same way, which is what stops the chest bleeding onto the hidden inner face of an arm pressed against it. That correction runs in a 2-texel band before the gutter is filled at all.
Transparent designs are the case that breaks naive fixes
The obvious implementation — flood the gutter with a solid colour — ruins any design that is meant to be see-through, because it puts an opaque halo around something transparent. The bleed has to carry alpha out with the colour, so a transparent edge yields a transparent gutter. That is the difference between a fix and a different bug.
The sampling seam is handled on export, automatically. Roblox Clothes Maker carries each edge across the 3D join and then fills the gutter when it writes your PNG, so the file you upload samples cleanly. It cannot repair a fold whose two sides you painted different colours — nothing can — but it will not be the reason your edges fray. Open the editor.