Настройка 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). Помилка при упаковці каналів — один з найбільш частих багів при переносі assets з іншого движка.
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 assets) | 0.5–1 день |
| Перенос набору assets з іншого движка (до 20 матеріалів) | 2–4 дні |
| Створення Master Material + набір Instances (10–30 варіантів) | 3–7 днів |
| Аудит та виправлення матеріалів існуючого проекту | за угодою |
Вартість розраховується після аналізу: кількість матеріалів, цільовий движок, рендер-пайплайн.





