Breaking the Tile #16 min read
Why your wall looks tiled — and the four-node fix that buys you the most
Visible repetition is not a texture-resolution problem, it is a spatial-frequency problem. Once you can name what your eye is catching, the cheapest fix is four nodes and about ten minutes.
Written againstUnreal Engine 5.7Substance 3D Designer 14

Everybody knows a tiled texture when they see one. Very few people can say what they are seeing, which is why the usual response — go get a bigger texture — does not work and costs memory to fail.
Here is the useful framing. Your eye is not detecting the texture. It is detecting a regular spatial frequency: some feature repeating at an exact interval. A bigger texture moves that interval further apart. It does not remove it. Walk backwards and the repetition comes right back, now at a scale that covers half your screen.
So the whole discipline of breaking tiling is: add variation at frequencies your tile does not contain, especially frequencies much lower than the tile itself.
Name what you are seeing first
Before touching a graph, work out which of these you have. They have different fixes and people routinely apply the wrong one.
| What you see | The actual cause | What fixes it |
|---|---|---|
| A visible grid | Value differences at the tile edge | Macro variation (this article) |
| The same blemish everywhere | A high-contrast unique feature inside the tile | Remove it from the tile; add it back as a decal |
| Regular lighting bands | Normal or roughness repeating, not albedo | Break roughness separately from albedo |
| Obvious seams at UV edges | The texture is not actually tileable | Fix the source texture — no shader saves this |
| Repetition only at distance | Mip levels converging to a flat average | Distance-based blend, later in this series |
The first row is the one you have about eighty per cent of the time, and it is the one with the cheapest fix by a wide margin.
The four-node fix
Macro variation. One extra texture, sampled at a much larger scale than the base, multiplied over the top, and then blended back so it does not turn to mud.

Nodes in this graph · Unreal Engine 5.7
TextureSample— the tiling base, UVs scaled to your normal tiling rateTextureSample— a soft greyscale noise, UVs scaled 0.02–0.06× the base — this is the whole trickMultiply— base RGB against the noise, giving you dark and light regionsLinearInterpolate— blend from the untouched base toward the multiplied version, driven by a scalar parameter so you can dial the strength in an instance
The number that matters is that second UV scale. If your base tiles at 8× across a surface, the macro noise wants to be somewhere around 0.25× — roughly one thirtieth of the base frequency. Get it wrong in the obvious direction and you have just added a second visible tile.

Straight 8× tileWith macro variationThe parameter values I actually ship
| Parameter | My default | Range worth trying |
|---|---|---|
| Macro UV scale | 0.03 of base tiling |
0.015–0.06 |
| Blend strength | 0.35 |
0.2–0.5 |
| Noise contrast | Soft — no hard edges | — |
| Applied to | Albedo, and roughness at half strength | — |
That last row is the one people skip and it is the difference between “less tiled” and “not tiled”. If you only break the albedo, the specular response still repeats at the original period, and in any scene with a moving light your eye locks straight onto it. Feed the same noise into roughness at about half the strength.
What it costs
The reason to reach for this first is not that it is the most powerful technique in the series. It is that it is nearly free, so it is the correct default on every tiling material you author.
| Metric | Base material | With macro variation |
|---|---|---|
| Instructions (base pass) | 112 | 121 |
| Texture samples | 3 | 4 |
| Additional texture memory | — | ~0.7 MB shared |
| GPU time, material eval | baseline | +0.4% |
| Visible tiling at 10 m | obvious | gone |
Measured with stat gpu and the material stats panel, averaged over 300 frames from a fixed camera. The noise texture is a single 512 greyscale shared across every material in the set — which is why the memory cost rounds to nothing at scene scale.
Nine instructions and one shared 512 map. That is the whole bill.
When this is not the answer
Macro variation fixes value repetition. It does not fix:
- Shape repetition. If your texture contains one distinctive crack and that crack appears every two metres, no amount of tonal variation hides it. Take the feature out of the tile and reintroduce it as a decal where you want it.
- Genuine seams. If the source texture does not tile, fix the source texture. A shader cannot invent the pixels that would have matched.
- Distance convergence. Once mips flatten the surface to an average colour, macro variation flattens with it. That needs a distance-based blend, which is part four.
Next
Part two is cell bombing — the technique people reach for first and should usually reach for third, because it is genuinely powerful and genuinely expensive. I will show what it costs in real numbers and when that price is worth paying.
A new part when there is something to say
A new part of a series every two or three weeks, when there is something real to say. Never weekly — the two weekly newsletters in this niche both burned out.
Setup: put your beehiiv or Kit form endpoint insrc/consts.ts as NEWSLETTER_ACTION and this becomes a real form. beehiiv is free to 2,500 subscribers with a custom domain included.