Создание предмета с нуля — различия между версиями

Материал из xrWiki
Перейти к: навигация, поиск
Строка 15: Строка 15:
 
Стандартная банка сгущёнки имеет диаметр 73мм (75мм по буртику) и высоту 80мм.  
 
Стандартная банка сгущёнки имеет диаметр 73мм (75мм по буртику) и высоту 80мм.  
  
Заходим в настройки сцены Windows -> Settings/Preferences -> Preferences, по вкладке Settings переключаем Working Units в миллиметры, сохраняем.
+
Заходим в настройки сцены '''Windows -> Settings/Preferences -> Preferences''', по вкладке '''Settings''' переключаем '''Working Units''' в миллиметры, сохраняем.
  
 
=== Высокополигональная (high-poly) модель ===
 
=== Высокополигональная (high-poly) модель ===
Строка 24: Строка 24:
 
Это базовая заготовка. Подобный метод создания модели так и называется - моделинг от примитива.
 
Это базовая заготовка. Подобный метод создания модели так и называется - моделинг от примитива.
  
Далее создаём два буртика, расположенных на равных расстояниях друг от друга. Для этого открываем свойства инструмента Mesh Tools -> Insert Edge Loop, включаем режим Multiple edge loops, и задаём количество лупов: 2.  
+
Далее создаём два буртика, расположенных на равных расстояниях друг от друга. Для этого открываем свойства инструмента '''Mesh Tools -> Insert Edge Loop''', включаем режим '''Multiple edge loops''', и задаём количество лупов: '''2'''.  
  
 
[[Файл:first-item-02.PNG|480px]]
 
[[Файл:first-item-02.PNG|480px]]
  
Кликаем по любому вертикальному ребру цилиндра, получаем две петли. Переключившись на инструмент маштабирования клавишей R, смещаем лупы вертикально.
+
Кликаем по любому вертикальному ребру цилиндра, получаем две петли. Переключившись на инструмент маштабирования клавишей '''R''', смещаем лупы вертикально.
  
 
[[Файл:first-item-03.PNG|480px]]
 
[[Файл:first-item-03.PNG|480px]]
  
Далее нужно выделить полигоны будущих буртиков и выдавить их наружу. Для этого нажатием клавиши Пробел переключаемся на вид сбоку, выделяем нужные полигоны, и применяем к ним операцию Edit Mesh -> Extrude, и доводим буртики манипуляторами инструмента масштабирования до нужного вида:
+
Далее нужно выделить полигоны будущих буртиков и выдавить их наружу. Для этого нажатием клавиши '''Пробел''' переключаемся на вид сбоку, выделяем нужные полигоны, и применяем к ним операцию '''Edit Mesh -> Extrude''', и доводим буртики манипуляторами инструмента масштабирования до нужного вида:
  
 
[[Файл:first-item-04.PNG|640px]]
 
[[Файл:first-item-04.PNG|640px]]
Строка 40: Строка 40:
 
[[Файл:first-item-05.PNG|640px]]
 
[[Файл:first-item-05.PNG|640px]]
  
Некоторые лупы после выдавливания получились мягкими, хотя углы между полигонами в районе 90 градусов. Нужно сразу исправить их, выделив двойным щелчком ЛКМ и применив операцию Shift+RMB -> Soften/Harden Edges -> Harden Edge.
+
Некоторые лупы после выдавливания получились мягкими, хотя углы между полигонами в районе 90 градусов. Нужно сразу исправить их, выделив двойным щелчком '''LMB''' и применив операцию '''Shift+RMB -> Soften/Harden Edges -> Harden Edge'''.
  
 
[[Файл:first-item-06.PNG|480px]]
 
[[Файл:first-item-06.PNG|480px]]
Строка 48: Строка 48:
 
[[Файл:first-item-07.jpg|640px]]
 
[[Файл:first-item-07.jpg|640px]]
  
