Ru/Compiling a model: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
No edit summary
m (obsolete language category)
 
(8 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{otherlang2
{{lang|Compiling a model|title=Компиляция модели|suf=:ru}}
|en=Compiling_a_model
{{toc-right}}
|fr=Compiling_a_model:fr
<div style="text-align:center;font-size:1.25em;margin:1em; border:solid 1px black;">'''Другая вариация на тему, делалась на основе Compiling Model Basics: {{L|Compiling_Models}}. Содержание, в общем и целом, не совпадает. Эта же статья пока не переведена'''</div>
}}
{{template:toc-right}}
<div style="text-align:center;font-size:1.25em;margin:1em; border:solid 1px black;">'''Другая вариация на тему, делалась на основе Compiling Model Basics: [[Compiling_Models:ru]]. Содержание, в общем и целом, не совпадает. Эта же статья пока не переведена'''</div>


В статье описано, как компилировать {{L|model|модели}} с помощью {{L|studiomdl}} для внутриигрового использования. Прежде чем начать, вам понадобятся какие-нибудь файлы {{L|Studio Model Data|SMD}}, которые вы и будете компилировать. Если у вас их еще нет, прочтите статью об {{L|Exporting a model|Экспорте моделей}}.


В статье описано, как компилировать [[model|модели]] с помощью [[studiomdl]] для внутриигрового использования. Прежде чем начать, вам понадобятся какие-нибудь файлы [[Studio Model Data|SMD]], которые вы и будете компилировать. Если у вас их еще нет, прочтите статью об [[Exporting a model:ru|Экспорте моделей]].
{{Tip|Слово "studio" в названии отсылает нас к временам создания {{L|Half-Life 1}}, когда для создания моделей Valve использовала пакет {{L|3D Studio Max}}.}}
 
{{tip|Слово "studio" в названии отсылает нас к временам создания [[Half-Life 1]], когда для создания моделей Valve использовала пакет [[3D Studio Max]].}}


== Формат QC ==
== Формат QC ==


Помимо файла в формате SMD с данными о модели, вам понадобится файл формата [[Qc|QC]], который - в чем-то похоже на файл материала [[VMT]] - описывает как нужно интерпретировать данные из SMD-файла. При подготовке к компиляции вы потратите большую часть времени именно на него.
Помимо файла в формате SMD с данными о модели, вам понадобится файл формата {{L|Qc|QC}}, который - в чем-то похоже на файл материала {{L|VMT}} - описывает как нужно интерпретировать данные из SMD-файла. При подготовке к компиляции вы потратите большую часть времени именно на него.


QC - это просто текстовый файл с расширением <code>.qc</code>. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели.
QC - это просто текстовый файл с расширением <code>.qc</code>. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели.
Line 19: Line 15:
== Порядок компиляции ==
== Порядок компиляции ==


При настройке компиляции важнейшим шагом является выбор правильной переменной [[VPROJECT]]. Вот как это можно сделать:
При настройке компиляции важнейшим шагом является выбор правильной переменной {{L|VPROJECT}}. Вот как это можно сделать:


#Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а
#Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а
#Только для программы studiomdl, запустив ее с параметром  <code>-game "<полный путь к директории с вашим [[gameinfo.txt]]>"</code>
#Только для программы studiomdl, запустив ее с параметром  <code>-game "<полный путь к директории с вашим {{L|gameinfo.txt}}>"</code>


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


