Настройка PBR-материалов для движков игр
Сделать хорошую текстуру в Substance Painter — это половина задачи. Вторая половина — правильно собрать из неё материал в движке. Unity и Unreal Engine используют PBR-рендеринг, но реализуют его по-разному. Текстуры, которые великолепно выглядят в Marmoset Toolbag или Substance Painter viewport, после импорта в Unity выглядят иначе. Иногда незначительно, иногда — кардинально.
Проблема почти всегда одна из трёх: неправильный color space, неверная упаковка каналов или рассогласование по настройкам Tone Mapping между DCC-инструментом и движком.
Unity: HDRP vs URP и разница в материалах
В Unity разница между HDRP и URP — не только в качестве рендеринга. У них полностью разные форматы материалов.
Universal Render Pipeline (URP) использует Lit Shader с прямолинейной упаковкой: Albedo, Normal, Metallic (R) + Smoothness (A), AO (G), Emission. Smoothness в URP — это инвертированный Roughness. Если экспортировать Roughness из Substance Painter и подключить в Smoothness канал без инверсии, материал будет зеркальным там, где должен быть матовым.
High Definition Render Pipeline (HDRP) имеет Mask Map с упаковкой: Metallic (R), AO (G), Detail Mask (B), Smoothness (A). Это нестандартная упаковка, которую Substance Painter не создаёт автоматически в базовых шаблонах. Нужно либо использовать HDRP-шаблон в Substance Painter при создании проекта, либо вручную компоновать Mask Map через Photoshop или командную строку magick (ImageMagick). Ошибка при упаковке каналов — один из самых частых багов при переносе ассетов с другого движка.
Color Space — отдельный критичный момент. В Unity Albedo импортируется как sRGB (это правильно — цвет в sRGB), Normal Map — как Linear (обязательно снять флаг sRGB в Import Settings, иначе нормали будут неправильными и поверхность выглядит ровной), Roughness, Metallic, AO — как Linear (они хранят линейные данные, не цвет). Игнорирование этих настроек — источник половины проблем «почему у нас всё выглядит иначе, чем в референсе».
Unreal Engine 5: нюансы материальной системы
В Unreal Material Graph текстуры подключаются к соответствующим входам Principled BSDF-аналога. Но есть несколько нюансов:
Packed ORM текстура. В Unreal Engine стандарт — упаковка AO (R), Roughness (G), Metallic (B) в одну текстуру с флагом Linear Color. Это снижает количество текстурных семплов в шейдере с трёх до одного. Правильный Export Preset для Unreal в Substance Painter — Unreal Engine 4 (Packed), который создаёт эту текстуру автоматически.
Normal Map координаты. Unreal использует DirectX-пространство нормалей: зелёный канал (Y) инвертирован относительно OpenGL. При импорте нормалей из Substance Painter в Unreal Engine нужно либо использовать DirectX флаг при экспорте из Substance, либо включить опцию Flip Green Channel в Import Settings Unreal. Симптом ошибки — неверное направление теней от Normal Map, поверхность выглядит «вывернутой».
Texture Compression. Unreal по умолчанию сжимает текстуры в BC7 (DirectX) или ETC2 (мобайл). Albedo — Default (BC7), Normal Map — Normal Map (BC5) — это формат двухканального сжатия, который сохраняет только X и Y каналы нормали, Z восстанавливается в шейдере. Если поставить Normal Map с форматом Default — сжатие сломает нормали. Metallic, Roughness, AO — Masks (BC4/BC7 без sRGB).
Material Instances — обязательная практика для production. Вместо дублирования Material Graph для каждого варианта материала — один Master Material с параметрами, к которому создаются Material Instances. Это снижает количество уникальных шейдеров (и время компиляции при старте игры), позволяет менять параметры без пересборки шейдера.
Интеграция Substance Painter с движками
Обе платформы поддерживают прямой экспорт из Substance Painter через Export Presets:
-
Unity HDRP— создаёт Mask Map с правильной упаковкой -
Unity URP— создаёт стандартный набор для Lit Shader -
Unreal Engine 4/5— создаёт ORM packed texture
Но presets не всегда учитывают кастомные настройки проекта. На практике используется Export Config с явным указанием channels и их mapping на каналы выходной текстуры. Это JSON-файл, который можно версионировать в git вместе с проектом и использовать во всей команде.
Прямой Live Link между Substance Painter и Unreal Engine через Bridge — удобен в разработке, но в production pipeline импорт через Assets folder с явными Import Settings предпочтительнее: он воспроизводим и не зависит от состояния рабочей станции конкретного художника.
Проверка материала в движке
Финальная проверка собранного материала — не «выглядит красиво». Это технический чеклист:
- Albedo в корректном диапазоне (30–240 в sRGB) — проверить через Color Grading / Histogram в движке
- Normal Map не инвертирована по Z — проверить на тестовой геометрии с боковым светом
- Roughness работает корректно — тест на сфере с HDRI-освещением: зеркало при roughness=0, полностью матовый при roughness=1
- AO не создаёт двойного затенения — убрать все тени из сцены, проверить только AO pass
- Metallic бинарный — нет градиентов там, где их не должно быть
| Масштаб задачи | Ориентировочный срок |
|---|---|
| Настройка материала (1–3 ассета) | 0.5–1 день |
| Перенос набора ассетов из другого движка (до 20 материалов) | 2–4 дня |
| Создание Master Material + набор Instances (10–30 вариантов) | 3–7 дней |
| Аудит и исправление материалов существующего проекта | по согласованию |
Стоимость рассчитывается после анализа: количество материалов, целевой движок, рендер-пайплайн.





