02 августа 2005
Обновлено 17.05.2023

Моделлинг в Half-Life 2, ч. 2. XSI Mod Tool: наложение текстур и анимация

Моделлинг в Half-Life 2, ч. 2. XSI Mod Tool: наложение текстур и анимация - изображение обложка

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

Процесс текстурирования интереснее всех остальных этапов моделирования. Именно на этой стадии модель обретает узнаваемые очертания и становится красивой. Если сама модель — не шедевр, то хорошо наложенная качественная текстура может спасти дело. А вот если текстура некачественная, швы плохо подогнаны, то никакая motion-capture анимация вкупе с миллионами полигонов не заставит игрока любоваться моделькой. Я говорю все это потому, что сегодня речь как раз пойдет о том, как накладывать текстуру качественно.

Никита Кожемяка

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

Существует два основных способа создания текстур. Первый — самый сложный по реализации, но простой на первый взгляд — “цифровой фотомонтаж”. Для создания текстуры вы берете цифровой фотоаппарат и идете фотографировать предмет моделирования, если, конечно, существует его аналог в реальной жизни.

После этого за дело берется Photoshop и приводит в порядок то, что мы нафотографировали. По-научному это называется “устранение дефектов аппроксимации”. Аппроксимация — это часто встречающийся в математике (и не только в ней) термин, означающий некое подобие “округления до целого”. Но в нашем случае это означает упрощение круга до многоугольника.

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

Самое неприятное в наложении текстуры — подгонка по швам. Спроецированные на разные плоскости различные части текстуры могут неправильно стыковаться с другими частями текстуры, наложенными на соседние плоскости. Вот их выравнивание и подгонка — это и есть самое сложное в данном подходе текстурирования.

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

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

Накладываем текстуру

Прежде чем начать текстурирование, нужно подготовить текстуры и присоединить их к нужным кускам модели. Выберите объект (модель или участок модели), на который вы хотите наложить текстуру. После этого жмите кнопку Render в верхней панели и Get/Texture , на открывшейся панели выберите Image. Откроется окно редактирования свойств материала.

На панели Image есть кнопка New. Нажмите ее, затем New From File. Выберите интересующую вас текстуру (пока в формате tga ). Заметьте, что после нажатия какой-нибудь важной кнопки результат в окнах просмотра виден сразу же, без задержек. После того как вы выбрали текстуру, она должна сразу же лечь на объект.

Теперь на панели Texture Projection нужно установить способ проекции текстуры на объект. Проекций существует великое множество. Есть простые виды наложения текстур, например плоские, которые как бы “накрывают” модель одеялом из текстуры в нужной плоскости. Есть проекции посложнее, например кубическая и цилиндрическая. Первая подгоняет углы текстуры в углы каждого прямоугольного полигона, вторая “заворачивает” модель в текстуру, как в кулек из бумаги.

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

На панели Texture Projection жмите New и там — Planar XZ. Непринципиально, какую проекцию вы выберете сейчас, но с плоскими работать значительно легче.

Курсы кройки и шитья

Теперь необходимо расположить части модели на текстуре так, чтобы не осталось ни одной плохо спроецированной плоскости.

Редактор XSI отличается от 3D Studio еще и тем, что все необходимые окна редактирования грузятся внутрь окон просмотра. Поэтому вам нужно выбрать ненужную проекцию, например вид сбоку или спереди, и там щелкнуть на его названии — в моем случае ненужным оказалось окно с надписью Front. Щелкнуть необходимо по розовой кнопочке с названием Front и в открывшемся списке выбрать пункт Texture Editor. Откроется окно с кучей кнопок и проекцией модели на текстуру, как показано на рисунке.

Самыми ценными для нас являются кнопки View и Select , в меню которых, в свою очередь, нас будут интересовать Show Selected ( Shift+H ), Show All ( Ctrl+Shift+H ), которые позволяют отображать только выбранные точки либо показать их все.

В меню Select нам нужен всего один пункт — Deselect All ( Ctrl+Shift+A ). Перемещение по окну дозволяется лишь после нажатия кнопки Z , при этом средняя кнопка мыши (или прокрутка) приближает картинку, правая кнопка удаляет, а зажав левую, можно перетаскивать изображение. Выбор точек производится при нажатии левой кнопки, причем удерживать Shift не нужно. Точки сами будут добавляться к ранее выбранным. Для того чтобы исключить точки из списка выбранных, нужно обвести их курсором, зажав среднюю кнопку (или кольцо прокрутки).

