Difference between revisions of "Compiling a model:ru"

From Valve Developer Community
Jump to: navigation, search
(QC commands)
(QC-команды)
Line 42: Line 42:
 
:'''''Чтобы увидеть полный список документированных QC-команд''', посмотрите [[:Category:QC Commands]].''
 
:'''''Чтобы увидеть полный список документированных QC-команд''', посмотрите [[:Category:QC Commands]].''
  
Вот QC-файлы для неанимированного статичного prop'а:
+
Вот QC-файл для неанимированного статичного prop'а:
  
 
  [[$modelname]] "props_sdk/myfirstmodel.mdl"
 
  [[$modelname]] "props_sdk/myfirstmodel.mdl"
Line 54: Line 54:
 
  [[$collisionmodel]] "myfirstmodel-phys.smd" { [[$concave]] }
 
  [[$collisionmodel]] "myfirstmodel-phys.smd" { [[$concave]] }
  
{{tip|Путь для файлов SMD по умолчанию совпадает с расположением QC. Если что-то находится в другой папке, то в любой команде вы можете указать относительные или явно прописанные пути.}}
+
{{tip|Используемый по умолчанию путь для файлов SMD совпадает с расположением QC. Если что-либо находится в другой папке, вы в любой команде можете указать относительные, или же явно прописанные пути.}}
  
Ниже приведен краткий обзор того, что каждая из команд делает. Чтобы просмотреть страницы с более подробной информацией, щелкните по именам команд. 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]]</code>
+
;<code>[[$modelname:ru|$modelname]]</code>
:Определеяет имя и местоположение основного файла будущей скомпилированной модели относительно папки <code><имя мода>/models/</code>. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения.
+
:Определеяет имя и местоположение основного файла будущей модели - относительно папки <code><имя мода>/models/</code>. При компиляции будет создано еще несколько файлов, и их имя будет образовано от указанного здесь значения.
 
;<code>[[$body:ru|$body]]</code>
 
