Конвертирование моделей из Half-Life в Darkplaces(mdl to dpm)

Написано: среда, 17 июня 2015 г. автор st1x51
0

Начнем с того,что dpm - специальный формат моделей для движка Darkplaces,который в отличии от обычного mdl формата поддерживает костную анимацию. Благодаря этому модели не будут "плавать" при воспроизведении анимации.

Необходимый инструментарий:
1.Half-Life MDL Decompiler 1.2
Декомпилятор моделей Half Life в smd.
SMD бывает двух типов,модель(меш файл,body) и анимация(sequence).
2. DPM Wizard
Замечательная программа,написанная VorteX'ом для удобного компилирования dpm моделей.
3.Fimg
Простая программа для просмотра и конвертирования текстур,написанная FrikaC,собственно название наверное расшифровывается как Frika Img :)

Во-первых, качаем/делаем необходимую модель для Half Life. Я взял модель шприца.
a) Декомпилируем модель с помощью Half-Life MDL Decompiler:
1.Кидаем модель в папку Half-Life MDL Decompiler
2.Запускаем decompile_all, на выходе получаем папку w_syringe,внутри smd файлы,текстура в формате bmp и qc файл с информацией о модели.

b)Запускаем DPM Wizard и компилируем модель
1)Жмем Compile new model>Build dpm from half life1/2 smd
2)Теперь ищем наши smd файлы. Обратите внимание,что первым smd файлом должен быть меш,а потом должны идти анимации.Чтобы узнать как называется меш файл,заходим в qc файл нашей декомпилированной модели и видим такую строку:
//reference mesh(es)
$body "body" "syringe_low"

Следовательно,syringe_low.smd является мешем и должен быть первым в списке,далее должен идти idle.smd
3. Жмем next,в поле name можем указать имя нашей модели(w_syringe),в поле rotate обязательно пишем -90, в поле offset должны стоять 0 0 0
4.Жмем finish,модель готова и лежит в dpmwizard\build\models

Файлы,которые необходимы: сама модель w_syringe.dpm и w_syringe.dpm_0.skin
Если мы отроем skin файл,то увидим там такую строку
syringe,models/syringe
это значит,что в папке models,должна лежать текстура syringe
Важное примечание, skin файл должен лежать рядом с моделью.

Работа над конвертацией еще не окончена,нужно еще конвертировать,нашу текстуру в формат tga,для этого используем Fimg. Кидаем syringe.tga в папку models,все.

Важные примечания.
1.Для упрощения анимаций можно использовать фрейм группы(файл .framegroups)
Пример такого файла
1 20 30 1 // idle1 это будет self.frame = 0;
21 15 30 0 // jump
это будет self.frame = 1;

Первое значение это первый кадр,второе значение это количество кадров,которое нужно проиграть(то есть 1 кадр + 20),третье значение это скорость анимации(кадры в секунду),четвертое значение это флаг loop,если стоит 1,то анимация будет бесконечно повторяться.

Если для модели используются фреймгруппы,то задавать анимацию нужно с помощью self.frame, обратите внимание,что севенции начинаются с 0,то есть,чтобы проиграть 1 секвенцию,нужно написать self.frame = 0;
Проблема фреймгруп заключается в том,что нельзя управлять отдельным кадром и нельзя выставить определенное действие определенному кадру(либо я этого не знаю.если узнаю,то напишу).
Важное примечание, файл .framegroups должнен лежать рядом с моделью.

2.При конвертировании модели с большим количеством текстур,может возникнуть проблема со скин файлом,либо это косяк компилятора,либо dpmwizard.
Например у нас есть модель торса игрока,у которой есть куча текстур,скин файл после конвертации будет выглядеть так:
pants,models/pants
pants,models/shirt
pants,models/jacket
pants,models/head
pants,models/cap

Это неправильно,он должен выглядеть так:
pants,models/pants
shirt,models/shirt
jacket,models/jacket
head,models/head
cap,models/cap
Название текстуры,должно соответствовать названию в пути.

3.Путь для скин файла можно и нужно изменять.
Например.у нас есть скин файл со строкой
syringe,models/syringe
мы можем изменить его так
syringe,models/items/syringe
чтобы не было иерархии файлов текстур

4.Бывает такое,что у модели может быть два меш файла,решения данной проблемы два:
a)Соединить меши в редакторе моделей(например Milkshape)
b)Соединить,копируя все из промежутка между triangles и end одного smd файла в другой,чтобы у нас как-бы получился один меш файл. Читерский подход,но действенный.