Tileable Textures and Texture Atlas Creation
Tileable textures and texture atlases are two different tasks often confused. A tileable texture repeats seamlessly on a surface. A texture atlas packs multiple separate images into one texture to reduce draw calls. Both tools are critical for performance, both require specific work in Substance Designer or Photoshop, and both produce predictable artifacts if done carelessly.
Tileable Textures: Where and Why the Pattern Appears
Seamlessness is a necessary but insufficient condition for a good tileable texture. If a texture tiles correctly but has a pronounced repeating element — a horizontal brick in brickwork, a characteristic spot in concrete — the repetition pattern will be visible even at a great distance. This is called a tiling artifact or "washboard."
It's solved in several ways depending on the task and platform:
Stochastic tiling in the shader — pattern disruption at render level. The shader takes multiple texture samples with slight UV variations and blends the result. In Unreal Engine 5 this can be done via Material Graph with World Aligned Blend nodes. In Unity ShaderGraph — via a custom HLSL block or a ready package like Stochastic Sampling. Works without increasing texture volume, but gives slight shader overhead.
Multi-layer approach — a unique Overlay layer is applied over the tileable base (large scale, low opacity), which breaks monotony. The Overlay is a separate texture, also tileable, but with a different tiling scale. The combination of two tileable textures with different UV scales creates an illusion of uniqueness.
Megasplat / Virtual Texturing for large terrains — different story: each tile gets a unique set of details via Virtual Texture, but GPU and VRAM requirements are significantly higher.
A correct tileable texture for a PBR pipeline is a minimum of five maps: Albedo (without lighting), Normal Map, Roughness, Metallic/AO packed, Height Map. A Height Map is needed if Parallax Occlusion Mapping or Tessellation is used in the material — without it a brick wall at close range looks flat.
Substance Designer as a Tool for Tileable Materials
For serious production, tileable textures are made in Substance Designer, not Photoshop. The reason is the parametric graph. This means the resulting texture is not pixels, but an algorithm. Need to change the size of stones in brickwork? One parameter in the graph. Need a wet surface version? A separate variable that enables a Roughness override in lower zones.
A typical tileable material graph in Substance Designer:
- Shape generator (Tile Generator, Splatter, Flood Fill) — base shape of elements
- Noise and Warp — destruction of perfect repetitiveness: Perlin noise on edge variation, Directional Warp for organic forms
- Height to Normal — conversion of relief to Normal Map via Sobel filter
- Level and Curve — final calibration of ranges for PBR values
Creating a Substance Designer graph takes more time than manually painting a texture in Photoshop. But it pays off with any specification changes and allows creating variations without starting from scratch.
Texture Atlas: Packing and Slicing
A texture atlas reduces draw calls — instead of ten materials for ten small objects, one material is used with one texture where all ten are packed. In Unity this directly affects batching: Static Batching works only with objects sharing the same material and texture.
Optimal atlas packing is not just "cram everything into 2K." Texel density matters: a small prop on a 256x256 atlas within a total 2048x2048 texture gets 8 times worse resolution than if it were on an individual 256x256 texture. Therefore, assets in the atlas are selected by size and importance: hero props — larger area on the atlas, background clutter — smaller.
Tools for packing: TexturePacker (cross-platform, integrates well into CI/CD), Unity Sprite Atlas for 2D, Unreal's native Texture Atlas Generator for Landscape, manual packing via Python/PIL scripts for non-standard pipelines.
A separate task is atlases for Sprite/UI in 2D projects. Here packing rules are stricter: padding between sprites minimum 2–4 pixels to prevent bleeding during filtering, atlas is a power of two (512, 1024, 2048), PowerOfTwo is mandatory for correct mipmapping.
Typical Mistakes in Creating Tileable Textures and Atlases
Normal Map baked with wrong settings. If Normal Map is baked from High-poly with incorrect Tangent Basis, it will work in Substance Painter but break in Unity or Unreal due to different Y-axis convention (DirectX vs OpenGL). Symptom — dark stripes along seams. Solved via explicit Tangent Space specification during export from Substance Painter: DirectX for Unreal, OpenGL for Unity.
Tileable texture with lighting information. Baked shadows or ambient occlusion in Albedo of a tileable texture is a fatal mistake. When time of day changes or light direction changes, AO in the texture will conflict with dynamic lighting.
Overcrowded atlas without mip-map consideration. A 4096x4096 texture with a hundred small sprites makes a beautiful atlas, but on mobile devices after mip-map generation small sprites turn into colored spots already at mip level 3–4. It's necessary to check the atlas on final mip levels before submission.
| Task Scale | Estimated Timeline |
|---|---|
| One tileable texture (Substance Designer graph) | 2–4 days |
| Set of tileable textures for a biome (5–10 materials) | 1.5–3 weeks |
| Texture atlas for a set of props (up to 30 objects) | 3–5 days |
| Texture atlas for 2D project (UI + sprites) | 1–2 weeks |
Cost is determined after analyzing the specification: texture resolution, number of variations, target platform and engine.





