XYZ Media

UV Развёртка: ААА-Пайплайн 4/7. Самый полный гайд.

Научись полному циклу разработки 3D-модели для игр
Это четвертая статья из цикла про ААА-пайплайн. Вот ссылки на все пять, выбирай ту, которая тебе нужна:

1. ААА-пайплайн
2. Драфт
3. Сетка
4. Развертка
5. Запечка

Эта статья поможет новичкам научиться делать развертку так, чтобы на этапе запечки не возникало неожиданных проблем. Ты узнаешь, что такое UV маппинг (развертка), зачем он нужен и из каких этапов состоит. Внимательное изучение статьи займет около 20 минут. Если возникнут вопросы — пиши в чат-бот (кнопка справа внизу). Там на связи живой менеджер :) Он поможет разобраться. Ну что, давай начнем!


Что такое развертка

В редакторе на модель можно наложить материал, выбрать его цвет и настроить блик. Но положить текстуры на 3D-объекты нельзя. Программа просто не знает как накладывать плоскую текстуру на геометрию. Для этого нам нужна 2D-развертка объемной модели.

Развертка похожа на инверсное оригами. В оригами ты делаешь из плоского листа бумаги 3D-объект, а в развертке наоборот — из объемного делаешь плоское.
Слева модель куба, справа — его развёртка по умолчанию:
В любом 3D-редакторе есть инструментарий для работы с UV. Например, функционала Maya хватит, чтобы сделать развёртку даже самой сложной модели. Но для удобства и редких фишек (таких как отрисовка паддинга) иногда используют программы для работы только с UV. Самые популярные — UV Layout и Rizom UV

Для маппинга сложных форм мы пользуемся функцией авторазвертки.


Из чего состоит развертка

Внизу на картинке у куба 8 точек и 6 квадратных полигонов. На развертке тоже 6 квадратов, но точек больше 8, как на 3D-модели.
Смотри, на кубе 8 точек, а на развёртке целых 14:
Если ты выделишь на модели куба одну точку, то увидишь, что на развёртке выделится сразу несколько точек.
Одна точка имеет несколько точек на UV
Развертка нужна, чтобы наложить на нее текстуры. Давай для примера возьмём кузов от грузовика, сделаем на нем авторазвертку и наложим текстуру дерева.
Слева модель кузова грузовика, справа развертка модели
А теперь выделим на модели одну из дощечек и перенесем на UV вправо.
Если изменить положение UV объекта — измениться и положение текстуры.
Доска осталась на месте, а вот положение текстуры изменилось, потому что мы начали двигать ее развертку
Все объекты на UV называются — UV шеллы (UV shell). Если повернуть шел — повернется и текстура на геометрии:

Изменили размер UV шелла, изменилась и текстура на объекте

Если изменить размер на UV, измениться размер текстуры на модели:
Откроем Substance Painter и загрузим в него грузовик с разверткой. Если с разверткой все нормально, то никаких проблем не будет.

Правильная развертка

Но иногда встречаются странные вещи:

Проблемы из-за неправильной развертки

Во втором видео мы подпортили UV развертку, чтобы была видна разница между правильной и неправильной разверткой. Плохие текстуры портят даже идеально собранные модели. Если увидишь такие же проблемы, когда будешь текстурить — что-то не так в UV развертке. Давай разберемся откуда берутся такие глюки с текстурой и как их исправить.

Есть 2 вида развертки на UV:

1) Сделать уникальный маппинг;
2) Сделать тайловый маппинг.

В UV пространстве бесконечное количество квадратов, которые повторяют текстуру первого квадрата. То есть, всю развертку нужно уместить в один квадрат.
Помещаем маппинг в один квадрат
На квадрат с разверткой накладывается текстура, а остальные просто ее повторяют.
Самый важный квадрат на UV находится в промежутке от «0» до «1»:
Это и есть уникальный маппинг. Его используют в твердотельном моделировании (Hard Surface) или для создания персонажей. А для объектов окружения, ландшафтов и зданий в основном используют тайловый мапинг.


Уникальный маппинг