Сохраняем картинку рядом со сценой, смотрим на её разрешение: 512х512 пикселей. Создаём плоскость размером 512х512мм, назначаем ей новый материал типа lambert (RMB - > Assign New Material). Материал назначен, но к его файл-ноде не привязана текстура. Чтобы исправить это, жмём RMB -> Material Attributes, и в свитке Common Material Attributes клацаем по кнопке-шахматке напротив параметра Color:
+
Сохраняем картинку рядом со сценой, смотрим на её разрешение: 512х512 пикселей. Создаём плоскость размером 512х512мм, назначаем ей новый материал типа lambert ('''RMB - > Assign New Material'''). Материал назначен, но к его файл-ноде не привязана текстура. Чтобы исправить это, жмём '''RMB -> Material Attributes''', и в свитке '''Common Material Attributes''' клацаем по кнопке-шахматке напротив параметра '''Color''':
  
 
[[Файл:first-item-08.PNG|480px]]
 
[[Файл:first-item-08.PNG|480px]]
  
В открывшемся окошке из списка справа выбираем кнопку File. Теперь в редакторе атрибутов в свитке File Attributes в поле Image Name указываем нашу текстуру. Получается что-то такое:
+
В открывшемся окошке из списка справа выбираем кнопку '''File'''. Теперь в редакторе атрибутов в свитке '''File Attributes''' в поле '''Image Name''' указываем нашу текстуру. Получается что-то такое:
  
 
[[Файл:first-item-09.PNG|640px]]
 
[[Файл:first-item-09.PNG|640px]]
  
Поскольку и текстура, и плоскость, на которой она лежит, являются квадратными, то никаких действий с развёрткой предпринимать не нужно. Требуется лишь переключиться на вид сверху, включить режим X-Ray на панели над вьюпортом и отмасштабировать изображение донца под размер банки.
+
Поскольку и текстура, и плоскость, на которой она лежит, являются квадратными, то никаких действий с развёрткой предпринимать не нужно. Требуется лишь переключиться на вид сверху, включить режим '''X-Ray''' на панели над вьюпортом и отмасштабировать изображение донца под размер банки.
  
 
[[Файл:first-item-10.png|640px]]
 
[[Файл:first-item-10.png|640px]]
  
Смещаем плоскость вниз, чтобы она не перекрывала банку, затем, не снимая выделения, открываем панель Channel Box/Layer Editor и добавляем её в новый слой, который можно назвать REF. Слою ставим  тип отрисовки Reference ? он будет отображаться во вьюпорте, но плоскость невозможно будет случайно выделить.
+
Смещаем плоскость вниз, чтобы она не перекрывала банку, затем, не снимая выделения, открываем панель '''Channel Box/Layer Editor''' и добавляем её в новый слой, который можно назвать '''''REF'''''. Слою ставим  тип отрисовки '''Reference''' – так он будет отображаться во вьюпорте, но плоскость невозможно будет случайно выделить.
  
 
[[Файл:first-item-11.png|480px]]
 
[[Файл:first-item-11.png|480px]]
  
Наконец-то переходим к созданию рёбер жёсткости. Будем делать их по-старинке, выдавливанием. Для этого в том же виде сверху удаляем полигоны крышки, выбираем рёбра по краям, и, выполняя операцию Extrude, последовательно выдавливаем их по ширине выпуклостей, но не пользуемся манипуляторами Extrude, а каждый раз переключаемся на инструмент масштабирования. Это нужно для того, чтобы рёбра выдавливались в одной плоскости, а не по какой-нибудь дуге.
+
Наконец-то переходим к созданию рёбер жёсткости. Будем делать их по-старинке, выдавливанием. Для этого в том же виде сверху удаляем полигоны крышки, выбираем рёбра по краям, и, выполняя операцию '''Extrude''', последовательно выдавливаем их по ширине выпуклостей, но не пользуемся манипуляторами Extrude, а каждый раз переключаемся на инструмент масштабирования клавишей '''R'''. Это нужно для того, чтобы рёбра выдавливались в одной плоскости, а не по какой-нибудь дуге.
  
 
[[Файл:first-item-12.PNG|640px]]
 
