3Ds Max: Создание модели Самолета Су-25(Low Poly)
В этом уроке я попытался максимально раскрыть основные методы и способы скоростной разработки низкополигональных игровых моделей на примере Су-25 Вместо вступления Сейчас достаточно активно развивается игровая индустрия и требуется большое количество грамотных (хотя бы умеющих писать :D) low-poly моделеров, а уроков по этой области трёхмерной реальности явно не хватает для обучения подрастающего поколения. В этом уроке я попытался максимально раскрыть основные методы и способы скоростной разработки низкополигональных игровых моделей. Начиная от поиска материалов по оригиналам и заканчивая страшным (для многих) созданием текстур в графических редакторах. Так как большого опыта в написании уроков у меня ещё пока нет, то этот материал может показаться кому-то слишком подробным, а кому-то, наоборот, слишком сжатым. Но я надеюсь, что с помощью ваших отзывов о нём следующие пособия у меня получатся лучше. Итак, поехали! Маленькое отступление от темы: Представьте себе такую ситуацию: вы мирно сидите в студии за своим 19” (17”, 15”, 14”) монитором и мирно мочите козлов (зомби, роботов, спецназ) в сортире (DOOM3, Half-Life2, Hit man3). Ну и что, если в рабочее время - вы же мир, в конце концов, спасаете. Тут к вам вламывается начальник (руководитель проекта) и начинает сыпать экономическими терминами, заканчивающимися на «й», «ля», «дец» и прочими. Из всего этого 5-ти (10-ти, 20-ти) минутного потока информации вы понимаете, что если вы в ближайшие 4 часа не сделаете ему модель Су-25 с текстурой 256x256 и не более чем 1000 полигонами, максимального реализма, то у него (и соответственно у вас) будут большие неприятности. После этой триады начальник удаляется. Теперь наступает самое сложное: закончить с играми. Следует сделать жуткое усилие над собой и нажать «yes» в этом диалоге. Более подробно ознакомиться с тем, как пересилить себя, можно прочитав научные труды некоторых академиков РАМН по психологии. Подготовка к моделированию. Для начала необходимо достать информацию по оригиналу для моделирования. Благо, что военных и околовоенных сайтов в нашем отечественном RUнете более, чем достаточно. Уверен, что ни у кого из вас проблем с этим не возникнет. Лично я быстренько нашёл примерно такой вариант. Далее требуется выполнение более сложной задачи: найти скетчи для моделирования. В случае авиации можно посоветовать сайт «WingsPallete». Там же можно обнаружить и схемы окраски.
Если же требуется смоделить танк или что-либо подобное, то скетчи придётся рисовать самостоятельно. Но не будем отвлекаться. Моделирование базиса. Для начала надо создать самый обыкновенный Box, пропорциями примерно похожий на проекции оригинала. В нашем случае: длина: 46.1, ширина: 47.2, высота 20.0. Назвать получившийся базис лучше незамысловато, например: «studio». Необходимо удалить не используемые грани и перевернуть нормали. Всё это делается с помощью модификатора Edit Mesh. Далее, соответственно, выделение ненужных граней, нажатие на святую клавишу Delete, для нужных граней - Flip Normal. Далее надо применить к нашей заготовке материал скаченного (или нарисованного) скетча. По хорошему нужно было бы нарезать изображение с использованием “ImageReady” или “FireWorks”, но напомню, что у нас очень (!) ограниченно время, потому применим более быстрый, хоть и менее понятный способ: 1. выделяем грань, соответствующую проекции (например, вертикальной). 2. с помощью модификатора UVW Mapping накладываем Planar тип автомаппинга. Далее используем Gizmo для подгона текстуры по месту и размеру. 3. запоминаем (а лучше - записываем!) длину и ширину нашей карты. 4. применяем EditMesh или Mesh Select для выделения отдельно следующей грани. 5. далее - очередной модификатор UVW Mapping, опять Planar-тип, но на этот раз длину и ширину карты вводим из первого случая. (Это позволит не ошибиться с масштабом по осям). Gizmo быстренько подгоняем по месту (но не по размеру). 6. повторяем п. 4-5 для всех оставшихся проекций. 7. снимаем выделение - это не обязательно, но несколько успокаивает нервы.
Моделирование фюзеляжа. Краткая справка: «Фюзеляж - корпус летательного аппарата» (Толковый словарь русского языка под редакцией Ожегова). Немного изучим, что же из себя представляет этот самолёт. Су-25 (как и все остальные, известные мне летательные аппараты) имеет двухстороннюю симметрию. Ежу понятно, что моделить надо только половину, оставшуюся часть легко отражаем с Mirror. Хорошо видно, что самолёт немного сплющен со сторон, имеет почти отделённые от основной части двигатели, небольшую стреловидность крыла, и очень неприятную для моделирования антенну в задней части. Здесь меня, как и любого нормального человека, волнует два вопроса: «когда подлые янки уберутся из Ирака?» и «с чего начинать моделирование?». Крылья, лапы... главное - хвост! Приступаем. Перейдём на боковой вид и создадим простенький сплайн: начальная точка совпадает с задней кромкой крыла, вторая - передняя кромка, и в заключение - замкнуть (close) сплайн. Выделяем вторую точку и преобразуем её тип с «Corner» на «Bezier» и получаем некоторый контур, который надо отрегулировать по высоте. Изменим настройки сплайна: нас интересует значение опции Interpolation steps. Её следует выставить равной 3 или 4 (надо не забывать об ограничениях на количество полигонов в задании).
Далее, очевидно, выдавливание с использованием стандартного Extrude (в настройках: segments (количество сегментов) следует установить на 1, а в разделе capping снять флаги установки начальных и конечных граней (Cap Start и Cap End)). Потом применим FFD2x2x2 и подгоним наше «крыло» под изображение проекции.
Совершенно аналогично делаем хвостовое оперение и киль. Можно даже применить уже готовый объект крыла и его модифицировать с помощью того же FDD. Но хвост должен точно совпадать с осью симметрии и быть симметричным относительно неё - это важно! Теперь приступим к двигателям. Тут уж начинается полный произвол: можно моделировать и из какого-нибудь примитива и путём задания отдельных точек и применить свои феноменальные (или в моём случае - не очень) познания в полигональном или сплайновом моделировании. Я выбрал третий вариант. Во фронтальной проекции создаём некое подобие переднего воздухозаборника, используя Editable Mesh. После чего выбираем боковые грани и оттаскиваем их назад с зажатым shift'ом. При этом несколько корректируем масштаб для создания образа нашей турбины. Делаем 3-4 сегмента на всю длину двигателя. Используем Cap Holes для закрытия задней стенки. Выберем переднюю и заднюю стенки и с помощью инструмента Extrude вдавим полигоны вовнутрь. Но тут необходимо проверить, выбрано ли в группе Normal пункт local. В противном случае (Group) может получиться любая гадость, но только не то, что вы хотите. Можно довести до лёгкого блеска модель, побаловавшись немного с инструментом Chamfer. Но не будем забывать, что у нас не так много времени. Дабы окончательно разобраться с крыльями необходимо смоделить блоки на концах несущих поверхностей. Очевидно, что там расположены посадочные воздушные тормоза, блоки РЭБ (радиоэлектронной борьбы) и, наверное ещё что-то - я не слишком большой специалист в вопросах военной авиации. Но для чего бы эти «коробки» не предназначались, большой проблемы в их моделировании я не вижу. Создаём очередной «Box» на виде сверху. Количество сегментов по ширине - 3. Выбираем все передние вершины и нажимаем Collapse. Попарно коллапсируем и задние вершины. Далее просто подгоняем размеры под требуемые по оригиналу. Получиться должно примерно следующее: С крыльями закончено, надо приниматься за следующие элементы. Корпус Корпус, несмотря на внешнюю сложность, моделируется довольно просто. Сначала создаём сплайн, по контурам похожий на наш самолёт. Преобразуем этот сплайн к Editable Mesh, выделяем образовавшийся полигон и выдавливаем с помощью Extrude. (Можно просто применить к сплайну модификатор Extrude, но тогда надо удалить заднюю грань - какой способ выбрать - ваша воля). Подгоняем вершины к требуемому контуру и ещё раз выдавливаем полигон. Опять исправляем местоположение вершин. И применяем модификатор Optimize с небольшими значениями Face Trash и Edge Trash (у меня были 1.5 и 1 соответственно).Получившийся образ можно ещё достаточно долго оптимизировать, доводя до совершенства - на любителя.Лично я удалил несколько вершин, которые находятся в месте контакта с двигателем - чтобы не мозолили глаза. Практически основная часть моделирования закончена. Что ж, неплохо. Даже в крайнем случае, уже не четвертуют за невыполнение заказа. Это радует. Но повесить всё ещё могут… Это огорчает… Моделирование шасси и внешних блоков. Моделирование шасси проверено, что называется, веками. «Тут думать вредно», как говорил один очень-очень умный отечественный математик. Действуем по хорошо изученной и обкатанной схеме: 1. создаёмцилиндрспараметрами: radius: 1.4; height: 1.25; height segments: 1; cap segments: 1; sides: 8; 2. выделяем боковые рёбра на обоих «крышках» и применяем инструмент Chamfer с аргументом 0.2 3. применяем к полученной болванке UVW Mapping с типом маппинга: Cylindrical. Надо поставить флажок Cap. Размер Макс должен подставить правильно. Если же нет - следует нажать на кнопку Fit. Замечаем на переднем шасси очень своеобразный грязеотбойник (полезная, блин, вещь) - надо бы заделать! Что ж, легко и со вкусом делаем и его. Для этого на переднем шасси выделяем 3/8 окружности и с зажатым Shift'ом масштабитруем. После чего немного поворачиваем. Не забываем и к нему применить всё тот же Planar-тип маппинга. Есть одна очень мудрая мысль - шасси, как и любой другой цилиндрический объект, обладает очень большим количеством полигонов. Это можно использовать при окончательной доводке модели для погона количества полигонов под заказ. Теперь надо разобраться со стойками шасси. В данном случае я предлагаю делать их с помощью сплайнов. Создаёте сплайн, очертаниями похожий на стойку и во вкладке Rendering ставите флажки напротив параметров Rendering и Display Render Mesh. Параметры Thickness и sides установите соответственно равными 0.5 и 4. Следите за тем, чтобы все вершины были типа Corner, иначе количество полигонов превысит требуемые. Для лишней оптимизации удалите начальные и конечные «крышки» на образовавшихся цилиндрах. К сплайнам лучше сразу применить Planar-тип маппинга, чтобы потом не обращать на них внимания. Вот собственно и всё со стойками. Надо дополнить стойки крышками ниш шасси. Тут лучше использовать полигональное моделирование. После создания одной стороны примените модификатор Shell, потом по желанию можно редактировать это на уровне Editable Mesh. Это один из самых простых шагов в создании модели. Самое важное с практической точки зрения - пилоны для размещения вооружения (у нас же боевой самолёт, а не гражданский лайнер). Моделируются они до боли элементарно - создаёте прямоугольный сплайн, режете переднюю грань и образовавшуюся точку вытаскиваете вперёд. Потом выдавливаете сплайн с помощью Extrude, с помощью FDD2x2x2 немного увеличиваете по горизонтали. Теперь накладываем Planar-координаты и копируем образовавшийся пилон (так, чтобы было по 10 пилонов на каждом крыле). Ну, если с передней и верхней антеннами никаких вопросов не возникает вообще - элементарные плоскости (plane), то с задней придётся попотеть. Неоднозначная геометрия и сделать её с помощью каких-либо примитивов или имитационных уловок не получается (по крайней мере у меня). Пришлось моделить по-старинке, задавая координаты вершин и соединяя их полигонами от руки. Благо, что деталь не очень большая и задать 15 вершин можно достаточно быстро. Ничего полезного для новичков в моделировании этой детали я, увы, сказать не могу и описывать процесс не буду. Выглядеть она должна примерно так: Если требуется модель, в которой возможны фактические ошибки, то эту антенну можно либо совсем не моделировать, либо заменить обыкновенным цилиндром, с некоторым утолщением в центре. Соединение. Доводка геометрии. Соединять полученные части можно различными способами. Неплохой результат получается при применении плагина PowerBoolean, но у него постоянно возникают внутренние проблемы и такая капризность слишком мешает работе. В случае Hi-Res моделей без него никак не обойтись, а в нашей ситуации соединить можно и ручками - надо обработать пару десятков вершин, что, согласитесь, не очень много. Описывать номера вершин, которые надо соединить и полигонов, которые необходимо удалить, я не буду - это требуется видеть воочию - у вас количество полигонов может отличаться от моих на несколько десятков - работа-то творческая. Не думаю, что здесь у кого-нибудь возникнут какие-либо проблемы. Дам лишь один совет: так как это low-poly игровая модель, то не стремитесь соединять абсолютно все части воедино, так чтобы образовывался единый Element в Editable Mesh - это лишь навредит. Пусть киль хвоста свободно входит в мешь фюзеляжа и т.д. Если вы всё сделали правильно должно получиться что-то вроде этого: А теперь, как и договаривались, нажимаем святую кнопочку . И у нас получается вполне сносный фюзеляж советского штурмовика. Если вы в экстазе работы присоединили к меши фюзеляжа так же пилоны, шасси и прочее, прочее, прочее - то вы явно поторопились. Впереди нас ожидает маппинг, а элементы, на которых мы уже нанесли текстурные координаты будут только мешать. Итоговая геометрия должна выглядеть примерно так: Маппинг Маппить предлагаю в автоматическом режиме - зря что-ли программисты старались? Не буду спорить с теми, кто скажет: «надо применять метод Flatten mapping - тогда потери на пикселизацию текстур при игровом рендере будут минимальны». Абсолютно точно - алгоритм идеально размещает все блоки, и текстура получается просто супер, но через двое суток работы. Я предлагаю использовать Normal mapping и, более конкретно Box mapping. ВРЕМЯ-то у нас ограниченно и пусть тот, кто считает, что сделать текстуру по такой вот развертке:
пусть первым кинет в меня камень. Если я Вас убедил, то жмите вот что: 1. Выбираете Unwrap UVW 2. Выделяете все грани (традицонно - Ctrl+A) 3. Жмёте кнопку Edit… (во вкладке Parameters) 4. И далее - следуете вот каким инструкциям:
И будет вам счастье! Но счастье было бы не полным без водки «Эталон», тьфу, без конфет «Россия»… У Вас после выполнения алгоритма окажется 6 проекционных региона (по сторонам куба: сверху, снизу, слева, справа, спереди и сзади). Их необходимо максимально возможно расширить, чтобы они занимали максимальное пространство. Очередной совет - не увлекайтесь поворотами - рисовать текстуру, повёрнутую на 28 градусов чрезвычайно сложно. Не забывайте, что у нас имеются так же шасси и пилоны, которые тоже надо разместить на этой текстуре - но их можно воткнуть в любое место, главное всё же - фюзеляж. Если с фюзеляжем законченно, то теперь к образовавшемуся объекту присоединяем шасси, пилоны и т.д. Теперь возникает небольшой геморрой: надо растащить текстурные координаты от шасси и пилонов от текстурных координат фюзеляжа. Совет - выделение граней на объекте приводит к выделению соответствующих граней на UV плоскости - это можно использовать. После этой нехитрой операции у вас должно получиться примерно следующее: Ну, с МАКСом мы практически закончили. Но закрывать его пока рано. Создание текстуры. Теперь запускаем старый добрый Photoshop или любой другой профессиональный(!) графический редактор (в MSPaintхорошую текстуру, к сожалению, не сделаешь). Описывать последовательность действий я буду для Photoshop, но эту последовательность, скорее всего, вы легко переложите на свой любимый растровый редактор - они почти все похожи. Вообще обычно создаётся текстура размера большего, чем требуется в задании - после масштабирования она получается лучше «оригинально-размерной», но у нас мало времени и мы будем работать «без прикрытия». Приступаем. В МАКСе открываем редактор UV координат. Чтобы было проще, убираем сетку - снимаем флаг Unwrap Options >> Show grid. Копируем экран в буфер обмена через всем, я надеюсь, знакомый PrintScreen. Вставляем изображение в Photoshop и выделяем нужную нам часть с помощью RectangularMarquee Tool (стандартный Шоповский выделитель). Совет - чтобы не мучаться, можно поставить в опциях Type: Fixed Aspect Ratio, и выставить одинаковые параметры ширины и высоты Образовавшееся выделение мы вырезаем и вставляем в новый документ. Далее изменяем размер изображения Image >> Image Size… на нужные нам 256х256. Теперь быстро нарезаем схему окраски. Выбираем полигональное выделение. И выделяя проекции, имеющиеся на схеме окраски, копируем их на нашу текстуру. А далее применяя Edit >> Free Transform подгоняем результат под проекции. Совет - на время разработки текстуры не экономьте на слоях. Они серьёзно облегчают жизнь разработчику, а на итоговом результате никак негативно не отражаются. Вполне допустимо отразить боковую проекцию фюзеляжа, если дана только одна из них. Но тут необходимо отметить: если есть какие-то надписи, рисунки (особенно они применялись в Первую - Вторую Мировые войны) или любые другие несимметричные элементы, то их надо переписать. В нашем случае такими свойствами обладает бортовой номер. Но благодаря размерам текстуры он слишком незначителен в абсолютной величине. Можно его и пропустить. Хотя… А теперь важно: требуется, чтобы окраска перетекала с одной области развёртки на другую практически без перехода. Это придётся делать вручную. Неприятно, но такова судьба. Выбираем какую-нибудь кисточку, увеличиваем прозрачность слоёв, на которых будем рисовать (чтобы была видна развёртка), и начинаем. Этот участок работы довольно скучный и неприятный, но при небольшом опыте проходит очень быстро. Если вы ничего не забыли, то незакрытыми у нас остаются теперь только фронтальная, задняя проекции, стойки и пилоны. Их придётся создавать заново. Проекции турбин мы, естественно, заливаем радикально чёрным цветом («Титаник», контрабандный товар! Прямо с Малой Арнаульской!). Оставшиеся проекционные части мы зарисовываем какой-нибудь кисточкой с подходящим цветом. Элементы маленькие и переход можно не учитывать. Со стойками пилонов всё даже проще. Так как это гидроподъемники и опорные металлические штанги, то сначала их заливаем серым цветом (с небольшой примесью синего - параметр blue в селекторе цвета должен лишь на 5-10 единиц превосходить red и green). А потом выбираем белый и в местах, где должны находиться хромированные штанги гидроподъемников, закрашиваем им. Вообще хорошо бы имитировать отражение, но размер текстуры не позволяет нам такой роскоши. Теперь делаем хитрейший финт ушами (надеюсь, все уже научились) и выбираем инструмент: Будем копировать части уже имеющегося изображения. Получиться не совсем безгрешно с точки зрения истины, но довольно фотореалистично. Это нас вполне устраивает. Копировать лучше со схемы окраски - она больше по размеру, а в создании текстур очень важно, чтобы не было мелких часто повторяющихся объектов. При создании окраски нижней части штурмовика и пилонов можно особо не усердствовать - Там будет размещаться вооружение, которое скроет недостатки, даже если они будут. Текстура практически готова. Теперь склеиваем слои, заливаем свободное поле белым (или любым другим) цветом и сохраняем текстуру в удобном для вас формате. Текстура - это рабочая документация, поэтому можно не особо заморачиваться, чтобы она сама по себе выглядела красиво. Главное, чтобы модель с ней смотрелась хорошо. Запускаем МАКС (если вы его уже закрыли) и применяем к модели полученную текстуру. Нам важно знать, нет ли белых, необтекстуренных участков на модели или других артефактов. Если они есть, то текстуру надо подкорректировать - либо уже описанным Clone Stamp Tool, либо кисточкой, либо SmudgeTool. Теоретически их быть не должно - текстуру мы делали на основе развертки. Если текстура готова, то можно Вас поздравить. У меня в итоге получилось следующее: Вместо заключения. Если у Вас что-либо не получилось, или вы хотите посмотреть на мой вариант, то, пожалуйста, вот файлы, использованные и получившиеся, в проекте: 1. модель су-25 в формате *.max версии 6.0 - Rar архив (32.9 Kb) 4. модель Су-25 в формате *.3ds (если МАКС боле ранней версии, чем у меня) - Rar архив (15 Kb) Если у вас возникли какие-либо вопросы, недопонимания, возражения или вы просто хотите послать меня куда подальше - мой e-mail к вашим услугам. Выражаю особую благодарность за посильную помощь при подготовке этого урока следующим камрадам: olyfklur, SmasH, beton, Gennadiy. А так же огромное спасибо за моральную поддержку всему 3D сообществу России.
Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=4902 |