Удостоверьтесь в том, что в меню Select , напротив пункта Auto Sync Selection , стоит галочка. Этот пункт отвечает за синхронизацию выбора во всех окнах. Если там не будет галочки, то точки, выбранные вами в одних окнах, не будут отображаться в других.

В окне вида сверху выберите точки, относящиеся к самой крайней стенке плиты (на виде сверху они будут нижними). Установите Show Selected и затем щелкните по кнопке Planar Subprojection ( Ctrl+Shift+P ). В открывшемся меню выберите пункт XY World Aligned. Проекция стенки на текстуру станет выглядеть более приятно. При помощи инструментов перемещения, вращения и масштабирования ( V , C и X соответственно) переместите проекцию туда, куда вам нужно. После этого нажмите Deselect All , потом Show All. Выберите точки другой стенки и проделайте с ними те же операции. Выбирать можно также и полигоны, если нажать на кнопку Select Polygon Tool (клавиша U ).

Когда вы завершите распределение полигонов модели по текстуре, результат должен получиться примерно такой, как на рисунке. После этого вам следует в окне Texture Editor в меню Edit нажать кнопку Freeze , чтобы исчезли подпроекции, а модель приняла развертку как основную. Не забывайте нажимать на эту кнопку, иначе все ваши труды исчезнут, как только вы выберете другой объект или просто нажмете на пробел.

Движение — жизнь

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

Как только справитесь, перейдите в режим анимации. Чтобы сделать это, нужно на левой панели внизу, где написано Construction Mode , выбрать пункт Animation. Теперь обратите внимание на самый верхний край левой панели. Там есть заголовок Model. Щелкните по нему и в появившемся списке выберите пункт Animation. Заголовки всех элементов окрасятся в зеленый цвет. Этим мы обеспечили быстрый и удобный способ доступа ко всем основным функциям, нужным для создания скелета и анимации. Еще более быстрый способ — через горячие клавиши. Как правило, они подписаны рядом с названием функции, так что с их поиском у вас проблем не возникнет.

Создание скелета

Можно браться за создание скелета. Сначала нажмите Skeleton/2D Chain и нарисуйте три первых сустава. Начните рисовать на виде сбоку — это облегчит центровку скелета позже. Первый сустав должен встать в центр электродвигателя, второй — чуть ниже, а третий — на ось вентилятора. Порядок расстановки суставов имеет очень большое значение — от этого зависит, какой сустав будет родительским по отношению к другому (то есть какой сустав будет перемещаться вместе с другим, скрепленным с ним костью). Суставы, которые перемещают все остальные суставы цепи, называются корневыми.

Создайте еще пару цепей, суставов там будет тоже по три. Первый из них должен находиться по возможности ближе к корневому суставу самой первой цепи. Второй — в центре вращения воздушных заслонок, а третий, чтобы выровнять второй, пусть находится с ним на одной линии, сверху. Теперь скопируйте и отразите вторую цепь, чтобы результат получился, как на рисунке.

Если вы где-то ошиблись в постановке сустава, то используйте систему навигации и перемещения, вызываемую при нажатии Skeleton и кнопки Move joint/Branch.

Когда закончите располагать кости в пространстве так, как это показано на рисунке, можно приступать к их иерархии. Одни цепи могут быть поставлены в соответствие другим цепям так, чтобы при их перемещении перемещались и соответствующие им цепи. Для этого служит кнопка Parent на правой панели. Она назначает “родительской” выбранную вами кость по отношению к той, что будет выбрана после (вторая будет названа дочерней и станет перемещаться вместе с родительской). Можно перемещать ее и отдельно от родительской, но тогда нужно будет выбрать только ее.

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

Анимация

Теперь все готово к созданию анимации. Для начала заставим крутиться пропеллер. Это легко. Внизу, под экраном, есть полоска. На ней красненький курсор. Это линия времени. А курсор на ней показывает момент времени анимации. Разверните пропеллер и перенесите курсор на первый кадр. Теперь нажмите кнопку К. После этого переместите курсор дальше, поверните пропеллер еще и снова нажмите клавишу К.

