Pixel Art Sprite Sheets: Scale, Padding, and Avoiding Bleed
How to export pixel art at 1x, 2x, or custom scale without blur or bleed, and why padding and extrusion matter.
Pixel art looks best when it's displayed at integer scale (1x, 2x, 4x) with no filtering. When you export sprite sheets from pixel art—or from vector that you've rasterized at a target resolution—you need to control scale, padding, and how edges are handled so that neighbouring sprites don't bleed and the final image stays crisp. This guide covers scale choices, padding and extrusion, trim vs grid, and how to match your game engine's settings so pixel art stays sharp in-game.
Scale: 100% vs 200% vs Custom
Exporting at 100% means one pixel in the source is one pixel in the sheet. That keeps the sheet small and leaves scaling to the game engine (e.g. scale 2 in Unity or Godot for a 2x display). Exporting at 200% doubles every dimension: one source pixel becomes a 2×2 block. Some artists prefer to author at 1x and scale in the engine; others author at 2x and export at 100% so the sheet is already "retina." Either way, use a single scale for the whole sheet so all frames are consistent. Avoid non-integer scale (e.g. 150%) for pixel art unless you're deliberately going for a soft look.
Consistency across the sheet is critical: mixing 100% and 200% frames in the same sheet would make some sprites look blurry or inconsistent when the engine scales the whole texture. Decide on a target display scale (1x, 2x, 4x) and stick to it for the entire project so that UI and characters align and the art direction stays coherent. If you need multiple resolutions for different devices, export separate sheets at 1x and 2x (or use a bulk resizer) rather than mixing scales in one sheet.
Scale quick reference
- 100%: 1 source pixel = 1 sheet pixel; scale in engine (e.g. 2×) for display.
- 200%: 1 source pixel = 2×2 block; sheet is already 2x resolution.
- Never use non-integer scale (133%, 150%) for crisp pixel look.
Padding and Extrusion
Padding is empty space between sprites in the sheet. Without it, when the GPU samples at sprite edges (e.g. with linear filtering or sub-pixel positioning), it can sample into the next sprite and you get bleed. One or two pixels of padding is usually enough. Extrusion (repeating edge pixels into the padding) can help with filtering by giving the sampler "more of the same" instead of transparent or garbage. For pixel art with Point filtering, padding alone is often sufficient; extrusion is more useful when you use linear filtering or when the engine doesn't support tight UVs.
When using Point (nearest-neighbour) filtering, the GPU samples exactly one texel per pixel at integer positions, so bleeding is less common—but sub-pixel movement or rotation can still cause sampling at fractional UVs. Padding ensures that even in those cases you don't sample into the next sprite. For tightly packed character frames, 1px padding is a good default; for UI or tiles, 2px can give more headroom. Extrusion is optional and adds a bit of sheet size; enable it if you see visible bleed with linear filtering or when the engine samples at UVs that fall in the padding.
Padding and extrusion in practice
Start with 1px padding and Point filtering in the engine; that's enough for most pixel art. If you switch to linear filtering (e.g. for a zoom effect) and see bleed, add extrusion or increase padding. Export tools often offer "padding" and "extrude" as separate options; try 1px padding first and add extrusion only if needed.
Transparent Trim vs Fixed Grid
If you trim transparent pixels from each sprite, you get a smaller atlas but each frame has a different size and position. That's fine for engines that support arbitrary rects (Unity, Godot, Phaser). For pixel art that must stay on a fixed grid (e.g. tile-based), disable trimming and use a grid layout so every cell is the same size and aligned. That way your engine can compute UVs from cell index alone.
Tile-based games and some legacy engines assume a uniform grid: they compute the source rect as (col * cellWidth, row * cellHeight, cellWidth, cellHeight). Trimming would break that. For character animations and VFX, trimming saves space and allows variable-size frames; the metadata then stores each frame's rect. Choose based on your engine and art style: grid for tiles and uniform frames, trim for characters and effects when the engine supports it.
Engine texture settings
In Unity or Godot, set the texture filter mode to Point (nearest) for pixel art so the GPU doesn't blur between pixels. Disable compression or use a format that doesn't introduce artifacts until you're happy with the look. These settings are per-texture in the importer; set them once per sprite sheet and reuse for all pixel-art assets.
Summary
Use integer scale only, add 1–2px padding (and optionally extrusion), and choose trim vs grid based on whether your engine needs fixed cells. Set the game engine's texture filter to Point for pixel art so the sheet stays crisp. These choices keep pixel art looking sharp and avoid bleed and inconsistency across frames.