*[[Notepadpp VDF languages|Notepad++]]
*{{L|Notepadpp VDF languages|Notepad++}}
*[[Highlighting and Compiling QCs with ConTEXT|ConTEXT]]
*{{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/).
Если вы не хотите или не можете использовать ни один из редакторов (перечислены выше), то компилировать QC-файлы придется, перетаскивая и кидая их на studiomdl.exe. Программу можно найти в папке <code>sourcesdk/bin/orangebox/bin/</code> (если нужно, замените orangebox/ на ep1/).


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


  "%sourcesdk%/bin/orangebox/bin/studiomdl" %1
  "%sourcesdk%/bin/orangebox/bin/studiomdl" %1
Line 44: Line 40:
== QC-команды ==
== QC-команды ==


:'''''Чтобы увидеть полный список документированных QC-команд''', посмотрите [[:Category:QC Commands]].''
:'''''Чтобы увидеть полный список документированных QC-команд''', посмотрите {{LCategory|QC Commands}}.''


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


  [[$modelname]] "props_sdk/myfirstmodel.mdl"
  {{L|$modelname}} "props_sdk/myfirstmodel.mdl"
  [[$body]] mybody "myfirstmodel-ref.smd"
  {{L|$body}} mybody "myfirstmodel-ref.smd"
  [[$staticprop]]
  {{L|$staticprop}}
  [[$surfaceprop]] combine_metal
  {{L|$surfaceprop}} combine_metal
  [[$cdmaterials]] "models/props_sdk"
  {{L|$cdmaterials}} "models/props_sdk"
   
   
  [[$sequence]] idle "myfirstmodel-idle.smd" loop fps 15
  {{L|$sequence}} idle "myfirstmodel-idle.smd" loop fps 15
   
   
  [[$collisionmodel]] "myfirstmodel-phys.smd" { [[$concave]] }
  {{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>[[$modelname:ru|$modelname]]</code>
;<code>{{L|$modelname}}</code>
:Определеяет имя и местоположение основного файла будущей модели - относительно папки <code><имя мода>/models/</code>. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения.
:Определеяет имя и местоположение основного файла будущей модели - относительно папки <code><имя мода>/models/</code>. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения.
;<code>[[$body:ru|$body]]</code>
;<code>{{L|$body}}</code>
:Указывает SMD, содержащий информацию о [[vertex|вершинах]], [[UV map|UV-развертке]], [[skeleton|скелете]] и [[envelope|envelope'ах]] модели. Это необходимо, чтобы у модели было какое-то представление в движке.
:Указывает SMD, содержащий информацию о {{L|vertex|вершинах}}, {{L|UV map|UV-развертке}}, {{L|skeleton|скелете}} и {{L|envelope|envelope'ах}} модели. Это необходимо, чтобы у модели было какое-то представление в движке.
:Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у [[npc_metropolice|метрокопа]], у которого их два: одно с [[npc_manhack|manhack'ом]] на плече, а другое без.
:Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у {{L|npc_metropolice|метрокопа}}, у которого их два: одно с {{L|npc_manhack|manhack'ом}} на плече, а другое без.
:{{tip|Более сложные модели используют вместо [[$body:ru|$body]] код <code>[[$model (QC):ru|$model]]</code>}}
:{{tip|Более сложные модели используют вместо {{L|$body}} код <code>{{L|$model (QC)|$model}}</code>}}
;<code>[[$staticprop:ru|$staticprop]]</code>
;<code>{{L|$staticprop}}</code>
:Информирует studiomdl о том, что у модели нет движущихся частей; в результате можно осуществить некоторые весьма важные оптимизации. Если вы собираетесь использовать модель с помощью [[prop_static]], то эту команду использовать необходимо, - однако, она не запретит использовать модель где-то еще (на самом деле, большинство моделей на физике тоже используют $staticprop)
:Информирует studiomdl о том, что у модели нет движущихся частей; в результате можно осуществить некоторые весьма важные оптимизации. Если вы собираетесь использовать модель с помощью {{L|prop_static}}, то эту команду использовать необходимо, - однако, она не запретит использовать модель где-то еще (на самом деле, большинство моделей на физике тоже используют $staticprop)
;<code>[[$surfaceprop:ru|$surfaceprop]]</code>
;<code>{{L|$surfaceprop}}</code>
:Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчёта).
:Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчёта).
:{{note|Такая же команда есть в [[material|материалах]]. Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...}}
:{{Note|Такая же команда есть в {{L|material|материалах}}. Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...}}
;<code>[[$cdmaterials:ru|$cdmaterials]]</code>
;<code>{{L|$cdmaterials}}</code>
:Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <code><директория с модом>/materials/</code>.
:Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <code><директория с модом>/materials/</code>.
;<code>[[$sequence:ru|$sequence]]</code>
;<code>{{L|$sequence}}</code>
:Несмотря на то, что эта модель используется с <code>$staticprop</code> и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство <code>fps</code> ни на что не будет влиять (но оно все равно будет при проигрывании).
:Несмотря на то, что эта модель используется с <code>$staticprop</code> и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство <code>fps</code> ни на что не будет влиять (но оно все равно будет при проигрывании).
;<code>[[$collisionmodel:ru|$collisionmodel]]</code>
;<code>{{L|$collisionmodel}}</code>
:Указывает SMD, который будет использоваться для рассчета [[physics|столкновений]] в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом).
:Указывает SMD, который будет использоваться для рассчета {{L|physics|столкновений}} в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом).
:{{tip|Если вы собираетесь анимировать модель столкновений, используйте <code>[[$collisionjoints:ru|$collisionjoints]]</code>.}}
:{{Tip|Если вы собираетесь анимировать модель столкновений, используйте <code>{{L|$collisionjoints}}</code>.}}
;<code>[[$concave:ru|$concave]]</code>
;<code>{{L|$concave}}</code>
:Модель для столкновений должна быть [[wikipedia:ru:Выпуклое_тело|выпуклой]], но можно создавать и ''невыпуклые'' формы комбинируя несколько выпуклых. Команда $concave указывает, что именно это вам и нужно - в противном случае все collision-меши будут обернуты одной выпуклой оболочкой.
:Модель для столкновений должна быть {{L|wikipedia:ru:Выпуклое_тело|выпуклой}}, но можно создавать и ''невыпуклые'' формы комбинируя несколько выпуклых. Команда $concave указывает, что именно это вам и нужно - в противном случае все collision-меши будут обернуты одной выпуклой оболочкой.


Приведённый образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель сами.
Приведённый образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель сами.
Line 87: Line 83:
== Compiling more advanced models ==
== Compiling more advanced models ==


*Для компиляции физических моделей используйте тег '''<code>[[Prop Data|prop_data]]</code>'''
*Для компиляции физических моделей используйте тег '''<code>{{L|Prop Data|prop_data}}</code>'''
*Для компилчции моделей персонажей используйте '''[[Compiling a character model]]'''
*Для компилчции моделей персонажей используйте '''{{L|Compiling a character model}}'''
*Для компиляции [[viewmodel]] используйте '''[[Compiling a viewmodel]]'''
*Для компиляции {{L|viewmodel}} используйте '''{{L|Compiling a viewmodel}}'''
*Для компиляции машин используйте '''[[Compiling a vehicle model]]'''
*Для компиляции машин используйте '''{{L|Compiling a vehicle model}}'''
*Общая помошь по компилированию '''[[:Category:QC Commands]]'''
*Общая помошь по компилированию '''{{LCategory|QC Commands}}'''


== Samples ==
== Samples ==
Line 104: Line 100:
== Common errors ==
== Common errors ==


*[[Costly collision model]]
*{{L|Costly collision model}}
*[[Duplicate weightlist pelvisonly]]
*{{L|Duplicate weightlist pelvisonly}}
*[[Short conversion out of range]]
*{{L|Short conversion out of range}}
*[[WARNING: (4768124) : ERROR: 'EXCEPTION ACCESS VIOLATION' (assert: 1)]]
*{{L|WARNING: (4768124) : ERROR: 'EXCEPTION ACCESS VIOLATION' (assert: 1)}}
*:If you receive "EXCEPTION_ACCESS_VIOLATION" without an error code, try compiling with [[HLMV]] running.
*:If you receive "EXCEPTION_ACCESS_VIOLATION" without an error code, try compiling with {{L|HLMV}} running.


== See also ==
== See also ==
* [[Qc|QC]]
* {{L|Qc|QC}}
*[[:Category:QC Commands]]
*{{LCategory|QC Commands}}
* [[studiomdl]]
* {{L|studiomdl}}
* [[Studiocompiler]], a graphical interface for studiomdl
* {{L|Studiocompiler}}, a graphical interface for studiomdl
* [[GUIStudioMDL]], another graphical interface
* {{L|GUIStudioMDL}}, another graphical interface
* [[Highlighting and Compiling QCs with ConTEXT]]
* {{L|Highlighting and Compiling QCs with ConTEXT}}
* [[Notepadpp VDF languages|Notepad++ VDF languages]]
* {{L|Notepadpp VDF languages|Notepad++ VDF languages}}


[[Category:Modeling:ru]]
{{ACategory|Modeling}}
[[Category:Tutorials:ru]]
{{ACategory|Tutorials}}

Latest revision as of 03:42, 22 August 2024

English (en)Français (fr)한국어 (ko)Русский (ru)中文 (zh)Translate (Translate)
Другая вариация на тему, делалась на основе 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