[[Файл:first-item-12.PNG|640px]]
  
Оставшееся отверстие закроем операцией Shift+RMB -> Fill Hole. Затем выберем лупы, расположенные по центру выпуклостей, переключимся в перспективу и сместим выделенные рёбра вверх:
+
Оставшееся отверстие закроем операцией '''Shift+RMB -> Fill Hole'''. Затем выберем лупы, расположенные по центру выпуклостей, переключимся в перспективу и сместим выделенные рёбра вверх:
  
 
[[Файл:first-item-13.PNG|640px]]
 
[[Файл:first-item-13.PNG|640px]]
  
Форма задана, теперь нужно её детализировать, заодно добавив поддерживающие рёбра буртикам. Делается это тем же инструментов Insert Edge Loop с включенным параметром Insert with edge flow. Числовое значение этого параметра подбирается экспериментально.
+
Форма задана, теперь нужно её детализировать, заодно добавив поддерживающие рёбра буртикам. Делается это тем же инструментом '''Insert Edge Loop''' с включенным параметром '''Insert with edge flow'''. Числовое значение этого параметра подбирается экспериментально.
  
 
[[Файл:first-item-14.PNG|640px]]
 
[[Файл:first-item-14.PNG|640px]]
  
Проконтролировать результат можно нажатием кнопки 3, она включит режим сглаженного отображения:
+
Проконтролировать результат можно нажатием кнопки '''3''', она включит режим сглаженного отображения:
  
 
[[Файл:first-item-15.png|640px]]
 
[[Файл:first-item-15.png|640px]]
Строка 82: Строка 82:
 
В этом режиме тоже можно редактировать геометрию.
 
В этом режиме тоже можно редактировать геометрию.
  
Итак, верхняя крышка высокополигональной модели полностью готова. Но как быть с нижней крышкой, не моделить же её заново? Удобнее всего выделить полигоны крышки и воспользоваться операцией Shift+RMB -> Duplicate Faces. В результате выделенные полигоны будут продублированы отдельным мешем. Нам остаётся только отзеркалить его по оси Y на панельке Channel Box'а, а затем удалить полигоны нижней крышки, операцией Shift+RMB -> Combine объединить дублированную крышку в один объект с остальной банкой, проверить, совпадают ли вертексы на границе разрезов, подвинуть их, если они не совпадают, и сшить вершины операцией Shift+RMB -> Merge Vertices.
+
Итак, верхняя крышка высокополигональной модели полностью готова. Но как быть с нижней крышкой, не моделить же её заново? Удобнее всего продублировать полигоны крышки, воспользовавшись операцией '''Shift+RMB -> Duplicate Faces'''. В результате выделенные полигоны крышки будут продублированы отдельным мешем. Остаётся только отзеркалить его по оси '''Y''' на панельке '''Channel Box'''; удалить полигоны нижней крышки; операцией '''Shift+RMB -> Combine''' объединить дублированную крышку в один объект с остальной банкой; проверить, совпадают ли вертексы на границе разрезов; подвинуть их, если они не совпадают; и сшить соприкасающиеся вершины операцией '''Shift+RMB -> Merge Vertices'''.
 +
{| style="background-color: #fffdee;" width="100%"
 +
|<span style="color:#172172;">'''Важно!'''</span>
 +
На этом этапе стоит перейти в режим редактирования вершин и проверить, не осталось ли где-то неудалившихся, мусорных вертексов.
 +
|}
  
 
[[Файл:first-item-16.png|640px]]
 
[[Файл:first-item-16.png|640px]]
  
Вот какая получилась модель:
+
Результат:
  
 
[[Файл:first-item-17.PNG|640px]]
 