Один материал имеет только одну текстуру. Эта текстура растягивается на первый квадрат UV. В этом случае, чтобы замапить грузовик нам нужна текстура с деревом и с крашенным металлом.
Наша модель грузовика с готовыми текстурами
Если мы сделаем один материал под дерево, а другой под металл — дополнительно загрузим движок. Наша задача при маппинге использовать минимальное количество ресурсов. Поэтому, вместо того, чтобы плодить кучу лишних материалов, мы делаем всего один материал. Сначала разворачиваем все объекты на UV, потом кидаем в фотошоп или Substance Painter и красим эти элементы по отдельности.
В программе одна текстура, которая красит весь грузовик
Мы замапили все объекты на UV только в первый квадрат. На выходе получилась одна единственная текстура и один материал, а мы тем самым сэкономили ресурсы игрового движка. Маппинг техники и персонажей имеет некоторые отличия. Если хочешь больше узнать о том, как делать развертку именно для 3D-персонажей присмотрись к курсу STYL.


Уникальный маппинг

Как мы уже говорили — квадраты на UV бесконечны. Текстура, которую мы положим в первый квадрат может повторяться бесконечное количество раз. Такое повторение текстур называется — тайл.

Тайловый маппинг используется для развёртки зданий, предметов окружения и ландшафтов.

Если мы хотим сделать развертку этого дома — сначала нужно создать материалы с бесшовными текстурами, а потом наложить геометрию с помощью авторазвертки (box mapping).
Так делаем для каждого из объектов: для стены дома — материал с кирпичной кладкой, а для прилавка — другой материал с текстурой дерева. И так далее.
Материалы для покраски дома
В отличие от уникального маппинга, в тайловом UV шеллы могут выходить за пределы квадратов. Зачем это нужно? Представь что нам нужно затекстурить кирпичную стену. Если развёртка стен будет в первом квадрате — кирпичи будут слишком крупными. Потому, мы выбираем тайловый подход, чтобы можно было контролировать текстуры так, как нам нужно.

Вот так выглядит наш дом после развертки и текстур.
Вот ссылки на сайты, где ты сможешь найти много тайловых текстур:
textures.com
texturehaven.com
poliigon.com
quixel.com/megascans/library

Пример тайловой текстуры без швов
Тайловые текстуры не имеют швов, но когда работаешь с ними нужно учитывать нюансы. Например, в нашей сцене несколько разных фруктов.
Сцена с фруктами
Каждый материал — это отдельный вызов отрисовки в игровом движке. Чтобы не создавать под каждый из фруктов отдельный материал мы рисуем одну текстуру и маппим на нее все фрукты.
Все фрукты на одной текстуре
Получаем в одной текстуре сразу несколько покрашенных объектов — это называется атлас. Атласы часто используют в играх, чтобы экономить затраты движка на прорисовку текстур.

Лучше всего работать с квадратными текстурами. Потому, если текстура прямоугольная — она растянется до квадрата.
В программе текстура растянулась из прямоугольника в квадрат
Из-за особенностей цифровых вычислений, разрешение текстур всегда стараются делать кратными степени двойки. Сторона текстуры может быть 32 пикселя в ширину или 64, 128, 256, 512, 1024, 2048 и даже 4096 пикселей.

Текстуры кратные степени двойки заполняют целые ячейки видеопамяти. Если вместо текстуры 1024х1024 засунуть в движок текстуру размером 1000х1000 — она не заполнит всю ячейку видеопамяти и ее обработка потребует больше ресурсов от видеокарты. Из-за такой мелочи игра потеряет в производительности. Больше о текстурировании 3D-моделей ты можешь узнать на курсе Текстурирование 3D-моделей.

Теперь, когда разобрались как взаимодействуют текстуры с разверткой, давай дальше разбираться с UV.


Как правильно работать с UV

Есть 4 приема для работы с UV, которые сэкономят пространство и упростят процесс текстурирования:

  1. Оверлапы
  2. Тайлы
  3. Тримы
  4. Атлас

  1. Как оверлапы экономят пространство на UV

Если на твоей модели есть одинаковые элементы — на UV их можно наложить один на другой и сэкономить место. Например, тебе не нужно мапить каждый отдельный болт на обшивке, просто создай мап первого болта и наложи поверх него все остальные копии.

Пример как работать с оверлапами

Можно также оверлапить и симметричные объекты

Как оверлапить симметричные объекты

