QC файл
Основные параметры *.QC файла для компиляции модели под Source Engine.

Что такое QC файл?
QC файл Это своеобразный конфигурационный файл. На деле это обычный *.txt содержащий команды начинающиеся со знака $, на пример $model. Также там может быть туча всяких сверх непонятных параметров, вроде дополнительных attach точек, контроллеров глаз, контроллеров flex анимации и много чего прочего.

Для редактирования QC файла может подойти хоть штатный блокнот, но я бы предложил использовать что-то более продвинутое вроде AkelPad или Notepad++.

Для Notepad++ есть пользовательский файл, добавляющий подсветку синтаксиса для VDF языка: (qc | vmt | vta | vdf | fgd | vbsp и других).

Для тех, кто использует Notepad++, я бы порекомендовал использовать плагин: Notepadpp VDF languages.

Примечание: При создании модели используется всего лишь 1 тип текстуры самой модели. То есть, поясняю, при создании металлической модели, вам придётся установить тип: Металла, чтобы при получении повреждений эта модель издавала специальные звуки. Скажем, для примера, вы создали модель бочки, она же не будет издавать звуки дерева, когда вы возьмёте её в руки (по умолчанию клавиша E) или же будете бить её монтировкой, правильно?

Другой пример: Если, например, вы создаёте модель ящика, вам потребуется установить тип — дерево (wood). Чтобы при получении повержении — ящик издавал звуки стрельбы или удара ломиком по дереву.
Пример базового QC файла
$modelname "mymodels\testmodel.mdl" $model "studio" "testmodel_reference.smd" $cdmaterials "models\mymodels\testmodel\" $surfaceprop "metal" $sequence idle "testmodel_idle.smd" act_idle fps 30.00 $collisionmodel "testmodel_col.smd" { $concave $mass 100.0 }
$modelname
$modelname "props/testmodels/test.mdl"

Параметр, который должен присутствовать в любом QC файле и желательно в самой первой строке. Он определяет имя и путь до модели. По умолчанию если просто написать например test.mdl то модель будет собрана в корень папки models игры (мода) .../hl2/models/

То есть папку models не надо указывать, если надо в корень то пишем имя модели.mdl и всё.
Если надо путь, то пишем например:

mymodels/folder1/folder2/test.mdl
$model
$model "studio" "testmodel_reference.smd"

Параметр, указывающий какой SMD исходник использовать для компиляции модели. Таких параметров может быть более одного. Лимита не знаю, но как минимум 10 запросто.

Параметр studio — здесь можно указать любое название которое вздумается, это может быть только английский текст, без пробелов. Например "moyamodel1" или "moyamodel_testref". По сути эта часть ни на что не влияет, её суть проявляется в параметре Bodygroups, но о них немного позже.

Параметр testmodel_reference.smd — здесь указывается имя SMD файла. Файл должен находится в этой же папке, что и сам QC файл. Если не хочется разводить бардак, то можно создать подпапку, положить файл туда и уже написать например так:

$model "studio" "papka2/testmodel_reference.smd"

Примечание: $model "studio" "papka2/testmodel_reference.smd"
$cdmaterials
$cdmaterials "models\testmodel\textures\"

Параметр, отвечающий за поиск моделью текстур, которые используются на ней. Здесь указываются пути до папок, в которых будет производиться поиск. Как в случае с $modelname, папку hl2/materials не надо указывать, по умолчанию если просто стоят "" или "/" поиск будет производиться только в hl2/materials (или: ваш мод/materials)

Советую складировать текстуры для моделей в папки после materials/models, чтобы не было проблем например с Hammer Editor, он не может использовать шейдер для моделей и такие текстуры находящиеся не в models будут засорять браузер текстур. Да и вам удобней будет искать в materials/models/...