[[Файл:first-item-17.PNG|640px]]
  
Высокополигональная модель закончена, переходим к низкополигональной.
+
Высокополигональная модель закончена, именуем её в '''Outliner'''е как '''''HI_TIN''''' и переходим к низкополигональной модельке.
  
 
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
 
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
Строка 99: Строка 103:
 
* продублировать существующую высокополигональную банку и убрать с неё детализацию
 
* продублировать существующую высокополигональную банку и убрать с неё детализацию
 
В нашем случае удобнее будет убрать детализацию. Для этого:
 
В нашем случае удобнее будет убрать детализацию. Для этого:
* нажатием Ctrl+D дублируем существующую банку и добавляем её на новый слой, который назовём HI_GEO. Этот слой пока скроем, нажав на кнопочку V, и не будем трогать до тех пор, пока не перейдём к запеканию нормалмап.
+
* нажатием '''Ctrl+D''' дублируем существующую банку и добавляем её на новый слой, который назовём '''''HI_GEO'''''. Этот слой пока скроем, нажав на кнопочку '''V''' в '''Layer Editor''''е, и не будем трогать до тех пор, пока не перейдём к запеканию нормалмап.
* на оставшейся банке при зажатой клавише Shift кликом ЛКМ выделим каждое второе ребро по диаметру и нажмём Ctrl+Del ? этим сочетанием клавиш удалятся и рёбра, и вертексы на пересечениях удаляемого ребра со всеми прочими. Так же поступим с поддерживающими рёбрами на буртиках, а крышки вовсе удалим и закроем образовавшиеся дыры операцией Fill Hole.
+
* на оставшейся банке при зажатой клавише Shift кликом ЛКМ выделим каждое второе ребро по диаметру и нажмём Ctrl+Del этим сочетанием клавиш удалятся и рёбра, и вертексы на пересечениях удаляемого ребра со всеми прочими. Так же поступим с поддерживающими рёбрами на буртиках, а крышки вовсе удалим и закроем образовавшиеся дыры операцией Fill Hole.
  
 
[[Файл:first-item-18.PNG|640px|слева высокополигональная банка с выделенными под удаление рёбрами, справа - результат удаления ненужных компонентов]]
 
[[Файл:first-item-18.PNG|640px|слева высокополигональная банка с выделенными под удаление рёбрами, справа - результат удаления ненужных компонентов]]
Строка 108: Строка 112:
 
[[Файл:first-item-19.PNG|320px]]
 
[[Файл:first-item-19.PNG|320px]]
  
Низкополигональная модель готова, переходим к процессу создания её развёртки.
+
Низкополигональная модель готова, именуем её в Outliner'е как LO_TIN и переходим к процессу создания её развёртки.
  
 
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
 
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
Строка 135: Строка 139:
 
[[Файл:first-item-24.png|640px]]
 
[[Файл:first-item-24.png|640px]]
  
Аналогичные манипуляции проделиываем и с остальными кусками развёртки:
+
Аналогичные манипуляции проделываем и с остальными кусками развёртки:
  
 
[[Файл:first-item-25.png|640px]]
 
[[Файл:first-item-25.png|640px]]
Строка 143: Строка 147:
 
Вовсе необязательно выделять каждое ребро крышки вручную. Можно кликом LMB выбрать все рёбра нужного куска развёртки, а затем при зажатой Ctrl прокликать лупы - с них снимется выделение, и выделенными останутся только нужные рёбра.
 
Вовсе необязательно выделять каждое ребро крышки вручную. Можно кликом LMB выбрать все рёбра нужного куска развёртки, а затем при зажатой Ctrl прокликать лупы - с них снимется выделение, и выделенными останутся только нужные рёбра.
 
|}
 
|}
----
 
  
 
К полученным кускам применяем операцию Unfold, чтобы дополнительно разгладить их:
 
