Создание предмета с нуля
А давайте попробуем создать какой-нибудь простой предмет совсем-совсем с нуля. Например, банку сгущёнки, её все видели и все понимают, как она выглядит и что с ней делают. Замоделим высоко- и низкополигональные модели, создадим развёртку, запечём карту нормалей (normalmap), нарисуем фототекстуру, обработаем всё это в сталкерском СДК и добавим в игру.
В этом руководстве используются:
- Maya 2019 и плагин X-Ray Maya tools
- Photoshop CC
- текстовый редактор с подсветкой синтаксиса, например, SciTE
- и собственно сам сталкерский SDK
Майю предварительно нужно настроить так, как описано в этой статье.
Содержание
Моделирование
Нам нужны две модели: одна высокополигональная, очень детализированная; и вторая, без детализации. С первой мы снимем карту нормалей, и запечём её на вторую, низкополигональную модель, которая будет использоваться в игре.
Размеры
Стандартная банка сгущёнки имеет диаметр 73мм (75мм по буртику) и высоту 80мм.
Заходим в настройки сцены Windows -> Settings/Preferences -> Preferences, по вкладке Settings переключаем Working Units в миллиметры, сохраняем.
Высокополигональная (high-poly) модель
Создаём примитив типа "цилиндр", задаём ему радиус 36,5мм и высоту 80мм, число разбиений увеличим до 40:
Это базовая заготовка. Подобный метод создания модели так и называется - моделинг от примитива.
Далее создаём два буртика, расположенных на равных расстояниях друг от друга. Для этого открываем свойства инструмента Mesh Tools -> Insert Edge Loop, включаем режим Multiple edge loops, и задаём количество лупов: 2.
Кликаем по любому вертикальному ребру цилиндра, получаем две петли. Переключившись на инструмент маштабирования клавишей R, смещаем лупы вертикально.
Далее нужно выделить полигоны будущих буртиков и выдавить их наружу. Для этого нажатием клавиши Пробел переключаемся на вид сбоку, выделяем нужные полигоны, и применяем к ним операцию Edit Mesh -> Extrude, и доводим буртики манипуляторами инструмента масштабирования до нужного вида:
Тем же методом формируем бурты сверху и снизу:
Некоторые лупы после выдавливания получились мягкими, хотя углы между полигонами в районе 90 градусов. Нужно сразу исправить их, выделив двойным щелчком LMB и применив операцию Shift+RMB -> Soften/Harden Edges -> Harden Edge.
Теперь нужно как-то создать кольцевые рёбра жёсткости на крышках. Если бы мы собирались рисовать текстуру без использования фото или сканов, то рёбра жёсткости можно было бы сделать на глаз, но у нас уже есть готовый скан крышки банки, поэтому мы будем использовать её как референс.
Сохраняем картинку рядом со сценой, смотрим на её разрешение: 512х512 пикселей. Создаём плоскость размером 512х512мм, назначаем ей новый материал типа lambert (RMB - > Assign New Material). Материал назначен, но к его файл-ноде не привязана текстура. Чтобы исправить это, жмём RMB -> Material Attributes, и в свитке Common Material Attributes клацаем по кнопке-шахматке напротив параметра Color:
В открывшемся окошке из списка справа выбираем кнопку File. Теперь в редакторе атрибутов в свитке File Attributes в поле Image Name указываем нашу текстуру. Получается что-то такое:
Поскольку и текстура, и плоскость, на которой она лежит, являются квадратными, то никаких действий с развёрткой предпринимать не нужно. Требуется лишь переключиться на вид сверху, включить режим X-Ray на панели над вьюпортом и отмасштабировать изображение донца под размер банки.
Смещаем плоскость вниз, чтобы она не перекрывала банку, затем, не снимая выделения, открываем панель Channel Box/Layer Editor и добавляем её в новый слой, который можно назвать REF. Слою ставим тип отрисовки Reference – так он будет отображаться во вьюпорте, но плоскость невозможно будет случайно выделить.
Наконец-то переходим к созданию рёбер жёсткости. Будем делать их по-старинке, выдавливанием. Для этого в том же виде сверху удаляем полигоны крышки, выбираем рёбра по краям, и, выполняя операцию Extrude, последовательно выдавливаем их по ширине выпуклостей, но не пользуемся манипуляторами Extrude, а каждый раз переключаемся на инструмент масштабирования клавишей R. Это нужно для того, чтобы рёбра выдавливались в одной плоскости, а не по какой-нибудь дуге.
Оставшееся отверстие закроем операцией Shift+RMB -> Fill Hole. Затем выберем лупы, расположенные по центру выпуклостей, переключимся в перспективу и сместим выделенные рёбра вверх:
Форма задана, теперь нужно её детализировать, заодно добавив поддерживающие рёбра буртикам. Делается это тем же инструментом Insert Edge Loop с включенным параметром Insert with edge flow. Числовое значение этого параметра подбирается экспериментально.
Проконтролировать результат можно нажатием кнопки 3, она включит режим сглаженного отображения:
В этом режиме тоже можно редактировать геометрию.
Итак, верхняя крышка высокополигональной модели полностью готова. Но как быть с нижней крышкой, не моделить же её заново? Удобнее всего продублировать полигоны крышки, воспользовавшись операцией Shift+RMB -> Duplicate Faces. В результате выделенные полигоны крышки будут продублированы отдельным мешем. Остаётся только отзеркалить его по оси Y на панельке Channel Box'а; удалить полигоны нижней крышки; операцией Shift+RMB -> Combine объединить дублированную крышку в один объект с остальной банкой; проверить, совпадают ли вертексы на границе разрезов; подвинуть их, если они не совпадают; и сшить соприкасающиеся вершины операцией Shift+RMB -> Merge Vertices.
Важно!
На этом этапе стоит перейти в режим редактирования вершин и проверить, не осталось ли где-то неудалившихся, мусорных вертексов. |
Результат:
Высокополигональная модель закончена, именуем её в Outlinerе как HI_TIN и переходим к низкополигональной модельке.
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
Низкополигональная (low-poly) модель
Есть два способа получить низкополигональную модель:
- вернуться в прошлое и продублировать заготовку цилиндра на отдельный слой
- продублировать существующую высокополигональную банку и убрать с неё детализацию
В нашем случае удобнее будет убрать детализацию. Для этого:
- нажатием Ctrl+D дублируем существующую банку и добавляем её на новый слой, который назовём HI_GEO. Этот слой пока скроем, нажав на кнопочку V в Layer Editor'е, и не будем трогать до тех пор, пока не перейдём к запеканию нормалмап.
- на оставшейся банке при зажатой клавише Shift кликом ЛКМ выделим каждое второе ребро по диаметру и нажмём Ctrl+Del – этим сочетанием клавиш удалятся и рёбра, и вертексы на пересечениях удаляемого ребра со всеми прочими. Так же поступим с поддерживающими рёбрами на буртиках, а крышки вовсе удалим и закроем образовавшиеся дыры операцией Fill Hole.
- Добавим получившуюся низкополигональную банку на новый слой, который назовём LO_GEO.
Низкополигональная модель готова, именуем её в Outliner'е как LO_TIN и переходим к процессу создания её развёртки.
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
Создание UV-развёртки для низкополигональной модели
Выделяем банку и в основном вьюпорте нажатием Shift+RMB -> Mapping -> Automatic Map накидываем на неё автоматическую развёртку, а в UV Editor'е для большего удобства включаем режим Shaded UV:
Автоматика сделал половину работы за нас, и осталось лишь подправить полученные куски по своему вкусу. Для этого понадобятся лишь два инструмента: Cut и Move and Sew Edges. К ним можно получить доступ в режиме редактирования рёбер, удерживая Shift+RMB.
Сначала сошьём боковину банки в один лоскут:
Затем разделим буртики на отдельные полигоны, выделив их граничные рёбра:
После чего двойным кликом выделим по окружности рёбра крышки и выполним Move and Sew:
Получаем эдакую розочку с лепестками наружу. Критически важно, чтобы куски развёртки не пересекались и не накладывались друг на друга, иначе впоследствии не получится запечь карту нормалей.
Аналогичные манипуляции проделываем и с остальными кусками развёртки:
Подсказка
Вовсе необязательно выделять каждое ребро крышки вручную. Можно кликом LMB выбрать все рёбра нужного куска развёртки, а затем при зажатой Ctrl прокликать лупы - с них снимется выделение, и выделенными останутся только нужные рёбра. |
К полученным кускам применяем операцию Unfold, чтобы дополнительно разгладить их:
А затем выполняем операцию Layout UV, чтобы куски получили одинаковый масштаб и равномерно расположились в UV-пространстве от 0 до 1:
После чего их можно немного раздвинуть, чтобы они не касались друг друга вплотную.
На этом создание развёртки можно считать оконченным.
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.
Запекание карты нормалей
Суть процедуры: запекалка берёт информацию о положении нормалей с высокополигональной модели, и сохраняет её в специальную текстурку по UV-координатам низкополигональной модели. В итоге низкополигональная моделька с картой нормалей в игре будет выглядеть почти так же, как высокополигональная, хотя её геометрия нисколько не поменялась.
Вот основные принципы, которые нужно помнить при создании карт нормалей:
- для высокополигональной модели развёртка не нужна вовсе;
- куски развёртки низкополигональной модели не должны накладываться друг на друга;
- развёртку крайне желательно помещать внутри UV-пространства [0,1]
Запекать карту нормалей будем с помощью подключаемой к Майе запекалки под названием Turtle. Она поставляется в виде расширения (плагина), и её нужно включить вручную в Windows -> Settings/Preferences -> Plug-in Manager:
Далее открываем редактор слоёв запекалки: Windows -> Rendering Editors -> TURTLE -> Bake Layer Editor:
В окне редактора есть несколько полей:
- Bake Layers — список слоёв, которым можно задавать разные настройки. Мы будем работать в слое по умолчанию;
- Target Surfaces — целевая, т.е. низкополигональная модель;
- Source Surfaces — высокополигональная модель, с которой будет взята информация о нормалях;
- Envelope Surfaces — специальная модель, используемая в тех случаях, когда различия между высоко- и низкополигональной моделями слишком велики и карта нормалей запекается с дефектами. В нашем случае не пригодится.
Выделяем низкополигональную модель, и добавляем её в поле Target Surfaces нажатием кнопки Add Selected. Высокополигональную модель добавляем в поле Source Surfaces.
Важно!
Обеим моделям нужно включить видимость слоёв в Layer Editor (не том, что в запекалке). Если одна из моделей не будет отображаться во вьюпорте, то карта нормалей не запечётся корректно. |
Закрываем редактор слоёв, открываем окно настроек рендера Windows -> Rendering Editors -> Render Settings, и в ниспадающем списке Render Using переключаем рендерер на Turtle:
Ниже переключаемся на вкладку TURTLE и меняет тип рендера с Rendering на Baking:
И переключаемся на вкладку Baking, расположенную ещё ниже. Здесь нужно включить опцию запекания карт нормалей, отметив флажком пункт Normal Map в свитке Outputs -> Shader Outputs:
Минимальный набор установок задан, можно нажать на кнопочку Render the current frame и посмотреть, что получилось:
Выглядит вполне корректно! Но размерчик маловат. Нужно увеличить размер итоговой текстуры до 2048х2048 пикселей и задать папку (например, X:\import), в которую будет сохранена карта нормалей:
Далее можно поменять настройки применяемого к картинке фильтра и увеличить число проходов во вкладке Sampling. Однако сразу стоит уяснить, что чем больше число проходов, тем медленнее рендерится текстура, поэтому не следует накручивать сэмплы для тестовых прогонов.
Карта нормалей автоматически сохраняется как файл в указанную раньше папку, и впоследствии его можно будет преобразовать в сталкерский бамп средствами СДК.
Сцену на текущей стадии (формат Maya 2019) можно скачать с нашего сервера.