Compiling Models
![Merge-arrows.png](/w/images/thumb/9/9f/Merge-arrows.png/50px-Merge-arrows.png)
В этой статье объясняется как использовать инструмент Source SDK studiomdl.exe
, расположенный в папке sourcesdk/bin
. Studiomdl нужен для компиляции исходных .SMD -файлов, экспортированных из пакета моделирования со скриптовым файлом .QC в конечный файл модели .MDL , который может использоваться движком.
Экспорт и компиляция моделей
Чтобы экспортировать модель из XSI и скомпилировать ее с помощью инструментов Source SDK, нужно:
- Экспоровать файл .SMD в какую-нибудь папку внутри директории
modelsrc
SDK игры, для которой компилируете файл.- Например, если компилируете модель для Counter-Strike Source, то в папку:
C:\Program Files\Steam\SteamApps\username\sourcesdk_content\cstrike\modelsrc
- или
C:\Program Files\Valve\Steam\SteamApps\username\sourcesdk_content\cstrike\modelsrc
- Где username - ваше логин в Steam.
- Создать .QC -файл там же, где лежит .SMD. Для примера можете посмотреть QC-файлы, которые уже находятся в директории
sourcesdk_content\cstrike\modelsrc
. - Убедитесь, что в Current Game на панели SDK Launcher стоит нужная игра (к примеру, Counter-Strike: Source).
- Запустите
studiomdl.exe
на .QC-файле. Для этого откройте командную строку Windows и наберите:cd "%sourcesdk%"
bin\studiomdl -game <YourGameDir> ..\sourcesdk_content\cstrike\modelsrc\mymodel.qc
Примечание: Такой способ позволяет упростить себе жизнь с помощью переменной "sourcesdk". Эта переменная среды создается при установке Source SDK.
- Как альтернативу вызову
studiomdl.exe
через окно запуска команд можно создать ярлык этой программы на рабочем столе. После этого для того чтобы скомпилировать модель .QC-файлы можно перетаскивать из окна Проводника прямо на ярлык.- Откройте проводник Windows, зайдите в папку
..sourcesdk\bin
, щелкнете правой кнопкой мыши наstudiomdl.exe
и выберите пунктSend To.. Desktop (create shortcut)
. Примечание: Недостатком метода с ярлыком на рабочем столе является сложность просмотра ошибок, которые выдает
studiomdl.exe
в процессе компиляции, так как окно компиляции закроется сразу же после ошибки. Если похоже, что модель корректно не компилируется, используйте способ вызова программы из командной строки, чтобы определить, выдает лиstudiomdl.exe
какие-то ошибки в процессе компиляции.
- Откройте проводник Windows, зайдите в папку
- Если в файлах .QC и .SMD нет ошибок, то программа создаст .MDL-файл модели в папке, прописанной в ключе
$modelname
в файле .QC. - Теперь можно запустить Model Viewer через SDK launcher, чтобы открыть файл модели для просмотра.
Вставка моделей на уровни
Модель можно поместить на карту с помощью редактора уровней Hammer, чтобы увидеть ее в игре
Чтобы поставить скомпилированную модель в Hammer'е:
- Откройте Hammer Editor из SDK Launcher.
- Добавьте энтити с помощью Entity Tool (
prop_static
,prop_dynamic
,prop_physics
,prop_physics_multiplayer
илиgeneric_actor
, в зависимости от игры и типа модели). В свойствах энтити Object Properties или World Model, зайдите в дерево модели, чтобы поместить модель. Информацию по использованию Entity Tool смотрите в документации Hammer'а.
Примеры моделей
Существует ряд моделей для Counter-Strike: Source и Half-Life 2 в директории sourcesdk_content
, которые вы можете использовать как образцы моделей. Они скомпилированы таким же способом, каким вы компилируете свои модели. Например, вы можете набрать эти команды в командной строке, чтобы скомпилировать образец держателя лампы:
cd "%sourcesdk%" bin\studiomdl ..\sourcesdk_content\cstrike\modelsrc\lamp\it_lampholder1.qc
Ошибки компиляции образцов моделей
Ошибка "Duplicate weightlist pelvisonly"
Если studiomdl высвечивает ошибку duplicate weightlist pelvisonly при компиляции модели male_06_sdk
, проблема может быть во включении файла Male_Animations_sdk/WeaponsAnims_Shared_sdk.qci
.
В нем есть строка $weightlist pelvisonly
, идентичная строке во включенном файле male_shared_XSI_sdk.qci
.
- В папке
Male_Animations_sdk
создайте копию файлаWeaponsAnims_Shared_sdk.qci
. - Переименуйте копию в
WeaponsAnims_Shared_sdk_X.qci
(или дайте любое другое уникальное имя). - Редактируйте файл
WeaponsAnims_Shared_sdk_X.qci
и закомментируйте строку $weightlist , вставив//
в начале строки.
//$weightlist pelvisonly ...
- Откройте для редактирования файл
male_06_sdk.qc
. - Измените строку $include "../male_animations_sdk/WeaponAnims_shared_sdk.qci" на
$include "../male_animations_sdk/WeaponAnims_shared_sdk_X.qci" //(или в соответствии с другим уникальным именем, которое вы дали раньше)
- Сохраните файл
male_06_sdk.qc
. - Перекомпилируйте
male_06_sdk.qc
, чтобы определить, исчезла ли ошибка.
Ошибка"Costly collision model"
По умолчанию studiomdl упрощает одной оболочкой модель для столкновений, состоящую более чем из 20 выпуклых частей (из соображений быстродействия). WARNING: COSTLY COLLISION MODEL!!!! (<xx> parts) Truncating model!!!! Model has 1 convex sub-parts
В некоторых примерах, однако, необходимо иметь более сложную или детализированную модель столкновений, который можно добиться использованием 20 отдельных кусочков. Чтобы отключить такое поведение программы, введите аргумент -fullcollide
в studiomdl.exe
при компиляции модели. Это можно сделать в командной строке так:
studiomdl -fullcollide "path/to/model.qc"
а с помощью .bat-файла для перетаскивания -- так:
@echo on cd "%sourcesdk%/bin" studiomdl.exe -fullcollide %1 @pause
или же это можно сделать с помощью инструмента вроде GUIStudioMDL или Studiocompiler .
При использовании любого из этих способов на модели столкновений, которая при обычной компиляции была бы упрощена, программа выдаст:
WARNING: COSTLY COLLISION MODEL!!!! Truncation DISABLED!!!! Model has <xx> convex sub-parts Collision model completed.
"Short conversion out of range"
Generating optimized mesh "c:\steam\steamapps\SourceMods\mod\models/your/model.sw.vtx": ERROR: short conversion out of range XXXXX ERROR: Aborted Processing on 'your/model.mdl'
Проблема в том, что studiomdl.exe пытается записать полоску (strip) треугольников более чем с 32767 номерами вершин. Это больше, чем поддержимает движок Source. Нужно быть в рамках ограничений движка, и вам понадобится уменьшить сложность этой части модели.
Например, самый высокий LOD .smd для Dog'а занимает всего 1.72 мегабайта и содержит 17,433 вершины. Что дает немногим меньше 6000 полигонов. 10000 полигонов -- что-то вроде неформального максимума числа полигонов для движка Source, при котором, максимальное число вершин будет около 10000*3 (32767).
Коды ошибок
* WARNING: (4768124) : ERROR: 'EXCEPTION_ACCESS_VIOLATION' (assert: 1)
Это происходит из-за того, что фигурная скобка у $shadowlod
находится в той же строке что и сама команда. Исправьте:
$shadowlod {
на
$shadowlod {