Итак... Вы ностальгатор, или быть может хотите попробовать ради интереса? Не суть.
У некоторых из нас может быть нужда перевести модель формата Md5 в формат, понятный халфе/ксашу, скажем вам нужна моделька из Q1/2, если из Q1 модель вы можете попробовать взять, то вот с Q2 ситуация намного печальнее - формат Md2, повершинная анимация, никто ничего под халфу не конвертировал, закачаешься. Если мы не можем взять модель напрямую из Q2 - возьмём из Ремастеров, в них ситуация намного, НАМНОГО лучше - Md5 и скелетная анимация.
Воды итак навалил уже немало, так что к делу.
Подготовка: ВАЖНО! В ГАЙДЕ НЕ БУДЕТ ОБЪЯСНЯТСЯ КАК ВСКРЫТЬ РЕСУРСЫ, НЕ МАЛЕНЬКИЕ, QUARK САМИ ДОЛЖНЫ УМЕТЬ СКАЧАТЬ!
Нам нужны следующие тулзы:
Noesis - Тык
Компилятор Paranoia 2 - Тык
Любой граф. редактор способный сохранить адекватный файл .tga (Я использую GIMP).
(Опционально) Просмотрщик моделей Paranoia 2 - Тык
Этап 1:
1 - Открываем Noesis, открываем папку с нужной нам моделью в проводнике (Я для примера взял v_machn из Q2 Remastered).
2 - Из проводника в Noesis перетаскиваем файл *.md5mesh, это геометрия модели, после этого перетаскиваем *.md5anim (набор анимаций) и текстуру (в моём случае skin.png), от всех сообщений программы - отказываемся.
3 - После того, как мы убедились что наша модель работоспособна - переходим в меню File->Export from Preview, выставляем настройки: Main output type - .smd Additional texture output - .tga (по факту ни на что не влияет) Additional animation output - .smd Flip UV's - ☑
4 - Переименовываем файл с анимациями в anims.smd, trisout.smd во что угодно, лишь-бы оно не мешало в процессе (я переименовал в конечное имя модели, v_machn)
5 - Создаём папку, распаковываем в неё P2Studiomdl, копируем туда файлы которые мы переименовали.
6 - Открываем текстуру в граф. редакторе, если есть возможность изменить режим изображения - меняем на RGB (P2Studiomdl может и скушает индексированную текстуру, но может и не съесть, будем на бить упреждение).
7 - Сохраняем текстуру в формате .tga, копируем в ту-же папку что и предыдущие файлы.
8 - Открываем .smd с геометрией, убеждаемся что название текстуры в развёртке совпадает с именем нашей текстуры, если нет - Ctrl+H, заменить текущее имя на имя нашей текстуры(без формата).
9 - Скачиваем .qc файл из аттача, копируем в ту-же папку, открываем, в $body studio вместо нынешнего значения пишем имя нашего файла с геометрией, без формата.
10 - Вместо текущих $sequence - добавляем свои, можно открыть модель в Blender и уже оттуда посчитать кадры, а можно подсмотреть в исходниках Q2 Remastered.
Формат: $sequence "ИМЯ_АНИМАЦИИ" "anims.smd" frame ПЕРВЫЙ_КАДР ПОСЛЕДНИЙ_КАДР fps 10
11 - сохраняем файл, теперь второй этап.
Этап 2:
1 - Запускаем в нашей папке командную строку (написать cmd вместо пути в проводнике и нажать enter, либо открыть командную строку и перейти по нужному пути).
2 - Пишем studiomdl.exe ИМЯ_НАШЕГО_QC.qc
3 - Ждём компиляции.
4 - Проверяем результат в P2MV.
(Фейко)Luma-текстура:
В Q2 Remastered на некоторое оружие были добавлены Luma-текстуры, это текстуры одинакового с оригинальной текстурой размера, которые содержат лишь те участки, которые должны иметь свечение в игре, сейчас мы закостыляем этот эффект без имплементации Luma-текстурирования.
1 - Сохраните Luma-текстуру в TGA, добавив чёрный фон.
2 - Открываем .smd файл с геометрией, копируем UV-карту основной текстуры, изменяем имя текстуры для которой создана карта на любое (Я использую skin_luma), вставляем нашу доп. карту в самый низ файла перед строкой end, сохраняем.
3 - Переходим в наш .qc файл, вставляем после $freecoords и перед $body studio новые строки:
У параноевского компилятора к сожалению есть один баг, а именно - некорректное смещение кадров эвентов на случай, если мы не будем дробить smd-файл анимации на отдельные секвенции, а для простоты и удобства укажем для каждой секвенции один и тот же файл (из ку1 и ку2 ремастеред нам достанется именно что один гигантский smd со всеми кадрами), но с разными их диапазонами.
Если кто-то не понял о чём речь - не беда, вот пояснительный пример из qc
как видите источником для всех секвенций служит один и тот же файл anims.smd но диапазоны кадров везде разные. Теперь собственно, в чём заключается баг. А баг заключается в том, что когда к такой анимации указываешь эвент, то номер кадра логично указывать уже в локальном диапазоне, а не мучительно вычислять сколько там надо отсчитать с начала. Вот только это не работает. Ладно, мы не гордые и посчитаем смещение в кадрах. Снова облом - и это не сработает. Баг потому что.
А эти эвенты между прочим являются частью ИИ и монстр без них нормально работать не будет. И тут только такое решение, чтобы резать anims.smd на файлики с соответствующими кадрами. Впрочем я сделал исправление для studiomdl, завтра выложу, если не забуду.
Монстры, векторы передвижения:
Когда вы попробуете перенести монстра - внезапно обнаружите что он тупит на одном месте и не двигается ни на юнит, но как так? Анимация ведь есть, "я даже ACT_WALK к ней прикрутил"! И вот тут уже начинается "Халф-Лайф это Квейк, но другой", хоть у типичного обывалы в голове и отложено что "Халява" сделана на модифицированном движке Квейка, нововведений явно было много, поэтому Халфа не Квейк до мозга костей.
Суть в том что передвижение монстров считается по своему, в центре модели есть специальная кость, которая тащит за собой всю модель и именно по её передвижению движок считает сколько пройдёт монстр.
Приступим к "прикручиванию" такого вектора:
1 - Открываем наш .qc в Blender с плагином Blender Source Tools
2 - Переходим во вкладку Animation.
3 - Переходим в Pose Mode, выбираем нашу кость по центру.
4 - Для удобства переходим в 2д вид по оси Y.
5 - Переключаемся на следующий кадр, передвигаем модель на нужное расстояние, в Object Properties рядом с координатами X нажимаем точку, это создаст новый ключевой кадр на таймлайне, повторить до конца анимации.
6 - На следующем после последнего кадра создаём новый ключевой кадр с нулевым смещением, выставляем для последнего кадра константную интерполяцию.
7 - Экспортируем нашу анимацию(важно).
8 - В .qc файле в анимации ходьбы добавляем команду LX, это скажет компилятору что нужно считать вектор передвижения по оси X. Также добавляем команду loop.
9 - Компилируем модель, теперь монстр хотя-бы ходит.
Совет:
Ориентируйтесь во время анимации по частям, которые опираются на что-либо (к примеру - ступни), подгоняйте модель чтобы они сходились между кадров, в некоторых анимациях будут слишком рваные кадры, придётся сдвигать на угад/глаз.
В аттаче приложил кривую, но хотя-бы рабочую в плане передвижения модель солдата.
Вложение: soldier.zip (524.3 кб)
Этот файл был скачан 165 раз.
Я вчера выложил обновлённую версию studiomdl, которая в теории (потому что я толком не тестировал) позволяет обойтись без всех этих колдунств.
Просто напротив ключевого слова LX в qc пишем число. Это число и будет скоростью ходьбы монстра. Пересобираем, тестируем модель.
Цитата:
APAMk2 писал: подгоняйте модель чтобы они сходились между кадров, в некоторых анимациях будут слишком рваные кадры
Для первой кваки это полностью не вариант. А вот во второй у всех ходьба равноускоренная, там нормально будет.