Дальше нас ждут тайлы, тримы и атласы. Чаще всего их используют для объектов окружения, зданий и ландшафтов. Но, например, тайлы бывают полезны и для hard surface моделей, и персонажей. Давай узнаем, что это такое.


Как тайлы, тримы и атласы экономят пространство?

Тримы — это те же тайлы (квадраты на маппинге), но повторяются они не во все стороны, а только по одной оси. С атласом тримов мы можем размаппить лестницу любого размера и на ней никогда не будет швов.

На текстурах лестницы нет швов

Благодаря атласам мы можем наложить одну текстуру сразу в нескольких разных местах.

Пример как работают атласы и тайлы

💥 Курс «Draft Punk» для тебя, если хочешь делать такие же 3D-модели
Узнаешь, как устроен пайплайн разработки 3D-моделей в больших игровых студиях. Научишься создавать выразительные драфты, разберёшься с топологией, high poly, low poly, развёрткой и запечкой. А в конце создашь полноценную 3D-модель по всем правилам пайплайна. Курс можно взять в рассрочку.
Как проверить развертку на ошибки

Когда делаешь развертку, могут появиться косяки, как с нашим грузовиком. Но во всех программах есть «чекер». Это текстура с шахматной доской, которую используют для проверки развертки. Он выглядит вот так:

Квадраты без потягов и одного размера, значит ошибок на UV нет

Если квадраты на чекере неодинакового размера — при текстурировании возникнут проблемы. Для таких случаев есть Unfold — функция, которая исправляет ошибки на UV. Если заметил неровности — жми на кнопку и программа все исправит.

Как работает функция Unfold

Но сложные модели нужно будет маппить самому. Взять лоуполи, сделать авторазвертку, а потом нажать Unfold — это далеко не все. Тебе нужно выбрать способ маппинга модели, правильно развернуть элементы, сделать оверлапы, уместить шеллы внутри первого квадрата и еще много всего.


Чек лист по UV маппингу:

  • Развернуть все элементы на UV
  • Исправить косяки авторазвертки через Unfold
  • Исправить косяки после Unfold
  • Сделать чекер везде ровным, без потягов
  • Разложить все элементы в пространстве от 0 до 1


Что делать, если появились проблемы с разверткой

1. Потяги на UV — чекер не квадратный
Чекер не квадратный
Если видишь нечто подобное — исправляй через Unfold. Если он не поможет — исправляй руками.

2. Квадраты чекера разного размера
Квадраты разного размера
Чтобы понять почему квадраты меняют размер, нужно знать, что такое тексель.

Тексель — это количество пикселей на метр, сантиметр, или дюйм. Он показывает, насколько детальной будет текстура. В шутерах тексель высокий, потому что игроки сильно приближаются к объектам. В играх от 3 лица тексель ниже, а в стратегиях минимальный. Чтобы не перегружать движок важно, чтобы объекты переднего плана имели высокий тексель, а среднего и дальнего плана — низкий.
Примерные цифры разных проектов
Если мы правильно сделали развертку, квадраты чекера будут одного размера.
Если сделать один из шеллов меньше — квадраты чекера увеличатся, а тексель уменьшится.

Как изменится тексель, если менять размер шеллов

Это может стать бедой для модели, а может быть и лайфхаком. Если моделишь грузовик, хорошая практика — на днище сделать тексель меньше, потому что игроки вряд ли его увидят в игре. А ты сэкономишь место на UV для чего-нибудь более важного.

3. Слишком много свободного места на UV пространстве
Слишком много свободного пространства на UV
Нужно увеличить размер шеллов и перепаковать, чтобы они полностью заняли первый квадрат. Тогда тексель будет выше, а текстура детализированнее.


4. Объекты на UV пересекаются

UV шеллы пересекаются

Если шеллы пересекутся — на модели появятся артефакты. Исключение из этого правила — оверлапы. В них мы осознанно накладываем шеллы друг на друга.


5. Кривые оверлапы
Если объекты не идеально лежат друг на друге, появляются швы на текстурах


Порядок работы с UV

