# Глава 9. Низкополигональная гоночная машина — Построение меша

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

Создание для внешних приложений

Начало моделирования грузовика

Manifold против non-manifold мешей

Добавление деталей

## Создание для внешних приложений

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

Например, Блендер является отличным инструментом для создания игровых 3D-моделей. Вы можете построить и текстурировать модель в Блендере, а затем экспортировать ее в другие форматы. Давайте взглянем по-бустрому на наше меню экспорта, чтобы узнать, какие у нас есть варианты:

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

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

Данные меша (почти) универсальны, и это означает, что физическая структура модели может использоваться в большинстве 3D- и игровых программ. Однако следует иметь в виду, что N-угольники не универсальны. Они становятся всё более распространенными, но существует ещё несколько популярных платформ, которые их не принимают. Поэтому, когда вы моделируете для экспорта, я настоятельно рекомендую вам использовать только треугольники и четырёхугольники:

(Tris and Quads Only – Только треугольники и четырёхугольники, Avoid N-Gons – избегайте N-угольников)

Количество полигонов также очень важно для этих типов моделей. Если вы знакомы с авиационными симуляторами, вы знаете, что типичный самолет выглядит гораздо менее реалистичным в игре, чем в голливудском фильме. Оба являются 3D-моделями, но к ним предъявляют очень разные требования, и их по-разному применяют.

Давайте рассмотрим две модели F-18 Hornet, которые я сделал. Первая предназначена только для 2D-рендера (или анимации не в реальном времени). Поскольку я могу позволить себе потратить минуты (или даже часы) на рендер, я смог смоделировать множество сложных деталей в самом меше:

Наоборот, вот ещё одна модель F-18, которую я сделал для симуляции:

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

Какое количество требуется? Ну, это на самом деле зависит от приложения. Некоторые модели грузовиков (типа того, что мы будем делать) могут составлять всего несколько десятков полигонов, в то время как другие могут достигать десятков тысяч. Все зависит от вашего приложения. Для этого проекта мы будем использовать около 5000 полигонов (или около 10 000 треугольников — подробнее об этом немного позже). Это вполне подходит для большинства движков визуализации режима реального времени.

## Начало моделирования грузовика

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

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

(Slightly Rounded Windshield and Hood – Слегка закругл ё нн ые лобовое стекло и капот)

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

Затем я добавлю к мешу модификатор «Разделение рёбер» (Edge split). Мы будем использовать в нём Угол разделения (split angle) 47 градусов или около того. Я хочу удостовериться, что все 45-градусные углы будут сглаженными, поэтому добавил пару дополнительных градусов, на случай какого-нибудь странного угла.

Важно заметить, что модификатор «Разделение рёбер» (Edge split) является временным. Поскольку модель будет экспортироваться, гладкое и плоское затенение будет определяться соответствующим игровым движком, который вы в конечном итоге будете использовать. Однако, он всё же полезен, поскольку может сразу показать нам, когда углы оказались слишком острыми (или не достаточно острыми), и мы сможем внести исправления по мере моделирования.

Раньше я упоминал, что мы не хотим использовать N-угольники. Однако иногда они у вас будут появляться случайно или по-привычке. В любой момент вы можете перейти в меню «Выделение» (Select) и выбрать «Выделить грани по количеству сторон» (Select Faces By Sides):

(У меня в версии 2.78 этот пункт находился в подменю «Select All by Trait» – прим. пер.)

Затем вы можете выбрать все грани с числом вершин/сторон больше четырех. Таким образом выделится каждый N-угольник, который, возможно, затесался в модель:

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

Далее, мы добавим две вещи.

Внутри меша мы добавим окружность, чтобы обозначить форму нашего колеса. Будьте осторожны с тем, сколько сторон вы используете для неё. Круглые объекты (круги, цилиндры, сферы и т. д.) печально известны потреблением полигонов. Мы будем использовать окружность с 24 сторонами.

Я также добавлю здесь Пустышку (Empty). Она позволит нам отслеживать исходную центральную точку этой окружности (если мы захотим позже добавить шину точно в этом месте).

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

Прежде чем двигаться дальше, я добавлю к модели модификатор «Отражение» (Mirror) и удалю её половину.

Затем добавим немного деталей к кузову грузовика:

Теперь я верну 3D-курсор в Пустышку и добавлю еще одну окружность. Я использую в точности тот же размер и положение, что и у предыдущей окружности, которую мы разрезали. Далее, я перемещу новую окружность назад, чтобы создать заднее колесо.

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

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

(Duplicate and Move – Продублировать и передвинуть)

Затем мы можем удалить грани, которые нам не нужны, и встроить эту колесную арку в меш кузова.

Во внутреннюю часть кузова я добавлю небольшие скосы.

| Замечание Иногда проще сначала удалить среднюю часть объекта, а затем просто выдавить рёбра обратно к центру, как только вы выполните скос.

Теперь мы можем сделать циклический разрез вокруг кольца граней, которые составляют колёсную арку. Мы можем использовать Alt+S, чтобы придать небольшую выпуклость крыльям. Тут, опять же, вам, вероятно, нужен только один разрез — не добавляйте слишком много геометрии в попытках заставить всё выглядеть более гладким.

## Manifold против non-manifold мешей

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

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

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

(Double Sided (Blender) – Двухсторонний (Блендер), Single Sided (Many Game Engines) – Односторонний (многие игровые движки))

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