Параметров $cdmaterials может быть также много, каждый пишем с новой строки. Поиск производится только в указанных папках, в следующих подпапках модель уже ничего не увидит. Переадресацию можно будет сделать только прописав другой путь в самом VMT файле.
$staticprop
$surfaceprop

Параметр, отвечающий за то, будет ли модель статичной, то есть просто какой-то физический предмет на карте или эта модель сможет быть динамической, то есть её можно будет крепить к чему-то, её можно передвигать, менять скины, запускать анимации.

Динамическая модель находится всегда в памяти игры и грузит вычислительные мощности. По этому всякое окружение надо делать с параметром $staticprop

Никаких дополнительных приписок он не требует. Если этого параметра нет — модель автоматически считается динамической, то есть prop_dynamic

В случае, если модель компилируется для Source FilmMaker, а не для создания карт можно вообще игнорировать этот параметр.
$surfaceprop
$surfaceprop "glass"

Параметр, отвечающий за свойства материала, из которого сделана модель. К сожалению Source поддерживает только одно свойство на всю модель, по этому бывает, что некоторые модели состоят из нескольких отдельных MDL файлов, чтобы например стекло в машине было стеклом, а сама машина железной.

Список поддерживаемых текстур подробнее можно узнать в статье — Свойства поверхности материала. Кликайте по названию статьи и ознакомьтесь с ней.

Данный параметр подходит только для статичных или динамических моделей. Для физических моделей вроде ящика, бочки... всего, что можно переместить, оттолкнуть выстрелом, откинуть монтировкой. Уже нужен другой параметр, о нём ниже. Для Source FilmMaker возможно этот параметр даже и не нужен, там нет физики. Пожалуй этот параметр и коллизия модели пригодится если надо будет например стрелять по этой модели.
$sequence
$sequence idle "testmodel_reference.smd" act_idle fps 30.00

Параметр, указывающий подключение анимации к модели. Любая модель даже статическая или динамическая, должна содержать IDLE анимацию. IDLE анимация, это просто состояние костей в модели так сказать в стандартном её состоянии или положении.

idle — название анимации, по идее не больно то и на что влияет.

testmodel_reference.smdSMD исходник, для моделей у которой не должно быть анимаций, или это даже статик, можно просто указать саму модель, из неё возьмутся только кости и их координаты + анимация если она там есть.

act_idle — вроде как указывает, что это анимация по умолчанию, анимация простоя... всегда так писал для всех моделей, будь они статик, динамик или даже физическое тело. Данные части используются для так скажем кодовых имён анимаций, чтобы сам код движка обращался к модели используя эти анимации.

fps 30.00 — скорость анимации. По умолчанию 30 это норма, можно искусственно замедлить или ускорить уже готовую анимацию, всего лишь изменяя это число.
$collisionmodel
$collisionmodel "testmodel_col.smd" { $concave $mass 100.0 }

Параметр, отвечающий за коллизию (модель столкновений) модели. То есть это модель, по которой мы бьём монтировкой. В которую попадают пули и прочее, на её основе на основную модель уже наносятся в нужных местах наложений повреждений.

testmodel_col.smdSMD исходник. Модель коллизии должна состоять из минимального количества mesh-ей, они обязательно должны быть замкнутыми (вроде куба) и иметь на ВСЮ модель только 1 группу сглаживания. Также на модели должна быть ЛЮБАЯ текстура, это не на что не влияет, главное чтобы был какой-то ID на модели.

$concave — указывает, что модель столкновений должна быть фигурной. То есть представьте, берём какой-то предмет, обтягиваем его плёнкой и получается что-то бесформенное, так будет выглядеть коллизия, если не указать этот параметр.

$mass 100.0 - вес модели в килограммах. По описанию с Wiki — это килограммы, но на деле в игре 100/200 игрок поднимает как пушинку. Для основательных моделей советую прописывать вес от 300 и более.

$maxconvexpieces 99 — позволяет превысить лимит "блоков" из которых состоит модель коллизии. Советую это делать только в крайних случаях. 99 — Максимальное количество блоков.

