Как сделать мод на халф лайф 2
79 | уникальных посетителей |
4 | добавили в избранное |
Для создания проекта мода:
Откройте Source SDK из меню Инструменты Steam’a.
Откройте Create A Mod из группы Utilities.
Выберите Modify Half-Life 2 single-player или Modify Half-Life 2 Multiplayer.
Укажите, куда вы хотите разместить ваш проект мода (например C:\MyMod).
Введите имя вашего мода. В этом примере мы используем "MyMod".
Vista может потребовать дополнительных шагов в зависимости от ваших параметров настройки безопасности. (см. известные проблемы ниже)
Steam скопирует все важные файлы в указанный Вами целевой каталог. Теперь у вас есть копия исходного кода Half-Life 2, который вы можете изменять.
Подготавливаем решение
Внимательно следуйте инструкциям Компиляции в VS2008 / 2005 / 2010.
Внимательно следуйте инструкциям Запуска из Visual Studio.
Изменяем скорость ракет
Если вы редактируете Half-life Single-player, откройте файл hl2_dll/weapon_rpg.cpp. В противном случае откройте hl2mp_dll/weapon_rpg.cpp.
В начале файла найдите строку:
#define RPG_SPEED 1500
Измените эту строку так:
#define RPG_SPEED 400
Изменяя это число, мы говорим ракете перемещаться со скоростью 400 юнитов в секунду (примерно 7 — 8 метров в секунду). Раньше ракета перемещалась со скоростью 1500 юнитов в секунду (около 30 метров в секунду). Разница в скорости будет очень заметна когда вы скомпилируете и запустите мод.
Note: Измерения ведутся в системе unit’ов редактора: для уровня и объектов 16 юнитов = 1 фут, для персонажей 12 юнитов = 1 фут. Подробнее здесь.
Выбор активной конфигурации
Нам нужно установить активную configuration в "Release HL2".
Чтобы сделать это:
Выберите Build->Configuration Manager.
Измените Active Solution Configuration в выпадающем списке в значение "Release HL2"
Нажмите Close.
Для пользователей Visual Studio 2005/2008:
Выберите Project -> Properties (последний пункт в меню)
Нажмите кнопку Configuration Manager (в правом верхнем углу)
В выпадающем списке Active Solution Configuration проставьте опцию "Release"
Компиляция проекта
Теперь вы готовы скомпилировать solution. Выберите Build->Build Solution для начала. Когда запрошенная компиляция будет завершена появится файл server.dll и client.dll в директории MyMod/bin (например C:\MyMod\MyMod\Bin). Это ваши серверная и клиентская DLL для вашего мода и это часть того что вы должны распространять конечным пользователям.
Запуск мода
Прежде чем запустить мод, надо убедиться, что есть что запускать. К примеру, новые моды используют AppId 215 (Ep1) или 218 (Orange Box). Он загружает правильную версию Source SDK Base, который доступен почти каждому вместе с играми Valve и, в случае с 218/Orange Box, поддерживает последнюю версию движка. Вы можете оставить или изменить свой AppId в файле GameInfo.txt.
SDK Base обеспечивает только общим контентом Half-Life 2. Если Вы хотите использовать контент из других игр, или карт HL2, Вам нужно сменить AppId на ту игру, из которой Вы хотите загружать. Если Вы хотите ‘монтировать’ более одной игры, Вы можете так сделать, но Вы должны избежать этого метода, если Вам действительно этого не надо по причине, описанной на этой странице.
В директории, в которой Вы создали мод, есть командный файл под названием run_mod.bat. Не используйте bat файл для запуска Вашего мода, пока он не обновлён для SDK Base. Лучший путь для запуска Вашего мода — перезапуск Steam и запуск из Вашего Games list (где он, будем надеяться, появится — если нет, проверьте свой AppId) или через опцию наладки в vis (читайте как наладить код source).
Теперь, когда контент загружен, запускайте игру. Когда движок загружен, Вам покажется главный экран. Если вас предупредят об отсутствующих файлах, таких как maplist.txt, игнорируйте это.
В "Опции", "Клавиатура", "Дополнительно", включите Консоль Разработчика. Нажмите тильду (
), чтобы открыть Консоль Разработчика. Эта консоль предоставляет Вам множество инструментов, помогающих Вам создавать контент для движка Source.
В Вашем одиночном моде нет карт, так что скопируйте карту из карт HL2 с GCFScape в папку Вашего мода /maps/ в SteamApps/SourceMods. Загрузите карту, набрав "map " (включая пробел) в консоли и выберите из списка (например "map d1_canals_01"), затем введите "impulse 101", чтобы дать себе гору оружия.
Примечание: Разрешите читы в игре, введя "sv_cheats 1" в консоле (
), чтобы команда "impulse 101" работала
Выберите и выстрелите из RPG, чтобы посмотреть на Ваши изменения.
Создание мода (Синглплеерный / Мультиплеерный)
В данной статье идет описание процесса создания модификации для Half-Life 2 (конкретно Half-Life 2: Episode Two).
Данный туториал требует наличие Source SDK 2013 Singleplayer.
Его можно скачать если написать его название в поиске вашей библиотеки Steam.
После установки, нужно в свойствах инструмента поставить бету upcoming.
Содержание
Создание модификации (на базе Mapbase) [ ]
Скачать Mapbase [ ]
Перед созданием модификации, нужно скачать базу Mapbase если она не скачана.
- Ссылка на скачивание Mapbase — moddb.com.
После скачивания, нужно распаковать 3 папки из архива в:
Создание модификации [ ]
Дальше мы должны создать саму модификацию. Перед созданием, нужно скачать шаблон модификаций.
В нем имеется две папки:
-
mapbase_hl2_template — Папка модификации на базе Half-Life 2 (без особенностей из второго эпизода) mapbase_episodic_template — Тоже самое, только на базе Half-Life 2: Episode Two
Вы должны выбрать какую папку использовать тем самым выберете базу.
Выбрав базу, копируем папку в:
И переименовываем её во что-то, например, my_mod.
Настройка gameinfo.txt [ ]
Дальше мы должны настроить gameinfo.txt внутри папки вашего нового мода.
Внутри файла мы видим разные параметры:
Параметры [ ]
Game «название» [ ]
Данный параметр отвечает за название, отображаемое в заголовке окна и в библиотеке Steam.
title «название» [ ]
Данный параметр отвечает за название, отображаемое в меню.
title2 «название» [ ]
Данный параметр отвечает за название, отображаемое в меню после заголовка title.
gamelogo «0 или 1» [ ]
Данный параметр отвечает за отображение логотипа в главном меню.
nodifficulty «0 или 1» [ ]
Данный параметр отвечает за отображение вкладки «Сложность» в настройках игры.
developer «название» [ ]
Данный параметр отвечает за название в разработках в свойствах модификации в Steam.
developer_url [ ]
Данный параметр отвечает за ссылку на сайт разработчика или модификации.
manual [ ]
Данный параметр отвечает за ссылку на туториал модификации.
icon [ ]
Данный параметр отвечает за выбор иконки модификации в Steam.
- Папка resource относительно gameinfo.txt (то есть resource папка в той же папке, что и gameinfo.txt).
- Обычная версия логотипа должна иметь размер 16×16, большая 32×32 и файл должен называться названиелого_big.
- Для прозрачного фона, логотип должен быть сохранен в 32-битном режиме с альфа-каналом.
Подключение контента игр [ ]
Процесс подключения контента для модификации не требует особых усилий. В gameinfo.txt находится комментарий:
После данного комментария вы можете добавить строчку:
Это добавит проверку контента в папке_вашего_мода/my_assets.
Перезапуск Steam и проверка работоспособности модификации [ ]
Вы можете теперь перезапустить Steam и проверить, работает ли модификация.
My First Mod
English
Esperanto
Català
Čeština
Deutsch
Español
Eesti
Français
Magyar
Italiano
Nederlands
Norsk
Polski
Português
Português do Brasil
Русский
Українська
Svenska
Türkçe
日本語
中文(中国大陆)
中文(台灣)
한국어
ქართული
עברית
.
Warning: This translation template
( {{ lang }} ) is deprecated.
It should be replaced by the
{{ MultiPage }} template if possible.
For more information, see this page.
Edit
Page history
Purge this page
Move
This tutorial will teach you how to create and build your first simple Source mod. In this mod we will change the speed at which Half-Life 2’s rocket travels through the world. This tutorial uses Source SDK 2007 but most of it is applicable to Source SDK 2013.
Contents
Create the project
For the purpose of this tutorial we will call our first mod, «Mymod». When you make your own mod this can be any name you wish (i.e. «Quickmod», «TreasureTroll», «Old Man With Melons Mod», etc.)
Please note that in order to get the latest source code, you must refresh the SDK content.
To create a mod project:
- Open the Source SDK application from Steam’s Tools menu.
- If it already hasn’t been selected for you, select Source Engine 2007 for Engine Version.
- Open Create A Mod from the Utilities group.
- Select either modify Half-Life 2 Single Player or modify Half-Life 2 Multiplayer.
- Specify where you would like the mod’s project to be placed (i.e. C:\Mymod ).
- Enter the name of your mod. In this example, we’ll use "Mymod".
- Vista may require extra steps depending on your security settings.
The Steam application will then copy all the relevant files to the destination directory that you specified. You now have a copy of Half-Life 2’s source code at that location which you can modify.
Prepare the solution
- Carefully follow the instructions in Compiling under VS2008 / 2005 / 2010 / 2012 / 2015, whichever is appropriate.
- Carefully follow the instructions in Launching from Visual Studio.
Alter the rocket’s speed
If you are editing Half-life Single-player: in the Solution Explorer, open file Server Episodic > Source Files > HL2 DLL > weapon_rpg.cpp . Otherwise open hl2mp_dll/weapon_rpg.cpp .
Near the beginning of the file, find the line:
Change this line to read:
By altering this number, we’ve told the rocket to travel at 400 units per second (or about 33 feet per second, or 10 meters per second). Previously the rocket traveled at 1500 units per second (125 ft/s, 38 m/s). The difference in speed will be very apparent when we compile and run the mod.
Compile the project
Now we are ready to build the solution. Choose Build->Build Solution to begin. When the requested compilation has completed there will be a server.dll and client.dll file in the Mymod/bin directory (i.e. C:\Mymod\Mymod\Bin) . This is the custom server and client DLL for our mod and is one of the pieces that would be distributed to end-users.
Run the mod
Now before you launch it’s important to ensure you have something to launch. By default, new mods will use AppId 215 (Ep1) or 218 (Orange Box). This loads the correct version of Source SDK Base, which is accessible to almost everyone with a Valve game and, in the case of 218/Orange Box, is kept up to date with the latest engine built. You can check or change your AppId in the game’s GameInfo.txt file.
SDK Base provides only Half-Life 2’s shared content, however. If you want to use content from a specific game, or HL2’s maps, you will need to change the AppId to that of the game you want to load from. If you want to ‘mount’ more than one game you can do so, but you should avoid that method unless you really need it for reasons explained on its page.
In the directory that you created your mod, there will be a batch file called run_mod.bat . Don’t use the bat file to launch your mod, as it has not been updated for the SDK Base. The best way to launch your mod is from within Visual Studio by pressing F5, or restart Steam and launch it from your Games list (where it should hopefully have appeared — if not, check your AppId).
No maps are provided with your single player mod, so copy a map from the HL2 maps with GCFScape to your mod’s /maps/ directory inside of SteamApps/Sourcemods. Load a map by typing «map » (including the space) into the console and select from the list (e.g. map d1_canals_01 ) then type » impulse 101 » to give yourself a load of weapons.
Now that there’s content to load, start the game up. When the engine has loaded, you’ll be taken to the title screen. If you are warned about missing content, such as maplist.txt , ignore it.
In «Options», «Keyboard», and «Advanced», enable the Developer Console. Hit the tilde key (
) to bring up the Developer Console. This console will provide you with numerous tools to help you create content for the Source engine.
Note: The console will always appear if -allowdebug is specified as a command line argument/advanced option
Note: A map that you can always use and is guaranteed to work is sdk_shader_samples.bsp, found in steamapps\[USER ID]\half-life 2\hl2\maps
Note: Enable cheats in the game by typing » sv_cheats 1 » in the console (
) for the » impulse 101 » command to work
Select and fire the RPG to view the changes you’ve made.
Debugging Techniques
You may have some difficulties following these steps using Release configuration. Change to Debug if you run into problems. Before moving on, I must point out that Source modding is a VERY difficult way to learn C++. You will be better served trying out lots of tutorials designed for learning C++, and applying what you’ve learned to modding.
Navigating Code: What is RPG_SPEED
In the game code, right click the RPG_SPEED and select Find all references. . This will display the Find Symbol Results pane. Click the plus to expand the results. The first is obviously the definition, the part we were playing with before. The other two are locations where RPG_SPEED is actually being used. Double click the last one.
This brings us to a function called void CMissile::IgniteThink() . When the rocket is first launched, it’s not ignited. This code is used, or “called”, to ignite the rocket. The line of code we are at:
sets the velocity (direction and speed) of the rocket. Use the Find all references. , Go to Definition, and Go to Declaration tools liberally. If ever you don’t know what something is, where it came from, or what it is doing, these tools can help you wrap your mind around the code.
By default, the RPG_SPEED is set to 1500.
Using break points
In the gray margin to the left of this line of code, click the left mouse button. If this doesn’t do anything or you are just confused, you can alternatively press F9 or use Debug Menu > Toggle Breakpoint . This will put a red dot in the margin known as a break point. A break point is used to pause execution of a program. This may seem like a strange concept, so some explanation is in order.
It’s often useful to see what’s going on in a program at a specific moment. When the program tries to run this line of code, it will be stopped. EVERYTHING in the program will be stopped. 3D graphics, mouse input, even clicking the close button have been paused. This allows you to scrutinize the state/data of the program, frozen in a moment in time.
If the mod isn’t already running, press F5 and fire it up. Load up your map and some weapons, and shoot the RPG.
Examining and modifying state
Right when the rocket tried to kick on, Visual Studio should have popped up and should say Paused in the title bar. The cursor will be on the line of code, a yellow arrow is in the margin. Hover the mouse over vecForward and you’ll see a box pop showing you the values inside of vecForward, X Y and Z. These values are currently rather small (This is a normalized vector, but that’s another tutorial). If you click the plus to expand the values, you can actually modify the values, changing the internal state of the program.
Go to Debug Menu > Windows > Autos. This will automatically show you any variables that are being used by the current code, and show them in red if they’ve changed their value.
Stepping through execution
This line of code we have “paused execution” at is an instruction to use the SetAbsVelocity function, and it also passes some data to the function: vecForward * RPG_SPEED.
Press F11. Alternatively, you can use Debug Menu > Step Into, or find the button in the toolbar with the same icon. Notice again the yellow arrow in the gray margin. This arrow indicates the next instruction the program will execute.
We are now inside the SetAbsVelocity function. Examine the value of vecAbsVelocity. You’ll notice that it’s much bigger than vecForward before, because it’s been multiplied by RPG_SPEED. Now examine, m_vecAbsVelocity. This is the actual saved velocity of the rocket. Right now it’s still rather small, because the rocket just got ignited and hasn’t sped up at all. Press F10. F10 is similar to F11, except that it wont go inside of functions.
If we had pressed F10 before, the yellow arrow wouldn’t have moved into the SetAbsVelocity function. Instead it would have moved to the line after SetAbsVelocity(vecForward*RPG_SPEED) . The call to SetAbsVelocity still occurs, but it happens very quickly without us watching. Press F10 a few times till you get to the line:
If you examine the two variables again, you will see they haven’t changed yet. Press F11 (or F10. Since this isn’t a function to step into, it has the same effect) once more. Now examine m_vecAbsVelocity. You will see that the values from vecAbsVelocity have been assigned, or copied over. This is a very powerful debugging technique. It allows us to see how the programs state changes from one line to the next. If something isn’t working how we expect, we can watch things as they happen and trace to where things are going wrong. You can also trace backwards. Start from where the unexpected result is observed, and examine the state there. If part of the state (like a variable) is not right, go back to where the wrong state might have become present (the last place the variable got assigned a value). Use the Go to Definition, or Find all References to help you hunt down the possible places. Repeat the process until you hone in on the source of the error.
More debugging techniques
There are many features in Visual Studio to help you debug more efficiently. You can make break points only break on a certain condition, see the call stack — the chain of functions that have been called to get where you are now, and many others. If you want to get great at mod programming, you have to get great at programming C++, debugging C++, and how to get make full use of your IDE (in this case VS).
You’ve built your first mod. Now what?
You’ve now set up, built, and debugged your first mod. Now experiment and tinker. Getting your hands dirty is the best way. If you have coding questions, there is a formal news group called HLCODERS. If you are serious about mod programming, track it down. There are also many communities centered around HL2 and modding, and most have a programming forum, tutorials, etc.
For a stepping stone to different aspects of mapping see What makes a good level?
Моделлинг в 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.