К полученным кускам применяем операцию Unfold, чтобы дополнительно разгладить их:
Строка 158: Строка 161:
  
 
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
 
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
 +
 +
 +
== Запекание карты нормалей ==
 +
Суть процедуры: запекалка берёт информацию о положении [[Нормаль|нормалей]] с высокополигональной модели, и сохраняет её в специальную текстурку по UV-координатам низкополигональной модели. В итоге низкополигональная моделька с картой нормалей в игре будет выглядеть почти так же, как высокополигональная, хотя её геометрия нисколько не поменялась.
 +
 +
Вот основные принципы, которые нужно помнить при создании карт нормалей:
 +
* для высокополигональной модели развёртка не нужна вовсе;
 +
* куски развёртки низкополигональной модели не должны накладываться друг на друга;
 +
* развёртку крайне желательно помещать внутри UV-пространства [0,1]
 +
 +
Запекать карту нормалей будем с помощью подключаемой к Майе запекалки под названием '''Turtle'''. Она поставляется в виде расширения (плагина), и её нужно включить вручную в '''Windows -> Settings/Preferences -> Plug-in Manager''':
 +
 +
[[Файл:first-item-28.png|320px]]
 +
 +
Далее открываем редактор слоёв запекалки: '''Windows -> Rendering Editors -> TURTLE -> Bake Layer Editor''':
 +
 +
[[Файл:first-item-29.png|640px]]
 +
 +
В окне редактора есть несколько полей:
 +
* '''Bake Layers''' — список слоёв, которым можно задавать разные настройки. Мы будем работать в слое по умолчанию;
 +
* '''Target Surfaces''' — целевая, т.е. низкополигональная модель;
 +
* '''Source Surfaces''' — высокополигональная модель, с которой будет взята информация о нормалях;
 +
* '''Envelope Surfaces''' — специальная модель, используемая в тех случаях, когда различия между высоко- и низкополигональной моделями слишком велики и карта нормалей запекается с дефектами. В нашем случае не пригодится.
 +
 +
Выделяем низкополигональную модель, и добавляем её в поле '''Target Surfaces''' нажатием кнопки '''Add Selected'''. Высокополигональную модель добавляем в поле '''Source Surfaces'''.
 +
{| style="background-color: #fffdee;" width="100%"
 +
|<span style="color:#172172;">'''Важно!'''</span>
 +
Обеим моделям нужно включить видимость слоёв в '''Layer Editor''' (не том, что в запекалке). Если одна из моделей не будет отображаться во вьюпорте, то карта нормалей не запечётся корректно.
 +
|}
 +
 +
[[Файл:first-item-30.png|768px]]
 +
 +
Закрываем редактор слоёв, открываем окно настроек рендера '''Windows -> Rendering Editors -> Render Settings''', и в ниспадающем списке '''Render Using''' переключаем рендерер на '''Turtle''':
 +
 +
[[Файл:first-item-31.png|320px]]
 +
 +
Ниже переключаемся на вкладку '''TURTLE''' и меняет тип рендера с '''Rendering''' на '''Baking''':
 +
 +
[[Файл:first-item-32.png|320px]]
 +
 +
И переключаемся на вкладку '''Baking''', расположенную ещё ниже. Здесь нужно включить опцию запекания карт нормалей, отметив флажком пункт '''Normal Map''' в свитке '''Outputs -> Shader Outputs''':
 +
 +
[[Файл:first-item-33.png|320px]]
 +
 +
Минимальный набор установок задан, можно нажать на кнопочку '''Render the current frame''' и посмотреть, что получилось:
 +
 +
[[Файл:first-item-34.png|768px]]
 +
 +
Выглядит вполне корректно! Но размерчик маловат. Нужно увеличить размер итоговой текстуры до 2048х2048 пикселей и задать папку (например, ''X:\import''), в которую будет сохранена карта нормалей:
 +
 +