Верните курсор назад. Видите? Пропеллер перемещается. Можете также нажать клавишу Play Back внизу. Тогда вы увидите, как все выглядит в движении.

Сделайте так, чтобы на промежутке в 20 кадров пропеллер сделал полный оборот вокруг оси.

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

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

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

Копировать и вставлять кадры (состояние всех или выбранных костей) необходимо через меню Copy Animation и Paste Animation , доступное по кнопке Animation внизу, под полосой линии времени. Ключи можно добавлять, убирать и редактировать также через меню Keys в том же окне редактирования анимации.

Анатомические будни

Скелет мы с вами создали, но кое-чего по-прежнему не хватает. Дело в том, что принцип действия скелетной анимации слегка позаимствован у анатомии. Если кратко, то, как и в жизни (к максимально точному ее моделированию стремятся все игры), главным формообразующим элементом тела живого существа является его скелет. Он имеет свои особенности типа степеней свободы суставов и конечностей, максимального угла поворота и ряд других.

На скелете растет мясо. Оно-то как раз и образует знакомый нам внешний вид живых объектов. Но скелетная анимация позволяет моделировать движения не только живых объектов со скелетом, но и механических, и даже мягких, которые не имеют в себе жесткой основы (плавающий по поверхности воды матрац из альфа-версии Half-Life 2 — яркое тому подтверждение).

Займемся наращиванием мяса на скелет. Чтобы это сделать, нам нужно выбрать элемент модели (целый, вроде кубика или группы объектов) и нажать кнопку Envelope в разделе Deform на левой панели. Там выбрать пункт Set Envelope.

После этого курсор мыши несколько изменится и рядом с ним появится надпись Pick. Теперь можно выбрать оставшиеся элементы системы “кость-мясо”. Необходимо сначала выбрать воздушную заслонку, затем проделать вышеописанную операцию и после этого, зажав Ctrl , выбрать находящуюся рядом кость и присоединенный к ней сверху сустав (отображаемый крестиком).

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

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

Очередь за плитой. Давайте немного поэкспериментируем. Функция Set Envelope — автоматическая. То есть, когда выбрано много костей, она сама распределяет их между вершинами объекта. Это очень удобно при моделировании объектов со сложным скелетом или гуманоидов. Вам не нужно вручную сопоставлять каждую точку — за вас все сделает функция. Давайте посмотрим, что к чему она прикрепит.

Выберите один из объектов, войдите в режим Set Envelope и выберите остальные неприкрепленные объекты и три оставшиеся кости. Нажмите правую кнопку и закройте появившееся окно.

Проверить результаты присваивания костей элементам модели я оставлю вам в качестве домашнего задания — там довольно хитрый, но интуитивно понятный алгоритм. Когда наиграетесь — присвойте какой-нибудь одной из оставшихся костей всю плиту. Для этого все ее объекты надо сначала объединить в группу и затем, используя выбор групп (справа вверху, в разделе Select ), присвоить ее нужной кости.

Правила заморозки

Можно завершать создание скелета. Нужно заморозить работу, чтобы очистить стек рабочих объектов, — это ускорит быстродействие системы. Зайдите в раздел Envelope и выберите пункт Edit Weights. Открывшееся окно — это редактор весовых коэффициентов. Система анимации в XSI поддерживает множественное назначение костей одной вершине (и наоборот). То есть на один участок модели может влиять несколько костей. Для этого необходимо лишь присвоить эти кости нужным элементам.

Мне неизвестно, возможно ли применение такого рода анимации в Half-Life 2 , поскольку моя версия компилятора StudioMdl отказывается компилировать такие объекты. В этом окне нам понадобится лишь одна функция. Выберите кость, к которой сопоставлен пропеллер, и нажмите Edit , затем Freeze. Проделайте то же самое с остальными костями.

Заключение

Вот и завершилась последняя статья по редактору XSI. В цикле были рассмотрены основные принципы создания моделей и базовые функции редактора, которые лежат в основе остальных, более сложных. Основываясь на полученных знаниях, вы можете сами, экспериментируя, находить более сложные способы моделирования. В ближайших выпусках “Мании” мы подробно рассмотрим процесс компиляции, завершающий создание модели для Half-Life 2.

Комментарии
Чтобы оставить комментарий,Войдите или Зарегистрируйтесь