pxstudiomdl
Данный компилятор моделей является наследником компилятора Paranoia 2 Savior studiomdl
, но включает в себя новые функции для работы с моделями, имеет расширенные лимиты, и ряд исправленных багов. Рассчитан для использования с Xash3D и PrimeXT, но также он совместим с GoldSrc. Скачать компилятор можно в составе билда PrimeXT, файл находится по пути primext/devkit
.
Функционал
- Поддержка тайлинга текстур на моделях (только для PrimeXT/Xash3D)
- Поддержка фейкового тайлинга текстур для GoldSrc (до четырёх повторений текстуры)
- Поддержка полноцветных текстур в форматах TGA, BMP, PNG, DDS
- Компилятор сгенерирует прозрачность для встроенных текстур, если входные текстуры имеют альфа-канал
- Поддержка развесовки костей (bone weighting)
- Поддержка процедурной анимации костей (jiggle bones)
- Расширенные лимиты на кол-во вертексов в модели и в SMD-файле
- Отсутствующие текстуры автоматически подменяются текстурой-заглушкой
- Возможность компиляции SMD-файлов напрямую, без ручного создания QC-файла (если модель без анимаций)
Описание команд QC
Важно отметить, что ни одна из команд не должна быть написана с заглавной буквы, так как это приведёт к ошибкам компиляции.
$modelname <название>.mdl
- Установка имени для модели$cd <путь>
- Указание компилятору, где искать исходники модели. Используйте$cd ".\"
для указания пути к текущей папке. Для абсолютного пути используйте следующий пример:$cd "C:\Users\Admin\Desktop\model_sources"
$texrendermode <имя текстуры> <режим рендеринга>
- Установка специального режимы рендеринга для указанной текстуры
Доступные режимы рендеринга:
- additive
- masked
- masked_solid
- fullbright
- smooth
- nosmooth
Если вам нужны два режима рендеринга на одной и той же текстуре, вы должны сделать отдельную запись, так как вы не можете поместить masked
и additive
в одну и ту же строку.
$texrendermode body.bmp masked
$texrendermode body.bmp additive
$gamma <значение>
- Изменение гаммы во всех ваших файлах текстур. Начальный номер по умолчанию — 1,8. Для более темного увеличьте число, а для более яркого уменьшите число$origin <x> <y> <z>
- Cмещение начала координат модели. Этот параметр нужен для точной настройки модели.$eyeposition <x> <y> <z>
- Для монстров в одиночной игре, указывает где глаза монстра находятся относительно начала координат модели$cdtexture ".\"
- Указать путь к текстурам, если они не в папке с моделью$cliptotextures
- Отключает уменьшение размера текстур до границ UV-карты. Может помочь избавиться от швов на текстурах. Отключение этого флага позволяет использовать фейковый тайлинг текстур для GoldSrc.$fixedcoords
- Включает текстурные координаты с плавающей точкой (без тайлинга). Только для Xash3D.$freecords
или$freecoords
- Включает текстурные координаты с плавающей точкой (с тайлингом). Только для Xash3D.$boneweights
- Учитывать развесовку для модели. При использовании этой команды помните, что декомпиляция может быть невозможна, сохраняйте исходники модели. Доступно только в Xash3D.$scale <величина масштаба>
- Масштаб модели, по умолчанию всегда равно 1$scale_x, $scale_y, $scale_z
- Масштабирование модели по отдельным осям. Использовать с осторожностью.$body <имя меша> <имя SMD-файла>
- Добавляет меш в модель. Пример:$body "head" "barney"
$bodygroup <имя группы>
- Это позволяет вашей модели иметь взаимозаменяемые части, для генерации разных частей в модели.$flags <номер флагов>
- Добавляет к модели специальный эффект или другую модификацию, возможные флаги перечислены в таблице ниже. Для того, чтобы добавить несколько флагов, нужно сложить в калькуляторе их номера и результат прописать как номер флага.
Номер флага | Описание |
---|---|
1 | След от ракеты Quake1 + динамический свет. След частиц от оранжевого до серого. Создает след только тогда, когда модель находится в движении (не анимация). Динамический свет не остановится, пока эта модель не будет удалена из игры, поэтому используйте его только для таких вещей, как снаряды оружия. |
2 | Дымовой след от гранаты Quake1. Это создает след только тогда, когда модель находится в движении (не анимация) |
4 | Кровавый след Quake1 Gib. Это создает след только тогда, когда модель находится в движении (не анимация) |
16 | Непрерывно стреляет зелеными частицами из стороны в сторону наружу, пока модель не будет удалена из игры. |
32 | Кровь зомби |
64 | Режущий эффект Quake 1 Death Knight. Как эффект слюны Скрэга, но с оранжевыми и желтыми частицами. |
128 | Расплывающийся фиолетовый след |
256 | Уменьшает тени на модели примерно на 50%. Хорошо подходит для летающих моделей или моделей которые выигрывают от менее резких теней, таких как модели в мультяшном стиле. |
512 | Заставляет модель использовать хитбоксы для коллизии, вместо стандартного bounding box |
1024 | Постоянно освещает модель непосредственно из энтити light, независимо от того, где он находится на карте. |
$texturegroup
- Команда позволяет вашей модели иметь взаимозаменяемые текстуры. Это используется для таких вещей, как смена текстуры одежды. Форматирование заключается в том, что в каждой строке помещаются все исходные текстуры, а затем во второй или более строке помещаются замещающие текстуры.
Пример:
$texturegroup arm
{
{ "newarm.bmp" "handback.bmp" "helmet.bmp" }
{ "newarm(dark).bmp" "handback(dark).bmp" "helmet(dark).bmp" }
}
$renamebone <старое имя> <новое имя>
- Команда для переименования любых костей вашего скелета. Используется в основном для исправления несоответствий имен скелетов между другими SMD-файлами. Пример:$renamebone "Bip01 R Calf" "Bip01 R Leg1"
$attachment <номер аттачмента> <название кости> <X> <Y> <Z>
- Задаёт определённую точку, которая присоединяется к заданной кости, а затем её можно использовать для воспроизведения различных эффектов, или для получения координат этой точки из кода игры. КоординатыX,Y,Z
задают удаление точки от кости. Пример:$attachment 0 "bip01 R hand" 25 0 5
$hbox <номер хитгруппы> <название кости> <X> <Y> <Z> <X2> <Y2> <Z2>
- По умолчанию ком пилятор проверяет, есть ли у вас строка $hbox, и если её нет, то он автоматически создает хитбоксы на каждой кости, используя привязанную к ней скиннинговую сетку в качестве приблизительного размера. Когда вы используете эту команду, она создаст хитбоксы только на тех костях с объявленными строками $hbox. $hbox также используется для редактирования размера и групп урона хитбоксов.
У пользователей программы Blender, которые создают свои кости с нуля, а не импортируют, могут возникнуть проблемы с автоматической генерацией хитбокса из-за другого координатного направления кости
Первая и вторая координаты XYZ — это противоположные углы хитбокса, которые находятся в локальном пространстве костей. Чтобы получить координаты хитбокса для начальной точки для редактирования, вы можете указать компилятору сбросить их в текстовый файл с помощью команды -h, например: pxstudiomdl.exe -h mymodel.qc >hitboxes.txt
Хитбоксы разделены на несколько разных групп (автоматически хитбоксы всегда начинаются с группы 0). Группы будут определять разные теги действий в анимации c помощью актов, а так же использовать множитель урона (это поведение можно изменить в коде игры).
Так же вы можете создать свои акты, путем редактирования кода.
Номер группы хитбоксов | Описание группы | Специальные анимации |
---|---|---|
0 | Общий | ACT_FLINCH_HEAD |
1 | Голова | - |
2 | Грудь | - |
3 | Живот | ACT_DIE_GUTSHOT |
4 | Левая рука | ACT_FLINCH_LEFTARM |
5 | Правая рука | ACT_FLINCH_RIGHTARM |
6 | Левая нога | ACT_FLINCH_LEFTLEG |
7 | Правая нога | ACT_FLINCH_RIGHTLEG |
$controller <ID#> "<bone name>" <controller axis> <axis limit 1> <axis limit 2>
- Контроллер используется для изменения вращения или движения кости. Это обычно используется для вращения головы или туловища у NPC, пушки у вертолета, или для анимации рта, которая управляется звуком из привязанной к модели энтити (lip sync). ID — уникальный идентификатор контроллера.
Существует два типа осей: вращательная и линейная, например, вращательная — XR, YR и ZR , а линейная — X, Y, Z. Важно отметить, что кости контроллера наследуют свою локальную ось от родительской кости , поэтому, если ваш контроллер не вращается так, как вы хотите, вам, возможно, придётся создать перед ним родительскую кость с другой ориентацией. Оси контроллера определяют диапазон движения.
Пример: $controller 0 "Bip01 Head" XR -60 60
$sequence "<название анимации>" "<название SMD-файла с анимацией>" <ключевые слова>
- Добавляет анимацию для модели, все ключевые слова разделяются пробелом. Таблица всех ключевых слов находится ниже.
Ключевое слово | Описание |
---|---|
fps <число> | Устанавливает скорость проигрывания кадров анимации в секунду после имени анимации |
loop | Указывает, что анимация должна быть зациклена |
event { <номер ивента> <аргумент 1> <аргумент 2> } | Указывает, какой ивент будет вызван при запуске анимации. Полный список актов, ивентов и их аргументов можно посмотреть в другой статье, или в коде игры. |
rotate <число> | Угол поворота анимации |
Пример: | |
$sequence "die" "die" fps 24 ACT_DIE_HEADSHOT { event 1000 1 } - Проигрывается анимация смерти игрока от выстрела в голову, вызывая ивент, который убивает персонажа на 1 кадре. |
$root <имя кости>
- Указывает, какая кость используется в качестве «корневой» кости, если имеется несколько корневых костей без родительских.$keepfreebones
- Отключает автоматическое удаление костей, к которым не прикреплена какая-либо геометрия. Может быть полезно для наложения разных моделей на общие анимации.$collapsebones
- Удаляет кости к которым не привязана геометрия$collapseboneaggressive
- Принудительно удаляет кости, к которым не привязана геометрия (более строгий режим)
Команда $jigglebone
Для этой команды выделен отдельный раздел, поскольку её описание довольно масштабное. При применении этой команды для кости, игровой движок будет динамически моделировать её физику во время игры, что позволяет создавать реалистичные вторичные движения, такие как раскачивание антенн, упругая плоть, висячие уши, брелки, флаги, плащи и т.д.
Периодические колебания симулируются путём задания значений жёсткости (stiffness) и демпфирования (damping). Жесткость: при низком значении, таком как 10, колебания будут очень размашистые и медленные, тогда как значение 500 породит очень быстрые колебания, но с малой амплитудой. Допустимые значения находятся в диапазоне от 1 до 1000.
Демпфирование – это своего рода величина сопротивления периодическому колебанию. Нулевое значение означает, что колебания не будут затухать. Демпфирование, равное 10, приводит к тому, что колебания будут затухать почти сразу. Допустимые значения находятся в диапазоне от 0 до 10.
Гравитация процедурных костей - это не глобальная гравитация, которая влияет на физические объекты, а локальная, и действует по направлению оси +Y (+Z в зависимости от редактора модели) кости.
Данная команда использует следующий синтаксис:
$jigglebone <имя кости> {
<группа свойств> {
<свойство> <значение> [<значение>]
…
}
}
Для этой команды существует несколько групп свойств, все они перечислены ниже.
Перечисленные ниже группы свойств можно комбинировать вместе, за некоторым исключением: is_rigid
и is_flexible
не могут использоваться вместе. Аналогично, has_base_spring
и is_boing
также нельзя использовать вместе.