Compiling Models

From Valve Developer Community
< Ru
Jump to: navigation, search
English (en)Русский (ru)Translate (Translate)
Merge-arrows.png
It has been suggested that this article or section be merged into Compiling_a_model:ru. (Discuss)

В этой статье объясняется как использовать инструмент Source SDK studiomdl.exe(en), расположенный в папке sourcesdk/bin. Studiomdl нужен для компиляции исходных .SMD(en)-файлов, экспортированных из пакета моделирования(en) со скриптовым файлом .QC(en) в конечный файл модели .MDL(en), который может использоваться движком.

Экспорт и компиляция моделей

Чтобы экспортировать модель из XSI(en) и скомпилировать ее с помощью инструментов Source SDK, нужно:

  1. Экспоровать файл .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.
  2. Создать .QC(en)-файл там же, где лежит .SMD. Для примера можете посмотреть QC-файлы, которые уже находятся в директории sourcesdk_content\cstrike\modelsrc.
  3. Убедитесь, что в Current Game на панели SDK Launcher стоит нужная игра (к примеру, Counter-Strike: Source).
  4. Запустите studiomdl.exe на .QC-файле. Для этого откройте командную строку Windows и наберите:
    cd "%sourcesdk%"
    bin\studiomdl -game <YourGameDir> ..\sourcesdk_content\cstrike\modelsrc\mymodel.qc

    Note.pngПримечание: Такой способ позволяет упростить себе жизнь с помощью переменной "sourcesdk". Эта переменная среды создается при установке Source SDK.
  5. Как альтернативу вызову studiomdl.exe через окно запуска команд можно создать ярлык этой программы на рабочем столе. После этого для того чтобы скомпилировать модель .QC-файлы можно перетаскивать из окна Проводника прямо на ярлык.
    Откройте проводник Windows, зайдите в папку ..sourcesdk\bin, щелкнете правой кнопкой мыши на studiomdl.exe и выберите пункт Send To.. Desktop (create shortcut).

    Note.pngПримечание: Недостатком метода с ярлыком на рабочем столе является сложность просмотра ошибок, которые выдает studiomdl.exe в процессе компиляции, так как окно компиляции закроется сразу же после ошибки. Если похоже, что модель корректно не компилируется, используйте способ вызова программы из командной строки, чтобы определить, выдает ли studiomdl.exe какие-то ошибки в процессе компиляции.
  6. Если в файлах .QC и .SMD нет ошибок, то программа создаст .MDL-файл модели в папке, прописанной в ключе $modelname в файле .QC.
  7. Теперь можно запустить Model Viewer(en) через SDK launcher, чтобы открыть файл модели для просмотра.

Вставка моделей на уровни

Модель можно поместить на карту с помощью редактора уровней Hammer, чтобы увидеть ее в игре

Чтобы поставить скомпилированную модель в Hammer'е:

  1. Откройте Hammer Editor(en) из SDK Launcher.
  2. Добавьте энтити с помощью Entity Tool (prop_static, prop_dynamic, prop_physics, prop_physics_multiplayer или generic_actor, в зависимости от игры и типа модели). В свойствах энтити Object Properties или World Model, зайдите в дерево модели, чтобы поместить модель. Информацию по использованию Entity Tool(en) смотрите в документации 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(en) или Studiocompiler(en).
При использовании любого из этих способов на модели столкновений, которая при обычной компиляции была бы упрощена, программа выдаст:

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
{

См. также