;<code>[[$body:ru|$body]]</code>
:Defines the SMD that contains the [[vertex]], [[UV map]], [[skeleton]] and [[envelope]] data for the model. Without this, your model will have no physical appearance.
+
:Указывает SMD, содержащий информацию о [[vertex|вершинах]], [[UV map|UV-развертке]], [[skeleton|скелете]] и [[envelope|envelope'ах]] модели. Это необходимо, чтобы у модели было какое-то представление в движке.
:A name ('mybody') is given because it is possible for a model to have several bodies - like the [[npc_metropolice|metrocop]], who has one with a [[npc_manhack|manhack]] attached and one without.
+
:Имя ('mybody') дают из-за того, что у модели может быть несколько "тел", как например у [[npc_metropolice|метрокопа]], у которого их два: одно с [[npc_manhack|manhack'ом]] на плече, а другое без.
 
:{{tip|Более сложные модели используют вместо [[$body:ru|$body]] код <code>[[$model (QC):ru|$model]]</code>}}
 
:{{tip|Более сложные модели используют вместо [[$body:ru|$body]] код <code>[[$model (QC):ru|$model]]</code>}}
 
;<code>[[$staticprop:ru|$staticprop]]</code>
 
;<code>[[$staticprop:ru|$staticprop]]</code>
:Tells studiomdl that the model has no moving parts, allowing it to perform several important optimisations. It is required if the model is to be used with [[prop_static]], but does not prevent it from being used elsewhere! (Indeed, most models that are to be physically-simulated use the command as well.)
+
:Информирует studiomdl, что у модели нет движущихся частей, что дает возможность осуществить несколько важных оптимизаций. Команда необходима если вы собираетесь использовать модель с помощью [[prop_static]], но она не запретит использовать модель где-то еще (и в самом деле, большинство моделей на физике тоже используют $staticprop)
 
;<code>[[$surfaceprop:ru|$surfaceprop]]</code>
 
;<code>[[$surfaceprop:ru|$surfaceprop]]</code>
:How the object's surface reacts to other entities in the world. Also helps define the weight of the object, if the QC command to calculate it is used.
+
:Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчета).
:{{note|An identical command is used in [[material]]s. Should they clash on a model, the QC version is chosen. It isn't clear why this functionality is duplicated.}}
+
:{{note|Такая же команда есть в [[material|материалах]]. Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...}}
 
;<code>[[$cdmaterials:ru|$cdmaterials]]</code>
 
;<code>[[$cdmaterials:ru|$cdmaterials]]</code>
:The folder to load the model's material(s) from. Remember that the materials must be the same name as the ones you applied in your modelling package. The value is relative to <code><mod folder>/materials/</code>.
+
:Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <code><директория с модом>/materials/</code>.
 
;<code>[[$sequence:ru|$sequence]]</code>
 
;<code>[[$sequence:ru|$sequence]]</code>
:Even though this model is <code>$staticprop</code> and therefore not animated, Source needs an empty 'idle' animation to correctly handle it. If the animation is truly idle it will only have one frame, rendering the <code>fps</code> property meaningless (but it's included anyway in demonstration).
+
:Несмотря на то, что эта модель используется с <code>$staticprop</code> и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство <code>fps</code> ни на что не будет влиять (но оно все равно будет при проигрывании).
 
;<code>[[$collisionmodel:ru|$collisionmodel]]</code>
 
;<code>[[$collisionmodel:ru|$collisionmodel]]</code>
:Defines the SMD that will be used to calculate [[physics]] collisions by the engine. Without a collision model, physical objects will simply fly through the model (which in some cases may be what you want).
+
:Указывает SMD, который будет использоваться для рассчета [[physics|столкновений]] в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом).
:{{tip|If your collision model needs to be animated, use <code>[[$collisionjoints:ru|$collisionjoints]]</code> instead.}}
+
:{{tip|Если вы собираетесь анимировать модель столкновений, используйте <code>[[$collisionjoints:ru|$collisionjoints]]</code>.}}
 
;<code>[[$concave:ru|$concave]]</code>
 
;<code>[[$concave:ru|$concave]]</code>
:A collision model must be [[Wikipedia:convex|convex]], but you can create [[Wikipedia:concave|concave]] shapes by combining more than one of them into the same model. This command tells studiomdl that this is what you intend - without it, all of your collision SMD's meshes will instead be merged into one shape that wraps them all around.
+
:Модель для столкновений должна быть [[Wikipedia:convex|выпуклой]], но можно создавать и [[Wikipedia:concave|невыпуклые]] формы из нескольких выпуклых. Команда $concave указывает, что именно это вам и нужно - иначе все collision-меши будут обернуты одной выпуклой оболочкой.
  
You will be able to use this sample to compile your own model (minus any animations), so swap in your own SMDs and see what happens.
+
Приведенный образец описания можно использовать для своей модели (если не нужно анимаций). Так что вставьте имена своих SMD'шек и попробуйте импортировать модель.
  
 
== Compiling more advanced models ==
 
== Compiling more advanced models ==

Revision as of 16:14, 20 October 2008

Другая вариация на тему, делалась на основе Compiling Model Basics: Compiling_Models:ru. Содержание, в общем и целом, не совпадает. Эта же статья пока не переведена


В статье описано, как компилировать модели с помощью studiomdl для внутриигрового использования. Прежде чем начать, вам понадобятся какие-нибудь файлы SMD, которые вы и будете компилировать. Если у вас их еще нет, прочтите статью об Экспорте моделей.

Tip:Слово "studio" в названии отсылает нас к временам создания Half-Life 1, когда для создания моделей Valve использовала пакет 3D Studio Max.

Формат QC

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

QC - это просто текстовый файл с расширением .qc. Его можно создать где угодно и назвать как вам нравится. Лучше, однако, хранить свои данные организованно, и держать SMD и QC в одной папке, которую разумно будет назвать так же, как будущий файл модели.

Порядок компиляции

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

  1. Глобально, указав свою игру/мод в выпадающем списке SDK launcher'а
  2. Только для программы 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 }
Tip:Используемый по умолчанию путь для файлов SMD совпадает с расположением QC. Если что-либо находится в другой папке, вы в любой команде можете указать относительные, или же явно прописанные пути.

Ниже приведен краткий обзор каждой из команд. Чтобы просмотреть страницы с более подробной информацией, щелкните по именам команд. 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'ом на плече, а другое без.
Tip:Более сложные модели используют вместо $body код $model
$staticprop
Информирует studiomdl, что у модели нет движущихся частей, что дает возможность осуществить несколько важных оптимизаций. Команда необходима если вы собираетесь использовать модель с помощью prop_static, но она не запретит использовать модель где-то еще (и в самом деле, большинство моделей на физике тоже используют $staticprop)
$surfaceprop
Определяет, как поверхность реагирует на другие объекты. Также помогает определить вес модели (когда используется команда для его расчета).
Note:Такая же команда есть в материалах. Если у модели они не совпадут, то будет выбрана версия из QC. Не до конца ясно, зачем функциональность дублируется, и поверхность описывается как в материалах, так и в файле для импорта модели...
$cdmaterials
Директория, из которой studiomdl возьмет материалы для модели. Не забудьте, что имена материалов должны совпадать с теми, которые вы назначили в 3D-пакете при моделировании. Само же имя директории нужно указать относительно папки <директория с модом>/materials/.
$sequence
Несмотря на то, что эта модель используется с $staticprop и не анимируется, движку Source для правильной работы потребуется "пустая" idle-анимация. Такая анимация должна состоять из одного кадра, откуда следует, что свойство fps ни на что не будет влиять (но оно все равно будет при проигрывании).
$collisionmodel
Указывает SMD, который будет использоваться для рассчета столкновений в движке. Если collision-модели нет, то объекты будут пролетать модель насквозь (что в некоторых случаях и является желаемым результатом).
Tip:Если вы собираетесь анимировать модель столкновений, используйте $collisionjoints.
$concave
Модель для столкновений должна быть выпуклой, но можно создавать и невыпуклые формы из нескольких выпуклых. Команда $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

Template:Otherlang:ru Template:Otherlang:ru:en