Ru/Compiling a model: Difference between revisions
No edit summary |
m (obsolete language category) |
||
(8 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|Compiling a model|title=Компиляция модели|suf=:ru}} | ||
| | {{toc-right}} | ||
| | <div style="text-align:center;font-size:1.25em;margin:1em; border:solid 1px black;">'''Другая вариация на тему, делалась на основе Compiling Model Basics: {{L|Compiling_Models}}. Содержание, в общем и целом, не совпадает. Эта же статья пока не переведена'''</div> | ||
}} | |||
{{ | |||
<div style="text-align:center;font-size:1.25em;margin:1em; border:solid 1px black;">'''Другая вариация на тему, делалась на основе Compiling Model Basics: | |||
В статье описано, как компилировать {{L|model|модели}} с помощью {{L|studiomdl}} для внутриигрового использования. Прежде чем начать, вам понадобятся какие-нибудь файлы {{L|Studio Model Data|SMD}}, которые вы и будете компилировать. Если у вас их еще нет, прочтите статью об {{L|Exporting a model|Экспорте моделей}}. | |||
{{Tip|Слово "studio" в названии отсылает нас к временам создания {{L|Half-Life 1}}, когда для создания моделей Valve использовала пакет {{L|3D Studio Max}}.}} | |||
{{ | |||
== Формат QC == | == Формат QC == | ||
Помимо файла в формате SMD с данными о модели, вам понадобится файл формата | Помимо файла в формате SMD с данными о модели, вам понадобится файл формата {{L|Qc|QC}}, который - в чем-то похоже на файл материала {{L|VMT}} - описывает как нужно интерпретировать данные из SMD-файла. При подготовке к компиляции вы потратите большую часть времени именно на него. | ||
QC - это просто текстовый файл с расширением <code>.qc</code>. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели. | QC - это просто текстовый файл с расширением <code>.qc</code>. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели. | ||
Line 19: | Line 15: | ||
== Порядок компиляции == | == Порядок компиляции == | ||
При настройке компиляции важнейшим шагом является выбор правильной переменной | При настройке компиляции важнейшим шагом является выбор правильной переменной {{L|VPROJECT}}. Вот как это можно сделать: | ||
#Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а | #Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а | ||
#Только для программы studiomdl, запустив ее с параметром <code>-game "<полный путь к директории с вашим | #Только для программы studiomdl, запустив ее с параметром <code>-game "<полный путь к директории с вашим {{L|gameinfo.txt}}>"</code> | ||
Что касается работы с QC-файлами для моделей, то вам очень, правда - очень пригодится продвинутый текстовый редактор, который поддерживает выделение синтаксиса цветом и который сможет запускать studiomdl - без ручной работы с командной строкой или bat-файлами. На текущий момент существует два таких редактора: | Что касается работы с QC-файлами для моделей, то вам очень, правда - очень пригодится продвинутый текстовый редактор, который поддерживает выделение синтаксиса цветом и который сможет запускать studiomdl - без ручной работы с командной строкой или bat-файлами. На текущий момент существует два таких редактора: | ||
* | *{{L|Notepadpp VDF languages|Notepad++}} | ||
* | *{{L|Highlighting and Compiling QCs with ConTEXT|ConTEXT}} | ||
Скачайте редактор и правила подсветки синтаксиса, настройте исполнение studiomdl - и все, можно приступать к работе! | Скачайте редактор и правила подсветки синтаксиса, настройте исполнение studiomdl - и все, можно приступать к работе! | ||
Line 33: | Line 29: | ||
=== Сложный способ === | === Сложный способ === | ||
Если вы не хотите или не можете использовать ни один из | Если вы не хотите или не можете использовать ни один из редакторов (перечислены выше), то компилировать QC-файлы придется, перетаскивая и кидая их на studiomdl.exe. Программу можно найти в папке <code>sourcesdk/bin/orangebox/bin/</code> (если нужно, замените orangebox/ на ep1/). | ||
Легче это будет делать, если для автоматизации создать в каком-нибудь легко доступном месте на компьютере .cmd-файл. Это просто | Легче это будет делать, если для автоматизации создать в каком-нибудь легко доступном месте на компьютере .cmd-файл. Это просто переименованный .txt с каким-нибудь таким текстом: | ||
"%sourcesdk%/bin/orangebox/bin/studiomdl" %1 | "%sourcesdk%/bin/orangebox/bin/studiomdl" %1 | ||
Line 44: | Line 40: | ||
== QC-команды == | == QC-команды == | ||
:'''''Чтобы увидеть полный список документированных QC-команд''', посмотрите | :'''''Чтобы увидеть полный список документированных QC-команд''', посмотрите {{LCategory|QC Commands}}.'' | ||
Вот QC-файл для неанимированного статичного prop'а: | Вот QC-файл для неанимированного статичного prop'а: | ||
{{L|$modelname}} "props_sdk/myfirstmodel.mdl" | |||
{{L|$body}} mybody "myfirstmodel-ref.smd" | |||
{{L|$staticprop}} | |||
{{L|$surfaceprop}} combine_metal | |||
{{L|$cdmaterials}} "models/props_sdk" | |||
{{L|$sequence}} idle "myfirstmodel-idle.smd" loop fps 15 | |||
{{L|$collisionmodel}} "myfirstmodel-phys.smd" { {{L|$concave}} } | |||
{{tip|Используемый по умолчанию путь для файлов SMD совпадает с расположением QC. Если что-либо находится в другой папке, вы в любой команде можете указать относительные, или же явно прописанные пути.}} | {{tip|Используемый по умолчанию путь для файлов SMD совпадает с расположением QC. Если что-либо находится в другой папке, вы в любой команде можете указать относительные, или же явно прописанные пути.}} | ||
Line 62: | Line 58: | ||
Ниже приведен краткий обзор каждой из команд. Чтобы просмотреть страницы с более подробной информацией, щелкните по именам команд. Here is a brief summary of what each of those commands does. For more detail, click on the names. | Ниже приведен краткий обзор каждой из команд. Чтобы просмотреть страницы с более подробной информацией, щелкните по именам команд. Here is a brief summary of what each of those commands does. For more detail, click on the names. | ||
;<code> | ;<code>{{L|$modelname}}</code> | ||
:Определеяет имя и местоположение основного файла будущей модели - относительно папки <code><имя мода>/models/</code>. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения. | :Определеяет имя и местоположение основного файла будущей модели - относительно папки <code><имя мода>/models/</code>. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения. | ||
;<code> | ;<code>{{L|$body}}</code> | ||
:Указывает SMD, содержащий информацию о | :Указывает SMD, содержащий информацию о {{L|vertex|вершинах}}, {{L|UV map|UV-развертке}}, {{L|skeleton|скелете}} и {{L|envelope|envelope'ах}} модели. Это необходимо, чтобы у модели было какое-то представление в движке. | ||
:Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у | :Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у {{L|npc_metropolice|метрокопа}}, у которого их два: одно с {{L|npc_manhack|manhack'ом}} на плече, а другое без. | ||
:{{tip|Более сложные модели используют вместо | :{{tip|Более сложные модели используют вместо {{L|$body}} код <code>{{L|$model (QC)|$model}}</code>}} | ||
;<code> | ;<code>{{L|$staticprop}}</code> | ||
:Информирует studiomdl о том, что у модели нет движущихся частей; в результате можно осуществить некоторые весьма важные оптимизации. Если вы собираетесь использовать модель с помощью | :Информирует studiomdl о том, что у модели нет движущихся частей; в результате можно осуществить некоторые весьма важные оптимизации. Если вы собираетесь использовать модель с помощью {{L|prop_static}}, то эту команду использовать необходимо, - однако, она не запретит использовать модель где-то еще (на самом деле, большинство моделей на физике тоже используют $staticprop) | ||
;<code> | ;<code>{{L|$surfaceprop}}</code> | ||
:Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчёта). | :Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчёта). | ||
:{{ | :{{Note|Такая же команда есть в {{L|material|материалах}}. Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...}} | ||
;<code> | ;<code>{{L|$cdmaterials}}</code> | ||
:Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <code><директория с модом>/materials/</code>. | :Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <code><директория с модом>/materials/</code>. | ||
;<code> | ;<code>{{L|$sequence}}</code> | ||
:Несмотря на то, что эта модель используется с <code>$staticprop</code> и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство <code>fps</code> ни на что не будет влиять (но оно все равно будет при проигрывании). | :Несмотря на то, что эта модель используется с <code>$staticprop</code> и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство <code>fps</code> ни на что не будет влиять (но оно все равно будет при проигрывании). | ||
;<code> | ;<code>{{L|$collisionmodel}}</code> | ||
:Указывает SMD, который будет использоваться для рассчета | :Указывает SMD, который будет использоваться для рассчета {{L|physics|столкновений}} в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом). | ||
:{{ | :{{Tip|Если вы собираетесь анимировать модель столкновений, используйте <code>{{L|$collisionjoints}}</code>.}} | ||
;<code> | ;<code>{{L|$concave}}</code> | ||
:Модель для столкновений должна быть | :Модель для столкновений должна быть {{L|wikipedia:ru:Выпуклое_тело|выпуклой}}, но можно создавать и ''невыпуклые'' формы комбинируя несколько выпуклых. Команда $concave указывает, что именно это вам и нужно - в противном случае все collision-меши будут обернуты одной выпуклой оболочкой. | ||
Приведённый образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель сами. | Приведённый образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель сами. | ||
Line 87: | Line 83: | ||
== Compiling more advanced models == | == Compiling more advanced models == | ||
*Для компиляции физических моделей используйте тег '''<code> | *Для компиляции физических моделей используйте тег '''<code>{{L|Prop Data|prop_data}}</code>''' | ||
*Для компилчции моделей персонажей используйте ''' | *Для компилчции моделей персонажей используйте '''{{L|Compiling a character model}}''' | ||
*Для компиляции | *Для компиляции {{L|viewmodel}} используйте '''{{L|Compiling a viewmodel}}''' | ||
*Для компиляции машин используйте ''' | *Для компиляции машин используйте '''{{L|Compiling a vehicle model}}''' | ||
*Общая помошь по компилированию ''' | *Общая помошь по компилированию '''{{LCategory|QC Commands}}''' | ||
== Samples == | == Samples == | ||
Line 104: | Line 100: | ||
== Common errors == | == Common errors == | ||
* | *{{L|Costly collision model}} | ||
* | *{{L|Duplicate weightlist pelvisonly}} | ||
* | *{{L|Short conversion out of range}} | ||
* | *{{L|WARNING: (4768124) : ERROR: 'EXCEPTION ACCESS VIOLATION' (assert: 1)}} | ||
*:If you receive "EXCEPTION_ACCESS_VIOLATION" without an error code, try compiling with | *:If you receive "EXCEPTION_ACCESS_VIOLATION" without an error code, try compiling with {{L|HLMV}} running. | ||
== See also == | == See also == | ||
* | * {{L|Qc|QC}} | ||
* | *{{LCategory|QC Commands}} | ||
* | * {{L|studiomdl}} | ||
* | * {{L|Studiocompiler}}, a graphical interface for studiomdl | ||
* | * {{L|GUIStudioMDL}}, another graphical interface | ||
* | * {{L|Highlighting and Compiling QCs with ConTEXT}} | ||
* | * {{L|Notepadpp VDF languages|Notepad++ VDF languages}} | ||
{{ACategory|Modeling}} | |||
{{ACategory|Tutorials}} |
Latest revision as of 03:42, 22 August 2024
В статье описано, как компилировать модели с помощью studiomdl для внутриигрового использования. Прежде чем начать, вам понадобятся какие-нибудь файлы SMD , которые вы и будете компилировать. Если у вас их еще нет, прочтите статью об Экспорте моделей .

Формат QC
Помимо файла в формате SMD с данными о модели, вам понадобится файл формата QC , который - в чем-то похоже на файл материала VMT - описывает как нужно интерпретировать данные из SMD-файла. При подготовке к компиляции вы потратите большую часть времени именно на него.
QC - это просто текстовый файл с расширением .qc
. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели.
Порядок компиляции
При настройке компиляции важнейшим шагом является выбор правильной переменной VPROJECT . Вот как это можно сделать:
- Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а
- Только для программы studiomdl, запустив ее с параметром
-game "<полный путь к директории с вашим gameinfo.txt >"
Что касается работы с 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 .
Вот QC-файл для неанимированного статичного prop'а:
$modelname "props_sdk/myfirstmodel.mdl" $body mybody "myfirstmodel-ref.smd" $staticprop $surfaceprop combine_metal $cdmaterials "models/props_sdk" $sequence idle "myfirstmodel-idle.smd" loop fps 15 $collisionmodel "myfirstmodel-phys.smd" { $concave }

Ниже приведен краткий обзор каждой из команд. Чтобы просмотреть страницы с более подробной информацией, щелкните по именам команд. Here is a brief summary of what each of those commands does. For more detail, click on the names.
$modelname
- Определеяет имя и местоположение основного файла будущей модели - относительно папки
<имя мода>/models/
. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения. $body
- Указывает SMD, содержащий информацию о вершинах , UV-развертке , скелете и envelope'ах модели. Это необходимо, чтобы у модели было какое-то представление в движке.
- Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у метрокопа , у которого их два: одно с manhack'ом на плече, а другое без.
$staticprop
- Информирует studiomdl о том, что у модели нет движущихся частей; в результате можно осуществить некоторые весьма важные оптимизации. Если вы собираетесь использовать модель с помощью prop_static , то эту команду использовать необходимо, - однако, она не запретит использовать модель где-то еще (на самом деле, большинство моделей на физике тоже используют $staticprop)
$surfaceprop
- Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчёта).
Примечание:Такая же команда есть в материалах . Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...
$cdmaterials
- Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки
<директория с модом>/materials/
. $sequence
- Несмотря на то, что эта модель используется с
$staticprop
и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойствоfps
ни на что не будет влиять (но оно все равно будет при проигрывании). $collisionmodel
- Указывает SMD, который будет использоваться для рассчета столкновений в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом).
Совет:Если вы собираетесь анимировать модель столкновений, используйте
$collisionjoints
.$concave
- Модель для столкновений должна быть выпуклой , но можно создавать и невыпуклые формы комбинируя несколько выпуклых. Команда $concave указывает, что именно это вам и нужно - в противном случае все collision-меши будут обернуты одной выпуклой оболочкой.
Приведённый образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель сами.
Compiling more advanced models
- Для компиляции физических моделей используйте тег
prop_data
- Для компилчции моделей персонажей используйте Compiling a character model
- Для компиляции viewmodel используйте Compiling a viewmodel
- Для компиляции машин используйте Compiling a vehicle model
- Общая помошь по компилированию Category:QC Commands
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
- Costly collision model
- Duplicate weightlist pelvisonly
- Short conversion out of range
- WARNING: (4768124) : ERROR: 'EXCEPTION ACCESS VIOLATION' (assert: 1)
- If you receive "EXCEPTION_ACCESS_VIOLATION" without an error code, try compiling with HLMV running.
See also
- QC
- Category:QC Commands
- studiomdl
- Studiocompiler , a graphical interface for studiomdl
- GUIStudioMDL , another graphical interface
- Highlighting and Compiling QCs with ConTEXT
- Notepad++ VDF languages