Генеральские полигоны: Построение моделей для Command & Conquer: Generals, часть первая
В прошлых номерах " Игромании " в цикле статей " Сам себе генерал " мы научились создавать карты для игры Command & Conquer: Generalsи даже объединять карты в целые сценарии. Можно сказать, мы почти научились делать настоящие игровые конверсии .
- Предварительные наброски
Но… Чтобы аддон или мод выглядел максимально непохоже на оригинальную игру, недостаточно перерисовать карты. Нужно полностью переделать юниты. Именно этим мы с вами сегодня и займемся. Главная проблема Оперативная память — пара пластинок с черными паучками микросхем.
Без нее компьютер — всего лишь жестяная коробка. Запущенные программы толкутся в очереди, стремясь получить положенную им толику этого жизненно важного для работы ресурса. Его всегда не хватает. И хуже всех приходится играм, ибо они — самые привередливые потребители оперативной памяти. Игровые 3D-объекты состоят из полигонов (многоугольников). Перед тем как появиться на экране в определенном месте и в определенном положении (фазе анимации), модели проходят цепочку различных преобразований. Положение вершин всех многоугольников должно быть вычислено и занесено в оперативную память. В зависимости от вида игры на экране одновременно может отображаться разное количество 3D-объектов. Отсюда — разные системные требования у разных игр, ограничения, которыми должны руководствоваться художники, создающие модели для игры. В Command & Conquer: Generals (далее — просто Generals ) каждая модель состоит в среднем из 350 полигонов. Для RTS это немало, ведь в боевых действиях одновременно может участвовать большое количество юнитов. Для сравнения: модель главного героя в The Elder Scrolls: Redguard (RPG, где внешний вид главного героя должен быть на уровне) содержала в себе 550 полигонов, а рядовых NPC — всего 350-380! Общее количество полигонов в модели — это не что иное, как детализация. Чем больше полигонов, тем точнее можно передать форму и тем больше добавить деталей. Движок Generals способен спокойно работать и с моделями в тысячу полигонов. Но! Представьте, что вы изготовили прекрасную модель, например, супертанка. Повышенная детализация потребовала от вас включить в модель огромное количество многоугольников. В игре танк выглядит прекрасно. Все счастливы… До того момента, пока на экране одновременно не появляются, скажем, 10 танков. Тут компьютерный “конь” самого последнего поколения вдруг начинает хрипеть, хромать и спотыкаться. В чем дело? А в том, что для движка игры одна модель вашего танка из 1000 полигонов равна по нагрузке трем стандартным моделям из 350! Следовательно, “железо” обрабатывает поток информации, равный тридцати одновременно отображаемым стандартным моделям. Низкополигональная игровая модель — это компромисс между желанием “сделать красиво” и способностью движка обработать заданное количество полигонов. Компромисс между скоростью и красотой.
- Вытягивания ребра заготовки
Генеральное планирование Еще до того, как вы начнете моделировать юнит для новой модификации, вы должны решить, какая роль будет отведена ему в игре. Если это широко используемая модель, например один из видов солдат, то полигонов на нее должно быть потрачено как можно меньше. Если же юнит штучный, особый, не используемый в массовом порядке, — то ему можно и удвоить количество полигонов. Следующим шагом должна быть разработка модели “на бумаге”. На этом этапе всегда полезно полистать литературу в поисках прототипов, продумать каждую деталь и набросать приблизительный вид юнита. Я решил построить модель самоходной дальнобойной гаубицы на базе универсального многомостового шасси, добавив к прототипу две мощные выдвигающиеся “лапы”, которые будут фиксировать агрегат при подготовке к стрельбе. Двигающиеся опоры в игре не обязательны, на эффективность орудия они никак не влияют. Однако у модели обязательно должна быть какая-то особенность, которая будет выделять ее из множества других. Иначе любой мод будет смотреться серо. __ Как видно из рисунка, в модели запланировано довольно большое количество деталей цилиндрической формы. Но любые круглые поверхности все равно будут задаваться треугольниками и прямоугольниками. Чем круглее должна казаться форма — тем больше граней должно быть в ней. И 350 полигонов для такой модели — явно маловато. Поскольку гаубица не предназначена для массового производства, то ставим себе задачу уложиться в 600-700 полигонов (но чем меньше, тем лучше) и переходим к воплощению задуманного.
- Передвинуты вершины - проблема решена
Выполнение заготовки Моделировать будем в 3D Max. Подойдут версии 4 , 4.2 или 5. Теоретически, создавать модель можно и в другом редакторе, но в данном случае приходится исходить из того, что конвертер моделей в игровой формат W3D пока написан только для Gmax — облегченной версии 3D Max (которую мы неоднократно выкладывали на нашем компакте). Существует множество способов, как обработать модель в 3D Max. Постараюсь выбирать самые простые и зрелищные. Предполагается, что вы знаете интерфейс 3D Max и умеете выполнять простейшие операции со стандартными геометрическими примитивами, из которых я собираюсь складывать заготовку.
- Ребра передвинуты, и заготовка повторяет конфигурацию плана
Только получив общие формы модели, удастся подсчитать количество потраченных полигонов и узнать, сколько осталось для детализации. Имея некоторый опыт, можно выполнить предварительный подсчет еще на этапе “бумажного” проектирования. Вначале делаем только половинку заготовки. На завершающем этапе моделирования половинку модели достаточно будет зеркально отобразить — получится целый юнит. Работу над юнитом начнем с кабины. Последовательно выполним следующие действия. 1. Строим примитив Box ( Параллелепипед ), нажав одноименную кнопку в панели управления при выбранной вкладке Standard Primitives , и задаем начальное количество сегментов для сторон параллелепипеда — 4/2/4 (соответственно — длина, ширина и высота). Необходимое количество сегментов для разных частей модели определяется формой примитива и предполагаемыми преобразованиями. 2. Превращаем полученный объект в редактируемую сетку, щелкнув по пиктограмме сетки правой кнопкой мыши (далее — п.к.м. ) и выбрав из всплывающего меню пункты Convert to/Editable Mesh.
- Полученная заготовка кузова рядом с кабиной
3. Удаляем из примитива верхний сектор, оставляя внизу выступающий участок для будущего капота, для чего переходим в режим редактирования подобъектов. В этом режиме нажимаем на панели управления вкладку Modify , раскрываем список Editable Mesh , выбираем подобъект Edge и выделяем/удаляем на модели ненужные ребра. 4. У прототипа кабины в верхней части, на месте удаленного сектора, образовалась дыра. “Зашиваем” ее, для чего опять переходим в режим подобъекта — Edge , выделяем ребро, находящееся на краю “дыры”, щелкаем по кнопке Extrude , подводим курсор к ребру и, когда он примет форму прямоугольника, двигаем ребро внутрь “дыры”. __ Выполняя операцию Extrude , очень удобно включить режим отображения Facets+Highlights (щелкнув п.к.м. на названии видового окна, например Perspective , и выбрав одноименный пункт из всплывающего меню). Тогда процесс вытягивания ребра будет видимым, и вы сможете точно позиционировать его. Иногда не так просто точно задать новое положение ребра
- Конвертация в Editable Mesh
. В этом случае лучше воспользоваться прямыми измерениями инструментом Tape ( Рулетка ) из вкладки Helpers панели управления. Измерив точно расстояние, вносим его в поле данных для Extrude. Если вдруг вы вытянули рулетку в противоположную сторону, то просто поставьте перед значением в поле Extrude знак минус. Когда измерения закончены, передвигаем ребра таким образом, чтобы заготовка была похожа на кабину гаубицы. Для этого выделяем все ребра одного ряда и передвигаем их в нужном направлении. __ Теперь сделаем скошенные углы на кабине.
- Заготовка кабины в первом приближении
Обрабатываем верхнюю часть кабины. Чтобы сделать скос крыши, выделяем ребра на одной из сторон (например, два верхних на лицевой стороне) и двигаем их вниз, до сопоставления с ребрами нижнего ряда. Обратите внимание: ребра, перпендикулярные тем, за которые вы тянете, и находящиеся с ними на одном уровне, перемещаться не будут. В результате возникнут искажения модели, форма будет не совсем той, какую хотелось получить. Проблема решается следующим образом. Переходите в режим редактирования вершин — Vertex , выделяйте вершины “перпендикулярных” ребер и двигайте их вниз, к передвинутым ранее ребрам. __ Действуя таким образом, вы довольно быстро получите кабину нужной формы. **Переходим к изготовлению кузова. Он будет состоять из двух отдельных элементов, очень похожих друг на друга. Для начала определимся, на сколько сегментов должен быть разбит базовый примитив Box. Исходя из предварительного расчета, нужно 2 сектора на торцовые стороны, 2 на переднюю/заднюю часть и 1 на верх/низ. Формировать кузов можно в новом файле, но лучше продолжить моделирование в файле с кабиной. Это позволит визуально контролировать результаты и вносить коррективы, если кузов с кабиной будут смотреться не так, как на предварительных рисунках. Выбираем стандартный примитив Box (панель управления, Standard Primitives ) и в соответствующие поля вносим количество сегментов, на которые будет разбит примитив при построении: Length Segs = 2, Width Segs = 1, Height Segs = 2. Щелкаем мышкой на видовом поле Perspective и, перемещая курсор, строим сначала основание параллелепипеда, а затем вытягиваем его в высоту. Конвертируем заготовку в Editable Mesh и устанавливаем режим работы с ребрами — Edge. ** Перемещая ребра и двигая вершины так же, как мы делали при построении кабины, получаем нужную форму.
**_
_- Часть кузова готова__* * *** Первый этап моделирования — создание базовой модели юнита — закончен. Во второй части статьи, которая будет опубликована в одном из ближайших номеров "Игромании ", мы продолжим создание модели гаубицы. Доработаем каркас, прорисуем детали и оптимизируем число полигонов в модели так, чтобы движок игры с легкостью обрабатывал около десятка гаубиц на экране.