Найти в Дзене
Школа

(UV) Развёртка стилизованного персонажа

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

Привет! Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей. Сегодня мы расскажем, что такое развёртка, и научим делать её на примере нашей модели.

Развёртка (UV) — третий этап ААА-пайплайна. На прошлом этапе мы сделали ретопологию, на позапрошлом — скульпт, а сейчас будем разворачивать нашу модель на плоскость для дальнейшего текстурирования.

Пайплайн стилизованных персонажей
Пайплайн стилизованных персонажей

В этой статье будет больше информации про кнопки и особенности стилизованных персонажей, так как про теорию UV мы уже писали здесь.

Что такое развёртка и зачем она нужна

3D-модель сделана из объемных форм. На любой объект в редакторе можно положить материал, выбрать его цвет и настроить блик.

Но положить текстуры на 3D-объекты нельзя до тех пор, пока не сделана развёртка. Программа не умеет накладывать плоскую текстуру на геометрию.

Отсюда возникает отдельный этап пайплайна — UV развёртка.

Развёртка переносит объёмные формы на плоскость для того, чтобы на них можно было положить текстуры. Она всегда создаётся из низкополигональной модели, которую мы сделали на прошлом этапе — ретопологии.

Так выглядит готовая развёртка нашего стилизованного персонажа
Так выглядит готовая развёртка нашего стилизованного персонажа

Инструменты для работы

Нам удобнее работать в Maya, но принцип работы универсален для всех аналогичных программ. Везде есть автомапинг, разрезы и чекер.

Нам понадобится вкладка UV Editor и UV Toolkit.

UV Editor и UV Toolkit в Maya понадобятся для работы с развёрткой
UV Editor и UV Toolkit в Maya понадобятся для работы с развёрткой

Делаем авторазвёртку

Для начала нам нужно сделать авторазвёртку, чтобы наши полигоны появились на рабочем поле. Проще всего это сделать при помощи автоматической развёртки с опцией Camera-Based.

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

Делаем Camera-Based развёртку
Делаем Camera-Based развёртку

Получился такой результат:

Camera-Based развёртка
Camera-Based развёртка

Пока что это совсем не похоже на развёртку, ведь модель всё ещё не разложена на плоскость. Чтобы сделать это, нужно добавить швы — разрезы на UV).

Мы продемонстрируем все этапы развёртки на примере шлема нашего персонажа, а в конце статьи разберём особенности развёртки других элементов.

Добавляем разрезы на UV

Создаются разрезы следующим образом:
Выделяем Edge, открываем UV Toolkit -> Cut and Sew -> Нажимаем Cut.

Кнопка Cut
Кнопка Cut

Есть 3 правила, где нужно делать разрезы (швы).

1. Разрезы делаются по возможности в незаметных местах модели.

2. Везде, где есть Hard Edge — добавляем разрез.

3. На стыке между двумя разными материалами — делаем разрез.

Разберём эти моменты:

1. Швы в незаметных местах

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

Поэтому хорошие трёхмерщики всегда стараются разрезать модель в самых незаметных местах.

Вот пример того, где не надо делать швы:

Не нужно делать швы посередине модели, в самых заметных местах.
Не нужно делать швы посередине модели, в самых заметных местах.

Поскольку мы создаём персонажа для видеоигры, стоит прятать швы в местах, которые игрок не увидит:

Прячем швы на UV
Прячем швы на UV

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

Поэтому этот разрез мы сделали именно снизу, вот здесь:

-9

Почему там? Большую часть времени игрок будет видеть персонажа или спереди, или сзади.

И в этом месте разрез на роге почти не видно:

-10

Именно поэтому шов вот в этом месте — плохая практика:

Повторимся — не следует делать швы в самых заметных местах
Повторимся — не следует делать швы в самых заметных местах

2. Швы в местах, где есть Hard Edge

Везде, где есть хард — добавляем шов.
Так возникнет меньше проблем при запечке.

Добавляем швы на Hard Edge
Добавляем швы на Hard Edge

3 Швы на стыке двух разных материалов

В нашем примере на рогах есть тряпка. В процессе текстурирования мы хотим покрасить её другим материалом.

Разделяем разные материалы швов
Разделяем разные материалы швов

Для этого на стыке разных материалов нужно создать разрез. Теперь в программе для текстурирования можно будет легко сделать отдельную текстуру для этой тряпки.

Раскладываем модель на основе созданных швов

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

