ZDoom. Продвинутая 3D анимация.

Предисловие.

Я уже говорил о том как добавить 3D модель в Zdoom, в уроке MODELDEF — заменяем спрайты на 3D модели.

Однако, что если мы хотим сделать скелетную анимацию персонажа (как это делается во всех нормальных играх)? На помощь приходит Milkshape. Установите его, он нам понадобится.

Перерисовал иконку milkshape, специально для лого, однако, картинка не вписалась.

Подготавливаем 3D модель.

Сначала, выставите Window->Show Viewport Caption (отображает сторону вьюпорта)

Создайте кубик, для этого, выберите Box, в графе Model, и нарисуйте его.

Создайте кость . Для этого, выберите Joint и кликните внутри кубика.

Вообще это не кость, это Joint, а кость образуется из 2-х Joint’ов. Но я подумал, что так проще запомнить.

Далее, выделите меш, это делается путем выделения группы. Мы выделяем, что-бы потом, привязать кость к модели.

В графе Joints, нажмите Asign. Теперь, кость привязана к модели. Рекомендую выставить те же галочки, что и у меня.

Выделите кость. Модель загорится красным.

Нажмите Anim, что-бы перейти в режим создания анимации.

Анимируем модель.

Давайте, сделаем анимацию поворота кубика.

Поверните кость, модель повернется вслед за ней.

Добавим кадр в анимацию, для этого в графе Animate->Set Keyframe установите ключевой кадр.

При наведении на поля, пишется что они значат, но для тех кто не знает английский, переведу. Идти по полям буду, слева-направо.

  • начальный кадр
  • текущий кадр
  • последний кадр
  • количество кадров анимации

Что-бы проиграть анимацию, нажмите >

Анимация будет проигрываться в последнем выделенном вьюпорте.

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

Теперь, добавим текстуру к нашему кубику.

Текстурирование кубика.

В графе Materials нажмите New, что-бы создать новый материал.

И задайте текстуру, данному материалу.

Материал готов, осталось его применить к модели. Выделите модель, она выделяется в режиме Group.

Вернитесь к графе Materials, и нажмите Assign.

Управляем наложением текстуры.

По желанию, вы можете указать, каким образом текстура будет накладываться на модель.

Откройте Window->Texture Coordinate Editor

И нажмите Remap

Теперь, соотносите модель с текстурой как вам вздумается. Интерфейс здесь почти такой же, как в 3D режиме.

Экспорт модели

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

Теперь, экспортируйте модель в md3, в ту же папку.

Модель получили, теперь перенесем её в ZDoom.

Импорт модели в ZDoom.

Скачайте файл проекта с MEGA. Здесь используется другая модель, но суть та же.

Откройте 3dmodel.pk3 в Slade. И что мы видим.

ACTOR testObj 15000 
{
	Height 56
	+NOGRAVITY
	+NOBLOCKMAP
	+SOLID	
	States
	{
	Spawn:
		MDLA ABCDEFGHIJ 4
		Loop
	}
}

В Decorate, создан актор, в котором циклично проигрываются 10 кадров анимации (от A до J). Эти кадры мы будем соотносить с кадрами анимации md3 модели, делать это будем в MODELDEF, откройте его.

Model testObj
{
	Path "models"
	Model 0 "tutor.md3"
	Skin 0 "test.png"
	Scale 2.0 2.0 2.5
	USEACTORPITCH
	USEACTORROLL

Данный код я разбирал здесь MODELDEF — заменяем спрайты на 3D модели, поэтому пропустим.

FrameIndex MDLA A 0 0
FrameIndex MDLA B 0 1
FrameIndex MDLA C 0 2
FrameIndex MDLA D 0 3
FrameIndex MDLA E 0 4
FrameIndex MDLA F 0 5
FrameIndex MDLA G 0 6
FrameIndex MDLA H 0 7
FrameIndex MDLA I 0 8
FrameIndex MDLA J 0 9
FrameIndex MDLA K 0 10

Здесь идет соотношение спрайтов с кадрами 3d анимации.

Т.е. спрайт MDLAA0 заменяется на 0 кадр в 3d анимации. А MDLAK0 заменяется на 10-ый кадр md3 анимации. Подробнее про MODELDEF, вы можете прочитать на вики. Еще заметьте, что спрайты MDLA, не существуют, что удобно, т.к. не нужно создавать placeholder‘ы.

Вот так и создается 3D анимация в ZDoom.

Сделал анимацию перемещения куба вверх/вниз, вместо поворота, из-за глюка в программе.

Усложним пример, добавим вместо 1 Joint’а — 2. Привяжем их к мешу (модели), и анимируем их обоих.

Получился неплохой результат. Данный пример, реализован в 3dmodel.pk3.

Итоговый результат.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!