Есть ещё несколько параметров, но они не слишком важны. О них можно прочитать в статье — $collisionmodel. Кликайте по названию статьи и ознакомьтесь с ней.

В случае с Source FilmMaker модели не нужна коллизия вообще. Вы можете не указывать этот параметр. Но на всякий случай, можно опять же указать саму модель, сгенерируется ужасная модель коллизии, будет много матов от компилятора, но меньше вопросов от движка.
* Дополнительные и не обязательные параметры *
Ниже будут перечисляться дополнительные и не обязательные параметры, без которых компиляция модели пройдёт вполне успешно.

Почему я записал их в эту статью?

Наверное, потому, что вам это придётся знать. В будущем в работе с *.QC файлами вы 100% столкнётесь с этими параметрами.

Не скажу, что они вообще прям не приносят никакой пользы, но если вы не собираетесь прорабатывать модельку до мельчайших подробностей, тогда — да, вам это не нужно.

А если, всё-таки, собираетесь прорабатывать — то рекомендую вам с ними ознакомиться.
$texturegroup
$texturegroup "skinfamilies" { // это 1-ый скин модели (по умолчанию) его ID 0 { "texture_1.vmt" "skin_1.vmt" } // это 2-ой скин модели его ID 1 { "texture_2.vmt" "skin_2.vmt" } // далее будут 3, 4, 5 и так далее. }

Параметр, отвечающий за скины модели. То есть смену какой-то текстуры на другую. Первая и последняя фигурные скобки содержат блоки информации о скинах. Во внутренних фигурных скобках содержатся сами имена текстур.
$bodygroup
$BodyGroup "bg1" { studio "testmodel_ref_bg_1.smd" }
Параметр отвечающий за Bodygroups модели. Боди группы, это такие дополнительные части модели, которые можно скрывать или показывать.

bg1 — название группы
studio testmodel_ref_bg_1.smdSMD исходник модели группы, модель обязательно должна содержать такие же кости, как и сама основная модель.

Таких блоков может быть много (лимит не знаю, но более 20 точно). Каждый блок начинается с $bodygroup и содержит в фигурных скобках модель, путь до неё можно указывать как рассказывалось выше. Каждая Bodygroup может состоять только из 1 модели.
$scale
$scale 1.0

Параметр отвечающий за размер модели. Если вам лень переделывать модель, можно добавить этот параметр и насильно увеличить или уменьшить модель во время компиляции.

Стандартный размер модели — это 1.0 (по умолчанию). Если не надо производить никаких манипуляций с размером, то этот параметр вообще не нужен. Если вы укажите например 0.5, то модель будет собрана в размере в 50% от её исходника, если укажите например 2.0, то модель будет больше в 2 раза.

Внимание: Ни в коем случае не используйте данный параметр для моделей, в которых используется flex технология, то есть лицевая анимация. Все координаты flex останутся на родных местах и при движении например рта, будет двигаться шея или чего ещё хуже. Также этот параметр обязательно надо указывать перед всеми $model и $bodygroup, то есть сразу после $modelname
$mostlyopaque и $opaque
$mostlyopaque $opaque

Параметры отвечающие за исправление проблем с отображением прозрачности на моделях. Для компиляции указывается только один из них. Так сказать по вкусу и по результату. Чаще всего нужен именно $mostlyopaque.
$mostlyopaque и $opaque
$attachment "mouth" "head" -1.80 4.00 0.00 rotate 0 90 90

Параметр, отвечающий за установку Attachment'а на модели. Attachment рассчитывается от координат одной из костей модели.

mouth — Наименование Attachment'а
head — Кость, к которой крепится Attachment.

Далее идут координаты, за счёт них можно немного сдвинуть сам Attachment относительно кости по осям X.Y.Z и по углам (rotate 0 90 90)
Вернуться в каталог уроков