[[Файл:first-item-35.png|320px]]
 +
 +
Далее можно поменять настройки применяемого к картинке фильтра и увеличить число проходов во вкладке '''Sampling'''. Однако сразу стоит уяснить, что чем больше число проходов, тем медленнее рендерится текстура, поэтому не следует накручивать сэмплы для тестовых прогонов.
 +
 +
[[Файл:first-item-36.png|640px]]
 +
 +
Карта нормалей автоматически сохраняется как файл в указанную раньше папку, и впоследствии его можно будет преобразовать в сталкерский бамп средствами СДК.
 +
 +
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
 +
 +
В следующих сериях: самопальная фототекстура.

Версия 18:15, 21 января 2019

А давайте попробуем создать какой-нибудь простой предмет совсем-совсем с нуля. Например, банку сгущёнки, её все видели и все понимают, как она выглядит и что с ней делают. Замоделим высоко- и низкополигональные модели, создадим развёртку, запечём карту нормалей (normalmap), нарисуем фототекстуру, обработаем в сталкерском СДК и добавим всё это в игру.

В этом руководстве используются:

Майю предварительно нужно настроить так, как описано в этой статье.

Шаг 1: моделирование

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

Размеры

Стандартная банка сгущёнки имеет диаметр 73мм (75мм по буртику) и высоту 80мм.

Заходим в настройки сцены Windows -> Settings/Preferences -> Preferences, по вкладке Settings переключаем Working Units в миллиметры, сохраняем.

Высокополигональная (high-poly) модель

Создаём примитив типа "цилиндр", задаём ему радиус 36,5мм и высоту 80мм, число разбиений увеличим до 40:

first-item-01.png

Это базовая заготовка. Подобный метод создания модели так и называется - моделинг от примитива.

Далее создаём два буртика, расположенных на равных расстояниях друг от друга. Для этого открываем свойства инструмента Mesh Tools -> Insert Edge Loop, включаем режим Multiple edge loops, и задаём количество лупов: 2.

first-item-02.PNG

Кликаем по любому вертикальному ребру цилиндра, получаем две петли. Переключившись на инструмент маштабирования клавишей R, смещаем лупы вертикально.

first-item-03.PNG

Далее нужно выделить полигоны будущих буртиков и выдавить их наружу. Для этого нажатием клавиши Пробел переключаемся на вид сбоку, выделяем нужные полигоны, и применяем к ним операцию Edit Mesh -> Extrude, и доводим буртики манипуляторами инструмента масштабирования до нужного вида:

first-item-04.PNG

Тем же методом формируем бурты сверху и снизу:

first-item-05.PNG

Некоторые лупы после выдавливания получились мягкими, хотя углы между полигонами в районе 90 градусов. Нужно сразу исправить их, выделив двойным щелчком LMB и применив операцию Shift+RMB -> Soften/Harden Edges -> Harden Edge.

first-item-06.PNG

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

first-item-07.jpg

Сохраняем картинку рядом со сценой, смотрим на её разрешение: 512х512 пикселей. Создаём плоскость размером 512х512мм, назначаем ей новый материал типа lambert (RMB - > Assign New Material). Материал назначен, но к его файл-ноде не привязана текстура. Чтобы исправить это, жмём RMB -> Material Attributes, и в свитке Common Material Attributes клацаем по кнопке-шахматке напротив параметра Color:

first-item-08.PNG

В открывшемся окошке из списка справа выбираем кнопку File. Теперь в редакторе атрибутов в свитке File Attributes в поле Image Name указываем нашу текстуру. Получается что-то такое:

first-item-09.PNG

Поскольку и текстура, и плоскость, на которой она лежит, являются квадратными, то никаких действий с развёрткой предпринимать не нужно. Требуется лишь переключиться на вид сверху, включить режим X-Ray на панели над вьюпортом и отмасштабировать изображение донца под размер банки.

first-item-10.png

