You packed your sprites into a sheet, and now there are thin lines, flickering edges, or a faint fringe of a neighbouring sprite around your tiles — usually only when the camera moves or zooms. This is texture bleeding, and it's one of the most common (and most fixable) sprite-sheet problems. Here's why it happens and how to stop it.
Why bleeding happens
When the GPU draws a sprite, it uses bilinear filtering to smooth the image at non-integer scales and positions. At the edge of a sprite's rectangle, that filter samples just past the edge — into the pixels of whatever sprite was packed next to it. The result is a 1-pixel bleed of the wrong colour, or a transparent gap showing as a seam.
It's worst when:
- The camera is at a fractional zoom (2.5×, not 2×) or sub-pixel position.
- Sprites are packed edge-to-edge with no gap.
- Mipmaps are on (lower mip levels blend even more neighbouring pixels).
The main fix: edge extrude (bleed)
Extrude means copying each sprite's outer row/column of pixels outward by 1–2 pixels before packing. Now when the filter samples past the edge, it hits a copy of the sprite's own edge colour instead of the neighbour — the seam disappears. This is the correct fix because it keeps sprites tightly packed while giving the filter a safe margin.
Rule of thumb: 1px extrude for sprites drawn at 1× or 2× integer zoom; 2px if your camera does arbitrary/fractional zoom or you use mipmaps.
In the free EazyStudio Texture Packer, set Extrude / bleed to 1 or 2 before you generate. It also adds padding between sprites so their rectangles never touch.
Backup fixes (use together with extrude)
1. Use point filtering for pixel art
If your game is pixel art, switch the atlas to nearest-neighbour / point filtering. It samples one exact pixel, so there's no bleed at all — and it keeps pixels crisp. (In Unity: Filter Mode → Point. In Phaser: pixelArt: true. In PixiJS: SCALE_MODES.NEAREST.)
2. Snap the camera to whole pixels
Fractional camera positions cause sub-pixel sampling. Round the camera's position to integers each frame (or use your engine's pixel-perfect camera option) so sprites land on exact pixel boundaries.
3. Keep power-of-two dimensions
Non-power-of-two atlases can force the GPU to rescale the texture, which introduces its own edge artefacts. Pack to 512 / 1024 / 2048 to avoid it.
4. Turn off mipmaps for 2D sprites
Mipmaps are for 3D textures viewed at distance. For flat 2D sprites they mostly just blend neighbouring pixels — disable them on your atlas unless you specifically need them.
The quick checklist
- ✅ Re-pack with 1–2px extrude + padding
- ✅ Point filtering for pixel art
- ✅ Pixel-snap the camera
- ✅ Power-of-two atlas size
- ✅ Mipmaps off for 2D
Ninety-nine percent of the time, extrude alone fixes it — the rest are belt-and-braces.
Re-pack with extrude, free
Turn on extrude + padding and export a seam-free atlas in your browser.
Open the Texture Packer