| Замечание Просто чтобы прояснить, эта тема слабо связана с опцией С двух сторон (Double Sided) на вкладке Данные меша. Независимо от того, отмечена ли эта опция, Блендер всё равно будет отображать грань как спереди, так и сзади. При включении о пци и отображение материалов и текстур не будет зависеть от направления ваших нормалей.

(Not Applicable – Непригодн о)

Чтобы избавиться от проблем с задней стороной полигонов, лучшим решением будет заполнить геометрию, чтобы у нас не было открытых, или «non-manifold» мешей.

(В русском интерфейсе Блендера выражение «non-manifold» переведено как «неразвёртываемое». К сожалению, такой перевод ни разу не добавляет понятности данному термину, поэтому я оставлю здесь английское написание — прим. пер.)

Понятие non-manifold мешей по-началу может оказаться трудным для понимания. Хороший способ вникнуть в идею — спросить, может ли данный меш существовать в реальном мире.

(Non-Manifold, Manifold – оставлю без перевода, No Thickness or Depth – 2D only – Нет толщины или глубины — только двухмерное, Depth — Толщина)

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

## Добавление деталей

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

Это имеет тенденцию выглядеть немного неряшливо, и иногда может быть трудно понять, как меши сходятся вместе. Вам нужно будет решить, насколько важна эффективность экономии полигонов для вашего приложения. В данном случае я не считаю, что экономия двух полигонов того стоит. Окончательный грузовик будет состоять из около 5000 полигонов (как упоминалось ранее), поэтому мы говорим здесь о менее чем 1%-ном снижении эффективности (0.04%, фактически).

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

(732 грани, 1348 треугольников, 922 вершины)

Одна вещь, о которой мы еще не говорили — это треугольники. Мы говорили об использовании треугольных граней, но это приводит нас к более важному моменту. Реальность состоит в том (по крайней мере, для большинства 3D-программ), что каждый многоугольник фактически состоит из треугольников.

Четырёхугольники и N-угольники на самом деле не существуют во время рендера — они всего лишь инструмент моделирования для создания более эффективных наборов треугольников.

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

Почему это важно? В случае нашего грузовика, нет, на самом деле. Но в случае других игровых моделей число треугольников может оказаться значительным.

Предположим, вы строите модель для игрового движка, который допускает использование N-угольников. Вы можете добавить круг с 200 сторонами и заполнить его одной гранью:

(1 грань, 198 треугольников)

Конечно, отображается только один полигон, но вы используете 198 треугольников. Это означает, что сетка вашего меша не так уж и эффективна (или «низкополигональна»), как вы думали.

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

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

Затем я немного выдав лю окна. Это еще одно место, где мы могли бы реально сэкономить полигоны. Если бы мы не выдаливали окна, мы могли бы просто затекстурировать их позже. Однако, если мы сдела ем их таким образом, это не будет стоить нам очень большого числа полигонов, но зато мы с можем позже добавить «стеклянный» материал только к этим граням (вместо того, чтобы использовать текстурную карту для разделения разны х тип ов материалов). Таким образом, хотя это не самый эффективный способ с точки зрения количества полигонов, он более эффективен с точки зрения времени, которое вам понадобится затратить (и необходимого количества текстурных карт).

Как вы быстро обнаружите, если будете строить игровые модели, существуют плюсы и минусы во всём. Иногда вам просто нужно сделать выбор.

Далее, я добавлю несколько трубчатых стержней к кузову грузовика. Вы можете делать их как хотите, но я просто начал с объекта Тор и выдавил его часть (как мы это делали несколько раз раньше). Поскольку конец вашего тора будет вставляться внутрь грузовика и не будет виден, вы можете оставить эту деталь как non-manifold геометрию. Как вариант, вы можете создать N-угольник на конце, чтобы «закрыть» сетку. В данном случае я использую только шесть сторон на каждой секции трубки — они довольно узкие, и я думаю, что такой подход согласуется с остальной моделью. Опять же, вс ё круг лое потребляет грани очень быстро, поэтому постарайтесь обойтись наименьшим по-возможности количеством сторон.

Я также добав лю несколько дополнительных фар наше му грузовик у:

Затем я создам несколько кол ё с (в виде отдельн ого объект а):

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

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

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

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

Если вы решите использовать увеличенные (внедорожные) шины, вам может потребоваться вернуться и отрегулировать размер крыль ев, чтобы вс ё поместилось:

Следующее, что я сделаю, это выб еру грани, которые составляют область двери.

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

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

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

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

(Not Realistic – Не реалистично)

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

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

| Замечание Когда дело доходит до игровых моделей, речь идет не о том, как много деталей вы можете добавить, вопрос о том, сколько их вы можете себе позволить:

Очевидно, что дизайн этого грузовика довольно гибкий. Быстрый поиск в Интернете придаст достаточно вдохновения, и (как и для всех этих проектов) вы можете продвигаться в своем собственном направлении.

Вот как мой грузовик выглядит в итоге:

Окончательный счет на полигоны составил 5 348 граней или 9 946 треугольников. Это отлично подходит для большинства игровых движков. На самом деле, это действительно не очень много. Если у вас есть конкретное приложение, вы можете протестировать свою модель, чтобы убедиться, что она будет работать. Если всё получится, вы всегда сможете вернуться позже и добавить деталей.

## Итог

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