Смещаем плоскость вниз, чтобы она не перекрывала банку, затем, не снимая выделения, открываем панель Channel Box/Layer Editor и добавляем её в новый слой, который можно назвать REF. Слою ставим тип отрисовки Reference – так он будет отображаться во вьюпорте, но плоскость невозможно будет случайно выделить.

first-item-11.png

Наконец-то переходим к созданию рёбер жёсткости. Будем делать их по-старинке, выдавливанием. Для этого в том же виде сверху удаляем полигоны крышки, выбираем рёбра по краям, и, выполняя операцию Extrude, последовательно выдавливаем их по ширине выпуклостей, но не пользуемся манипуляторами Extrude, а каждый раз переключаемся на инструмент масштабирования клавишей R. Это нужно для того, чтобы рёбра выдавливались в одной плоскости, а не по какой-нибудь дуге.

first-item-12.PNG

Оставшееся отверстие закроем операцией Shift+RMB -> Fill Hole. Затем выберем лупы, расположенные по центру выпуклостей, переключимся в перспективу и сместим выделенные рёбра вверх:

first-item-13.PNG

Форма задана, теперь нужно её детализировать, заодно добавив поддерживающие рёбра буртикам. Делается это тем же инструментом Insert Edge Loop с включенным параметром Insert with edge flow. Числовое значение этого параметра подбирается экспериментально.

first-item-14.PNG

Проконтролировать результат можно нажатием кнопки 3, она включит режим сглаженного отображения:

first-item-15.png

В этом режиме тоже можно редактировать геометрию.

Итак, верхняя крышка высокополигональной модели полностью готова. Но как быть с нижней крышкой, не моделить же её заново? Удобнее всего продублировать полигоны крышки, воспользовавшись операцией Shift+RMB -> Duplicate Faces. В результате выделенные полигоны крышки будут продублированы отдельным мешем. Остаётся только отзеркалить его по оси Y на панельке Channel Box'а; удалить полигоны нижней крышки; операцией Shift+RMB -> Combine объединить дублированную крышку в один объект с остальной банкой; проверить, совпадают ли вертексы на границе разрезов; подвинуть их, если они не совпадают; и сшить соприкасающиеся вершины операцией Shift+RMB -> Merge Vertices.

Важно!

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

first-item-16.png

Результат:

first-item-17.PNG

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

Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.

Низкополигональная (low-poly) модель

Есть два способа получить низкополигональную модель:

  • вернуться в прошлое и продублировать заготовку цилиндра на отдельный слой
  • продублировать существующую высокополигональную банку и убрать с неё детализацию

В нашем случае удобнее будет убрать детализацию. Для этого:

  • нажатием Ctrl+D дублируем существующую банку и добавляем её на новый слой, который назовём HI_GEO. Этот слой пока скроем, нажав на кнопочку V в Layer Editor'е, и не будем трогать до тех пор, пока не перейдём к запеканию нормалмап.
  • на оставшейся банке при зажатой клавише Shift кликом ЛКМ выделим каждое второе ребро по диаметру и нажмём Ctrl+Del – этим сочетанием клавиш удалятся и рёбра, и вертексы на пересечениях удаляемого ребра со всеми прочими. Так же поступим с поддерживающими рёбрами на буртиках, а крышки вовсе удалим и закроем образовавшиеся дыры операцией Fill Hole.

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

  • Добавим получившуюся низкополигональную банку на новый слой, который назовём LO_GEO.

first-item-19.PNG

Низкополигональная модель готова, именуем её в Outliner'е как LO_TIN и переходим к процессу создания её развёртки.

Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.

Создание UV-развёртки для низкополигональной модели

Выделяем банку и в основном вьюпорте нажатием Shift+RMB -> Mapping -> Automatic Map накидываем на неё автоматическую развёртку, а в UV Editor'е для большего удобства включаем режим Shaded UV:

first-item-20.PNG

