Настройка PBR-материалов для движков игр

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка PBR-материалов для движков игр
Средняя
~2 рабочих дня
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    671
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Настройка 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 дней
Аудит и исправление материалов существующего проекта по согласованию

Стоимость рассчитывается после анализа: количество материалов, целевой движок, рендер-пайплайн.