Compiling Models

В этой статье объясняется как использовать инструмент Source SDK studiomdl.exe, расположенный в папке sourcesdk/bin. Studiomdl нужен для компиляции исходных .SMD-файлов, экспортированных из пакета моделирования со скриптовым файлом .QC в конечный файл модели .MDL, который может использоваться движком.
Экспорт и компиляция моделей
Чтобы экспортировать модель из XSI и скомпилировать ее с помощью инструментов Source SDK, нужно:
- Экспоровать файл .SMD в какую-нибудь папку внутри директории modelsrcSDK игры, для которой компилируете файл.- Например, если компилируете модель для 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. Примечание: Такой способ позволяет упростить себе жизнь с помощью переменной "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
{

