Функция Unfold разделит нашу модель на несколько отдельных UV-шеллов
в местах, где мы расставили швы.

Что делает функция Unfold
Что делает функция Unfold

Далее полученные UV-шеллы нужно расположить на расстоянии друг от друга:

Перемещаем UV-шеллы в сторону
Перемещаем UV-шеллы в сторону

Пока что рано думать о том, как уместить всё в первый квадрат. Сейчас нужно добавить чекер и проверить развёртку на потяги — возможно придётся добавить дополнительные разрезы, чтобы их полечить.

Добавляем чекер

Чекер — это текстура с шахматной доской, которая поможет проверить развёртку на ошибки.

Если всё хорошо, то квадраты чекера будут ровного размера.
А если квадраты окажутся вытянуты или изогнуты — значит, при текстурировании то же самое произойдёт с твоей текстурой. Она начнёт некрасиво тянуться. Отсюда и термин — «потяги».

Сейчас мы добавим чекер, увидим, есть ли потяги, а затем будем их исправлять. В большинстве случаев проблема с потягами решается за счёт добавления дополнительных швов на развёртке.

Добавляем чекер, меняем размер его квадратов, чтобы было видно потяги.
Добавляем чекер, меняем размер его квадратов, чтобы было видно потяги.

Но у нас появилась новая проблема — квадраты чекера получились разного размера.

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

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

Квадраты чекера разного размера, это нужно исправить
Квадраты чекера разного размера, это нужно исправить

Делать квадраты разного размера — хорошая практика, но делать это нужно осознанно. Пока что их нужно просто выровнять.

Как сделать квадраты чекера одного размера?

Есть два способа:

1. Автоматический способ

Maya может сделать разрешение текстур равномерным для всей модели. Соответственно, квадраты чекера будут одинаковыми.

Нажимаем Shift и жмём на кнопку Layout. Всплывёт окошко с настройками, выбираем Preserve 3D Ratios, нажимаем Apply.

Автоматически выравниваем размер чекера
Автоматически выравниваем размер чекера

Результат:

Квадраты стали одного размера
Квадраты стали одного размера

2. Альтернативный способ

Мы можем выбрать любой из элементов нашего шлема и воспользоваться функцией Texel Density, — тогда все остальные элементы модели будут иметь чекер такого же размера, как у выбранного объекта.

Для этого:
1. Выбираем элемент с нужным размером квадратов чекера, нажимаем UV Toolkit → Tools → Texel Density →
Get.
2. Выбираем все остальные элементы модели, нажимаем в том же месте кнопку
Set.

Функция Texel Density → Get, затем Texel Density → Set
Функция Texel Density → Get, затем Texel Density → Set

Итак, квадраты теперь одного размера, но в некоторых местах они искажены. Значит, на развёртке есть потяги.

Пример потягов на UV
Пример потягов на UV

Как исправить потяги?

Первым делом нужно слегка повернуть UV-шеллы, чтобы выровнять чекер:

-22

Затем добавляем дополнительные швы, а после этого жмём Unfold. Одного прохода было недостаточно, поэтому мы добавили разрезы в трёх разных местах шлема:

Первый шов
Первый шов
Второй
Второй
Третий
Третий

Теперь после создания дополнительных швов все квадраты ровные, — потягов больше нет! Можно идти дальше.

Развёртка теперь без потягов
Развёртка теперь без потягов

Переходим к следующему шагу: нужно оптимизировать наши UV-шеллы.

Оптимизируем UV шеллы

Сейчас нам нужно сделать ряд действий, которые необходимы того, чтобы при запечке и текстурировании не было проблем.

1. Мапим длинные шеллы в прямую линию

На рогах у нас есть тряпка. Она примерно прямоугольной формы, но программа автоматически развернула её вот так:

Если на ткани будут складки или фактура — текстура исказится и криво ляжет на нашу модель.

Хорошая практика в подобных случаях — мапить подобные шеллы в прямоугольники.

Для этого выбираем крайний вертекс в UV редакторе, зажимаем клавишу B, выбираем соседние элементы и опускаем вниз:

Мапим выбранный шел в прямоугольник
Мапим выбранный шел в прямоугольник

Затем нам нужно выпрямить эти шеллы.
Выбираем их и включаем функцию UV Toolkit → Unfold →
Straighten UVs:

-28

В этом примере мы выделили не весь шел, а его часть, потому что функция Straighten UVs не любит треугольники — они сильно искажаются.

