Правильно запеченная карта нормалей делает low-poly модель с 3000 полигонов неотличимой от миллионного high-poly оригинала. Плохая нормал-карта — это тёмные полосы на гранях, швы на UV-границах и «плоские» поверхности под боковым светом. Технически Normal map запекается за минуты. Запекается правильно — это уже вопрос знания конкретных настроек, понимания tangent space и умения предвидеть артефакты до их появления. Мы занимаемся геймдев-пайплайном более 5 лет, запекали ассеты для 15+ игр, включая мобильные и PC проекты. Наша экспертиза позволяет гарантировать чистый результат, который пройдёт QA в любом движке.
Почему возникают артефакты на нормал-картах?
Tangent space mismatch — запекание карт нормалей
Это, пожалуй, самая неочевидная причина «правильной» нормал-карты, которая выглядит неправильно в движке. Marmoset Toolbag, xNormal, Substance Painter и каждый движок используют свои конвенции tangent space. Unity (Standard и URP/HDRP) — MikkTSpace. Unreal Engine — тоже MikkTSpace, но с особенностями обработки hard edges в UE4 vs UE5. Godot — MikkTSpace. Если карта запечена в одном tangent space и импортирована в движок с другим, получим некорректное освещение: вместо рельефа — странные блики не в тех местах.
Решение: в Marmoset Toolbag 4 выставляем Tangent Space → MikkTSpace. В Substance Painter это настройка при импорте меша (Compute Tangent Space Per Fragment). Проверяем результат в самом движке, не только в preview инструмента.
Hard edge + UV seam несовпадение
Стандартная геометрия hard-surface имеет hard edges (smoothing group breaks) на конструктивных рёбрах. Если UV seam не совпадает с этими рёбрами, baker будет интерполировать нормали через seam — результат: тёмная или светлая полоса вдоль ребра. Правило одно: каждый hard edge должен быть UV seam, каждый UV seam на hard-surface — hard edge. Это не рекомендация, это обязательное условие.
В Blender это делается через Edge → Mark Sharp + Mark Seam на одних и тех же рёбрах. В Maya — через Mesh Display → Soften/Harden Edge и UV Seam на совпадающих рёбрах. В 3ds Max — Smoothing Groups + UV seam по той же логике.
Cage и projection misses
Для сложной геометрии с вогнутыми формами, флоатинг деталями или с большим расхождением между HP и LP в Marmoset Toolbag необходимо работать с Bake Groups. Каждая флоатинг деталь — отдельная группа с индивидуальным cage offset. Без этого baker cast лучи через неправильную геометрию и получает чёрные пятна или инвертированные нормали в зонах пересечения.
Как правильно настроить запекание в Marmoset Toolbag 4?
Marmoset Toolbag 4 — основной инструмент для production bake. Настройки для финального запекания:
- Samples: 512 для 4096 карт, 256 для 2048. Ниже — noise на сложных переходах.
- Dilation: 32px для 4096, 16px для 2048. Критично для mip-map bleeding.
- Tangent Space: MikkTSpace (для большинства движков).
- Max Frontal / Rear Distance: индивидуально под каждый ассет. Слишком большой rear distance — baker захватывает geometry с обратной стороны. Слишком маленький — misses на деталях с большим offset от LP.
Для флоатинг geometry: отдельный Bake Group для каждой группы флоатинга. Max Frontal Distance = чуть больше расстояния от LP поверхности до дальней точки флоатинг объекта. Rear Distance = минимальный.
В xNormal используем тот же подход, но через .hnmap файл настроек cage для каждого ассета. xNormal быстрее на больших сценах и полезен для batch bake когда нужно запечь 50+ объектов одновременно.
Сравнение инструментов запекания:
| Инструмент | Скорость | Tangent Space | Особенности |
|---|---|---|---|
| Marmoset Toolbag 4 | Высокая | MikkTSpace | Лучший preview, поддержка cages |
| xNormal | Очень высокая | Standard (настраиваемый) | Лучший batch bake, открытый исходный код |
| Substance Painter | Средняя | Per Fragment | Интеграция с текстурированием |
Как проверить нормал-карту перед передачей?
Запечённую карту обязательно проверяем в движке — не только в Marmoset. Причина: preview в Toolbag использует собственный PBR рендер, который может маскировать проблемы, незаметные при стандартном освещении в движке.
Пример артефакта: полоса на hard edge
Если hard edge и UV seam не совпадают, на ребре появляется тёмная или светлая полоса. Это проверяется при grazing angle освещении в движке.Чеклист проверки:
- Освещение с трёх сторон: ключевой, боковой, backlight
- Extreme angles: камера почти параллельно поверхности (grazing angle)
- Проверка граней: нет ли тёмных полос вдоль hard edges
- Проверка seam-ов: нет ли видимых швов по UV boundary
Если карта прошла проверку в движке — она готова. Гарантируем, что при соблюдении этих шагов вы получите чистую нормал-карту без артефактов.
Что входит в работу
- Консультация по подготовке high-poly и low-poly геометрии
- Настройка bake-проекта в Marmoset Toolbag 4 / xNormal в зависимости от задачи
- Запекание всех необходимых карт: Normal, Ambient Occlusion, Cavity, Curvature, Thickness, World Space Normal
- QA в целевом движке (Unity, Unreal, Godot)
- Передача исходников (.fbx, .tga, project files)
- Корректировка UV при необходимости
Ориентиры по срокам
| Ассет | Карты | Сроки |
|---|---|---|
| Простой проп (оружие, инструмент) | Normal + AO | 2–6 часов |
| Среднесложный объект (техника, детали) | Full PBR | 4–10 часов |
| Персонаж (один UV tile) | Full PBR | 1–3 дня |
| Сложный ассет с флоатингом | Full PBR | 2–4 дня |
| UDIM персонаж (4–6 тайлов) | Full PBR per tile | 3–6 дней |
Стоимость рассчитывается индивидуально. На входе нужны: high-poly (FBX/OBJ), low-poly с готовым UV, информация о целевом движке.
Свяжитесь с нами, чтобы обсудить ваш проект и получить консультацию по пайплайну. Закажите оценку вашего ассета по референсам — это займёт один день.