Автоматика сделал половину работы за нас, и осталось лишь подправить полученные куски по своему вкусу. Для этого понадобятся лишь два инструмента: Cut и Move and Sew Edges. К ним можно получить доступ в режиме редактирования рёбер, удерживая Shift+RMB.

Сначала сошьём боковину банки в один лоскут:

first-item-21.png

Затем разделим буртики на отдельные полигоны, выделив их граничные рёбра:

first-item-22.png

После чего двойным кликом выделим по окружности рёбра крышки и выполним Move and Sew:

first-item-23.png

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

first-item-24.png

Аналогичные манипуляции проделываем и с остальными кусками развёртки:

first-item-25.png

Подсказка

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

К полученным кускам применяем операцию Unfold, чтобы дополнительно разгладить их:

first-item-26.png

А затем выполняем операцию Layout UV, чтобы куски получили одинаковый масштаб и равномерно расположились в UV-пространстве от 0 до 1:

first-item-27.png

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

На этом создание развёртки можно считать оконченным.

Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.


Запекание карты нормалей

Суть процедуры: запекалка берёт информацию о положении нормалей с высокополигональной модели, и сохраняет её в специальную текстурку по UV-координатам низкополигональной модели. В итоге низкополигональная моделька с картой нормалей в игре будет выглядеть почти так же, как высокополигональная, хотя её геометрия нисколько не поменялась.

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

  • для высокополигональной модели развёртка не нужна вовсе;
  • куски развёртки низкополигональной модели не должны накладываться друг на друга;
  • развёртку крайне желательно помещать внутри UV-пространства [0,1]

Запекать карту нормалей будем с помощью подключаемой к Майе запекалки под названием Turtle. Она поставляется в виде расширения (плагина), и её нужно включить вручную в Windows -> Settings/Preferences -> Plug-in Manager:

first-item-28.png

Далее открываем редактор слоёв запекалки: Windows -> Rendering Editors -> TURTLE -> Bake Layer Editor:

first-item-29.png

В окне редактора есть несколько полей:

  • Bake Layers — список слоёв, которым можно задавать разные настройки. Мы будем работать в слое по умолчанию;
  • Target Surfaces — целевая, т.е. низкополигональная модель;
  • Source Surfaces — высокополигональная модель, с которой будет взята информация о нормалях;
  • Envelope Surfaces — специальная модель, используемая в тех случаях, когда различия между высоко- и низкополигональной моделями слишком велики и карта нормалей запекается с дефектами. В нашем случае не пригодится.

Выделяем низкополигональную модель, и добавляем её в поле Target Surfaces нажатием кнопки Add Selected. Высокополигональную модель добавляем в поле Source Surfaces.

Важно!

Обеим моделям нужно включить видимость слоёв в Layer Editor (не том, что в запекалке). Если одна из моделей не будет отображаться во вьюпорте, то карта нормалей не запечётся корректно.

first-item-30.png

Закрываем редактор слоёв, открываем окно настроек рендера Windows -> Rendering Editors -> Render Settings, и в ниспадающем списке Render Using переключаем рендерер на Turtle:

first-item-31.png

Ниже переключаемся на вкладку TURTLE и меняет тип рендера с Rendering на Baking:

first-item-32.png

И переключаемся на вкладку Baking, расположенную ещё ниже. Здесь нужно включить опцию запекания карт нормалей, отметив флажком пункт Normal Map в свитке Outputs -> Shader Outputs:

first-item-33.png

Минимальный набор установок задан, можно нажать на кнопочку Render the current frame и посмотреть, что получилось:

first-item-34.png

Выглядит вполне корректно! Но размерчик маловат. Нужно увеличить размер итоговой текстуры до 2048х2048 пикселей и задать папку (например, X:\import), в которую будет сохранена карта нормалей:

first-item-35.png

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

first-item-36.png

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

Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.

В следующих сериях: самопальная фототекстура.