Создание тайловых текстур и атласов графики
Тайловые текстуры и texture atlases — это две разные задачи, которые часто путают. Тайловая текстура бесшовно повторяется на поверхности. Texture atlas упаковывает несколько отдельных изображений в одну текстуру для снижения draw calls. Оба инструмента критичны для производительности, оба требуют специфической работы в Substance Designer или Photoshop, и оба дают предсказуемые артефакты, если сделаны неаккуратно.
Тайловые текстуры: где и почему появляется паттерн
Бесшовность — необходимое, но недостаточное условие хорошей тайловой текстуры. Если текстура тайлится корректно, но имеет выраженный повторяющийся элемент — горизонтальный камень в кирпичной кладке, характерное пятно в бетоне — паттерн повторения будет виден даже на большом расстоянии. Это называется tiling artifact или «стиральная доска».
Решается несколькими способами в зависимости от задачи и платформы:
Stochastic tiling в шейдере — разрушение паттерна на уровне рендеринга. Шейдер делает несколько семплов текстуры с небольшими вариациями UV и смешивает результат. В Unreal Engine 5 это можно сделать через Material Graph с нодами World Aligned Blend. В Unity ShaderGraph — через кастомный HLSL блок или готовый пакет вроде Stochastic Sampling. Работает без увеличения объёма текстур, но даёт лёгкий overhead на шейдер.
Multi-layer approach — поверх тайловой базы накладывается уникальный Overlay слой (большая масштаб, низкая непрозрачность), который разбивает монотонность. Overlay — отдельная текстура, тоже тайловая, но с другим масштабом тайлинга. Комбинация двух тайловых текстур с разными UV scale даёт иллюзию уникальности.
Megasplat / Virtual Texturing для больших terrains — другая история: там каждый тайл получает уникальный набор деталей через Virtual Texture, но требования к GPU и VRAM существенно выше.
Правильная тайловая текстура для PBR-пайплайна — это минимум пять карт: Albedo (без освещения), Normal Map, Roughness, Metallic/AO packed, Height Map. Height Map нужна, если в материале используется Parallax Occlusion Mapping или Tessellation — без неё кирпичная стена при близком рассмотрении выглядит плоской.
Substance Designer как инструмент тайловых материалов
Для серьёзного production тайловые текстуры делаются в Substance Designer, а не в Photoshop. Причина — параметрический граф. Это значит, что результирующая текстура — это не пиксели, а алгоритм. Нужно поменять размер камней в кирпичной кладке? Один параметр в графе. Нужна версия с мокрой поверхностью? Отдельная переменная, включающая Roughness override в нижних зонах.
Граф типичного тайлового материала в Substance Designer:
- Shape генератор (Tile Generator, Splatter, Flood Fill) — базовая форма элементов
- Noise и Warp — разрушение идеальной повторяемости: Perlin noise на edge variation, Directional Warp для органических форм
- Height to Normal — конвертация рельефа в Normal Map через Sobel filter
- Level и Curve — финальная калибровка диапазонов под PBR-значения
Создание Substance Designer графа занимает больше времени, чем ручная рисовка текстуры в Photoshop. Но он окупается при любых изменениях ТЗ и позволяет создавать вариации без переделки с нуля.
Texture Atlas: упаковка и нарезка
Texture atlas снижает количество draw calls — вместо десяти материалов на десять мелких объектов используется один материал с одной текстурой, в которой все десять упакованы. В Unity это напрямую влияет на batching: Static Batching работает только с объектами, у которых общий материал и текстура.
Оптимальная упаковка атласа — не просто «затолкать всё в 2K». Важен texel density: мелкий пропс на атласе 256x256 при общей текстуре 2048x2048 получит в 8 раз хуже разрешение, чем если бы был на индивидуальной 256x256 текстуре. Поэтому ассеты в атлас подбираются по размеру и важности: hero-пропсы — больше площадь на атласе, фоновый мусор — меньше.
Инструменты для упаковки: TexturePacker (кросс-платформенный, хорошо интегрируется в CI/CD), Unity Sprite Atlas для 2D, Unreal нативный Texture Atlas Generator для Landscape, ручная упаковка через скрипты на Python/PIL для нестандартных пайплайнов.
Отдельная задача — атласы для Sprite/UI в 2D-проектах. Здесь правила упаковки строже: padding между спрайтами минимум 2–4 пикселя для предотвращения bleeding при фильтрации, атлас кратен степени двойки (512, 1024, 2048), PowerOfTwo обязателен для корректной мипмаппинга.
Типичные ошибки при создании тайловых текстур и атласов
Normal Map baked with wrong settings. Если Normal Map запечена из High-poly с неправильным Tangent Basis, она будет работать в Substance Painter, но сломается в Unity или Unreal из-за разного соглашения об оси Y (DirectX vs OpenGL). Simptom — темные полосы по швам. Решается через явное указание Tangent Space при экспорте из Substance Painter: DirectX для Unreal, OpenGL для Unity.
Тайловая текстура с информацией об освещении. Запечённые тени или ambient occlusion в Albedo тайловой текстуры — фатальная ошибка. При смене времени суток или направления света AO в текстуре будет конфликтовать с динамическим освещением.
Переполненный атлас без mip-map учёта. Текстура 4096x4096 с сотней мелких спрайтов даёт красивый атлас, но на мобильных устройствах после генерации mip-map мелкие спрайты превращаются в цветные пятна уже на mip level 3–4. Необходимо проверять атлас на финальных mip-уровнях перед сдачей.
| Масштаб задачи | Ориентировочный срок |
|---|---|
| Одна тайловая текстура (Substance Designer граф) | 2–4 дня |
| Набор тайловых текстур для биома (5–10 материалов) | 1,5–3 недели |
| Texture atlas для набора пропсов (до 30 объектов) | 3–5 дней |
| Texture atlas для 2D-проекта (UI + спрайты) | 1–2 недели |
Стоимость определяется после анализа ТЗ: разрешение текстур, количество вариаций, целевая платформа и движок.





