Правильно запекла карта нормалей робить 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 кидає промені через неправильну геометрію та отримує чорні плями або інвертовані нормалі в зонах перетину.
Як правильно налаштувати запікання в 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, інформація про цільовий рушій.
Зв'яжіться з нами, щоб обговорити ваш проєкт та отримати консультацію з пайплайну. Замовте оцінку вашого асета за референсами — це займе один день.