Функция Straighten UVs искажает треугольные шелы.
Функция Straighten UVs искажает треугольные шелы.

Треугольники так мапить нельзя, поэтому мы выпрямляем этот шел по частям, не трогая треугольник.

-30

Проверяем этот кусок на потяги, видим, что квадраты чекера после этой процедуры стали неровными:

-31

Чтобы это исправить, немного смещаем эджи на UV:

-32

Так мапятся все аналогичные элементы нашей модели:

Этот шел ждёт та же участь — будем его выпрямлять
Этот шел ждёт та же участь — будем его выпрямлять

2. Шеллы не должны пересекаться

Вот такого быть не должно:

Шеллы не должны пересекаться
Шеллы не должны пересекаться

Если шеллы пересекаются — появятся артефакты на текстурах.

3. Шеллы должны быть на расстоянии друг от друга

Нельзя мапить объекты на UV вплотную друг к другу. Они должны быть на небольшом расстоянии друг от друга — это называется паддингом.
Подробнее
здесь.

Вот пример:

Добавляем расстояние между UV шеллами (паддинг)
Добавляем расстояние между UV шеллами (паддинг)
Ещё один пример паддинга
Ещё один пример паддинга

4. Кладём шеллы в первый квадрат UV

Есть два вида мапинга: тайловый и уникальный.
Очень подробно мы про оба вида мапинга и особенность первого квадрата мы писали
здесь.

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

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

Выбираем все шеллы, нажимаем UV Toolkit → Arrange and Layout → Layout.

-37

Я, как и многие трёхмерщики, не очень люблю автоматические функции.
Да, программа положила все шеллы внутрь первого квадрата, но в нём слишком много пустого пространства:

Пустое пространство на UV — это плохо
Пустое пространство на UV — это плохо

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

Есть ещё одна автоматическая функция, которая исправляет грехи предыдущей. Находится она в Layout UVs Options. Нажми на скриншот, чтобы увеличить и посмотреть выбранные нами настройки:

Настройки функции
Настройки функции

Но и эта функция тоже не даёт идеального результата, плюс довольно долго грузится:

Результат — между шеллами меньше пустого пространства
Результат — между шеллами меньше пустого пространства

Да, сейчас между шеллами почти нет неиспользованного пространства, зато оно есть сверху. Именно по этой причине пока что есть только один инструмент, позволяющий идеально разложить шеллы внутри первого квадрата — твой мозг. С каждым разом получаться будет всё лучше и лучше.

Не забывай, что сейчас ты видишь только развёртку шлема, а сделать нужно будет развёртку всего стилизованного персонажа. Поэтому уместить в первый квадрат нужно не только шлем, но и все другие элементы.

Делается это по аналогичному принципу:

Чек-лист по развёртке

  1. Включаем Camera-Based авторазвёртку
  2. Делаем разрезы на UV
  3. Добавляем чекер, выравниваем
  4. Убираем потяги
  5. Оптимизируем шеллы
  6. Раскладываем все шеллы внутрь первого квадрата
-41

Развёртка других элементов стилизованного персонажа

1. Все ремешки и тряпки мапим в прямую линию

По такому же принципу, как мы уже показали сегодня.

-42

2. Все шеллы лежат внутри первого квадрата UV

Потому что мы делаем уникальный, а не тайловый мапинг

-43

3. Повторяющиеся элементы сделали оверлапами

Так как эти элементы идентичны, мы мапим их вместе и тем самым экономим место на UV.

-44
-45

Подробнее про оверлапы можно узнать из этого видео:

4. Финальная проверка развёртки

Если включить функцию UV Distortion, то наша развёртка синим цветом выделит самые сжатые полигоны, а красным — все растянутые:

-46

В данном случае нас всё устраивает.
А если развёртка горит, как светофор, — нужно переделывать.

5. Все швы спрятаны

-47

6. Другие полезные функции

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

Сшивание

В случае, если мы сделали лишний разрез, можно сшить выбранные шеллы обратно — выбираем их и нажимаем Sew.

-48

Optimize

Эта функция автоматически оптимизирует выбранные точки на UV.

-49

Flip

Позволяет отразить UV-шелл:

-50

Что делать после развёртки?

После развёртки наступает следующий этап пайплайна — запечка.
На этом этапе мы будем переносить детализацию с хайполи на лоуполи.

Жди продолжения!
Подписывайся на нас, если ты ещё не с нами!
Мы в ВК, Facebook, Instagram и Youtube.

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