Gamedev
Игорь Дятлов
4389

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

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

В закладки
Аудио

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

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

План статьи

  • Что такое развёртка.
  • Инструменты для работы и авторазвёртка.
  • Как делать разрезы на UV.
  • Работа с чекером и исправление потягов.
  • Оптимизация UV шеллов.
  • Как поместить шеллы в первый квадрат UV.
  • Чек-лист по развёртке.
  • Развёртка других элементов стилизованного персонажа.

Подписывайся на нас, чтобы не пропустить следующий выпуск!

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

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

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

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

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

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

Развёртка всегда создаётся из лоуполи модели, которую мы сделали на прошлом этапе — ретопологии.

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

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

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

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

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

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

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

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

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

После этой функции получился такой результат:

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

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

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

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

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

Кнопка Cut​

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

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

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

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

Давай разберём эти моменты:

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

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

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

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

​Не делай швы посередине модели, в самых заметных местах. На этом скриншоте плохой пример.

Не забывай, мы моделим персонажа для компьютерной игры, поэтому по возможности прячь швы в местах, которые игрок не увидит:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Есть 2 способа:

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

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

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

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

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

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

​Второй
​Третий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот пример:

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

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

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

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

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

Как это сделать?Выбираем все шеллы,Нажимаем UV Toolkit → Arrange and Layout → Layout.

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

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

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

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

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

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

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

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

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

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

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

  • Включаем Camera-Based авторазвётрку
  • Делаем разрезы на UV
  • Добавляем чекер, выравниваем
  • Убираем потяги
  • Оптимизируем шеллы
  • Раскладываем все шеллы внутрь первого квадрата

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сшивание

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

Optimize

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

Flip

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

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

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

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

Материал подготовлен командой XYZ Media.

Наши каналы в Telegram и на YouTube.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Игорь Дятлов", "author_type": "self", "tags": ["\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u0430\u0442","6","5","4","3d","3","2","1"], "comments": 10, "likes": 72, "favorites": 365, "is_advertisement": false, "subsite_label": "gamedev", "id": 92664, "is_wide": false, "is_ugc": true, "date": "Sat, 25 Jan 2020 20:08:23 +0300", "is_special": false }
0
10 комментариев
Популярные
По порядку
Написать комментарий...
0

Спасибо!!! Очень лельная статья! 

Ответить
3

Слишком палевно.

Ответить
1

Очень интересно было бы почитать от Вас о создании PBR материалов. 

Ответить
0

А можно ли сделать развертку если текстура уже есть? Ну не квадрат конечно, а лицо

Ответить
1

Можно. Но придется шеллы подгонять под текстуру. Я думаю это тот еще гемор. И результат будет так себе. По примеру чекера берешь текстуру и выставляешь её на материал и подгоняешь шеллы.

Ответить
0

Спасибо за статью! Можно вопрос задать: когда используется тайловая текстура для большого объекта (больше человека) и сетка объекта на UV развернута по разным квадратам (т.е. за пределами первого), можно ли Normal map запекать на такой развертки или для этого нужно отдельно сделать UV развертку вмещенную в первый квадрат? 

Ответить
0

На сколько я знаю - нельзя. Все развертки должны быть в рамках квадрата (текстурного листа). Потом просто собираете из одиночных разверток большой атлас и сдвигаете UV конкретной модели на место её текстуры в атласе.

Ответить
0

Вы кажется говорите про уникальные текстуры, а я про тайловые. Видел на примерах когда развертку для тайловых текстур делают за пределами первого квадрата и меня интересует запечка Normal map осуществлялась на такой развертке? Как указано в статьях, по пайплайну запечка делается раньше этапа текстурирования. Вот я и думаю для запечки использовали развертку вмещенную в первый квадрат со всеми паддингами и др. фишками, а на этапе текстурирования тайловой текстуры развертку поменяли?    

Ответить
1

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

Ответить
–1

Спасибо!  Стало понятней.

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }