Компиляция модели

From Valve Developer Community
Jump to: navigation, search
English (en)Français (fr)한국어 (ko)Русский (ru)中文 (zh)Flag-white.png
Другая вариация на тему, делалась на основе Compiling Model Basics: Compiling_Models(en). Содержание, в общем и целом, не совпадает. Эта же статья пока не переведена

В статье описано, как компилировать модели(en) с помощью studiomdl(en) для внутриигрового использования. Прежде чем начать, вам понадобятся какие-нибудь файлы SMD(en), которые вы и будете компилировать. Если у вас их еще нет, прочтите статью об Экспорте моделей(en).

Tip.pngСовет:Слово "studio" в названии отсылает нас к временам создания Half-Life 1(en), когда для создания моделей Valve использовала пакет 3D Studio Max(en).

Формат QC

Помимо файла в формате SMD с данными о модели, вам понадобится файл формата QC(en), который - в чем-то похоже на файл материала VMT(en) - описывает как нужно интерпретировать данные из SMD-файла. При подготовке к компиляции вы потратите большую часть времени именно на него.

QC - это просто текстовый файл с расширением .qc. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели.

Порядок компиляции

При настройке компиляции важнейшим шагом является выбор правильной переменной VPROJECT(en). Вот как это можно сделать:

  1. Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а
  2. Только для программы studiomdl, запустив ее с параметром -game "<полный путь к директории с вашим gameinfo.txt(en)>"

Что касается работы с QC-файлами для моделей, то вам очень, правда - очень пригодится продвинутый текстовый редактор, который поддерживает выделение синтаксиса цветом и который сможет запускать studiomdl - без ручной работы с командной строкой или bat-файлами. На текущий момент существует два таких редактора:

Скачайте редактор и правила подсветки синтаксиса, настройте исполнение studiomdl - и все, можно приступать к работе!

Сложный способ

Если вы не хотите или не можете использовать ни один из редакторов (перечислены выше), то компилировать QC-файлы придется, перетаскивая и кидая их на studiomdl.exe. Программу можно найти в папке sourcesdk/bin/orangebox/bin/ (если нужно, замените orangebox/ на ep1/).

Легче это будет делать, если для автоматизации создать в каком-нибудь легко доступном месте на компьютере .cmd-файл. Это просто переименованный .txt с каким-нибудь таким текстом:

"%sourcesdk%/bin/orangebox/bin/studiomdl" %1
pause

Киньте на него ваш файл с описанием, как кидали бы на сам исполняемый файл (studiomdl.exe) - по своей сути этот .cmd нечто вроде ярлыка.

QC-команды

Чтобы увидеть полный список документированных QC-команд, посмотрите Category:QC Commands(en).

Вот QC-файл для неанимированного статичного prop'а:

$modelname(en)	"props_sdk/myfirstmodel.mdl"
$body(en) mybody	"myfirstmodel-ref.smd"
$staticprop(en)
$surfaceprop(en)	combine_metal
$cdmaterials(en)	"models/props_sdk"

$sequence(en) idle	"myfirstmodel-idle.smd" loop fps 15

$collisionmodel(en)	"myfirstmodel-phys.smd" { $concave(en) }
Tip.pngСовет:Используемый по умолчанию путь для файлов SMD совпадает с расположением QC. Если что-либо находится в другой папке, вы в любой команде можете указать относительные, или же явно прописанные пути.

Ниже приведен краткий обзор каждой из команд. Чтобы просмотреть страницы с более подробной информацией, щелкните по именам команд. Here is a brief summary of what each of those commands does. For more detail, click on the names.

$modelname(en)
Определеяет имя и местоположение основного файла будущей модели - относительно папки <имя мода>/models/. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения.
$body(en)
Указывает SMD, содержащий информацию о вершинах(en), UV-развертке(en), скелете(en) и envelope'ах(en) модели. Это необходимо, чтобы у модели было какое-то представление в движке.
Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у метрокопа(en), у которого их два: одно с manhack'ом(en) на плече, а другое без.
Tip.pngСовет:Более сложные модели используют вместо $body(en) код $model(en)
$staticprop(en)
Информирует studiomdl о том, что у модели нет движущихся частей; в результате можно осуществить некоторые весьма важные оптимизации. Если вы собираетесь использовать модель с помощью prop_static(en), то эту команду использовать необходимо, - однако, она не запретит использовать модель где-то еще (на самом деле, большинство моделей на физике тоже используют $staticprop)
$surfaceprop(en)
Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчёта).
Note.pngПримечание:Такая же команда есть в материалах(en). Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...
$cdmaterials(en)
Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <директория с модом>/materials/.
$sequence(en)
Несмотря на то, что эта модель используется с $staticprop и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство fps ни на что не будет влиять (но оно все равно будет при проигрывании).
$collisionmodel(en)
Указывает SMD, который будет использоваться для рассчета столкновений(en) в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом).
Tip.pngСовет:Если вы собираетесь анимировать модель столкновений, используйте $collisionjoints(en).
$concave(en)
Модель для столкновений должна быть выпуклой(en), но можно создавать и невыпуклые формы комбинируя несколько выпуклых. Команда $concave указывает, что именно это вам и нужно - в противном случае все collision-меши будут обернуты одной выпуклой оболочкой.

Приведённый образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель сами.

Compiling more advanced models

Samples

Valve provide numerous sample models in the SDK for you to learn from, including several fully-articulated characters and players. They can be found at:

  • sourcesdk_content\cstrike\modelsrc
  • sourcesdk_content\hl2\modelsrc
  • sourcesdk_content\hl2mp\modelsrc
  • sourcesdk_content\generic\modelsrc (a walking animation for Valve's default skeleton)

Common errors

See also