Давай подытожим, в каком порядке нужно делать развертку:

  1. Взять лоуполи модель;
  2. Сделать авторазвертку;
  3. Отрезать все острые углы и углы под 90 градусов (это нужно для адекватной запечки нормала);
  4. Проверить чекер на потяги и исправить;
  5. Уменьшить части, которые не видно у модели. Нет смысла делать высокое разрешение текстур на днище у автомобиля, которое никто не видит;
  6. Выровнять кривые полигоны;
  7. Разложить UV в квадрате 0-1 и сделать отступ в несколько пикселей;
  8. Увеличить развертку, если остается много пустого места на UV и тогда повторить пункт 7. Если на UV мало свободного места, то промасштабировать в минус самые больше шеллы и разложить UV как можно плотнее.
  9. Сделать оверлапы;
  10. Отодвинуть оверлапы на 1 квадрат в сторону. Это нужно для запечки финальной сдачи модели в игру;


Советы по правильной работе с UV

1. Обрезай сложные формы

Большие стенки нужно обрезать, иначе могут появиться потяги на UV. В таких местах чекер неровный. Разберём этот момент на примере нашей модели. Если сделать авторазвёртку этой детали — увидим потяги:
Для таких ситуаций в UV редакторе есть функция Cut. С ее помощью мы делаем разрезы на больших деталях:
На торцах остались артефакты, отрезай их в отдельные шеллы:
Мы избавились от потягов, сделав всего 3 разреза. Но делать много разрезов не нужно, иначе на модели будет много швов:
2. Добавляй отступы на местах швов

В игровых движках текстуры теряют разрешение на расстоянии. Чем дальше объект от камеры, тем ниже разрешение текстур. Это называется MIP Map.
Текстуры теряют разрешение на расстоянии
Нельзя мапить объекты на UV вплотную друг к другу. Иначе при отдалении камеры, соседние объекты будут брать информацию друг от друга. Всегда нужно оставлять небольшой отступ между UV шеллами. Этот отступ называют паддингом (padding).
Паддинг
3. Отрезай все острые углы и углы под 90 градусов

Это нужно для запечки нормала. В 90% случаев для моделей нужен Normal Map. Когда печешь нормал — на месте харда (жесткий угол модели) должен быть обязательный разрез на развертке, иначе нормал запечется со швом.

В этом видео пример как работать с хардами:
А вот что будет, если ты неправильно работаешь с хардами:
Таких швов на бочке не должно быть
4. Как разворачивать цилиндры

Авторазвертка добавляет кучу лишних шеллов, потому лучше размапить их в прямую линию.
Цилиндры мапим в прямую линию, потому что их удобно паковать вместе
5. Неровную линию нужно мапить как прямую на UV

Если линия неровная — она занимает много места на UV, поэтому лучше размапить её как прямую — прямоугольники легче паковать. Небольшие неровные линии отлично мапятся в прямые.

Про UV закончили, что дальше

Если хочешь освоить весь пайплайн и научиться моделить в 3D, присмотрись к нашему курсу Draft Punk. Ты поймешь, как устроен пайплайн разработки 3D-моделей в больших игровых студиях. Научишься создавать выразительные драфты. Разберешься с топологией, high poly, low poly, разверткой и запечкой. А в конце создашь полноценную 3D-модель по всем правилам пайплайна. Полученных знаний хватит, чтобы работать на фрилансе или джуном в студии.

Вот что получилось у наших студентов после курса Draft Punk:

Если тебе интересны другие этапы пайплайна — переходи к следующей статье. 1 статья = 1 этап пайплайна, с уроками и примерами. Выбирай тему, с которой хочешь разобраться:

1. ААА-пайплайн
2. Драфт
3. Сетка
4. Развертка
5. Запечка
ВСЕ ПРОЧИТАЛ? ПЕРЕХОДИ К ПРАКТИКЕ!
Освой пайплайн и научись создавать 3D-модели на курсе Draft Punk
СМОТРЕТЬ ПРОГРАММУ
Draft Punk.
3D-моделирование объектов
Пройди курс по 3D-моделированию и научись создавать модели для игр. Уроки проходят в онлайн-формате — сможешь вернуться к лекциям в любой момент и освежить свои знания.
Работа Юрия Порубова
Курс
Понравилась статья?
ХОЧЕШЬ ПОЛУЧАТЬ ЛУЧШИЕ СТАТЬИ
ОТ XYZ РАЗ В НЕДЕЛЮ?
Подпишись на рассылку XYZ
Нажимая на кнопку, вы соглашаетесь с условиями обработки данных