Пропы (обзорная статья)

From Valve Developer Community
Jump to: navigation, search
English (en)Русский (ru)中文 (zh)

Проп (англ. prop - реквизит) на движке Source - общее название модельных объектов, добавляемых на карты ради структурного и визуального оформления и интерактивности. Существуют различные типы пропов, каждый из которых представляет собой модель с определённым функционалом. Они выбираются в соответствии с задумкой автора и имеют определённые компромиссы по функциональности и производительности.

Типы пропов

В следующей таблице перечислены основные типы пропов и их общие характеристики.

Модель Объекта мира Свойства
prop_detail (en) Детальная геометрия - статичные, не перемещаемые модели. Не имеют каких-либо физических свойств и данных о столкновениях. Не разбиваются. Не отбрасывают теней. Могут автоматически вставляться назначением типа материала детали. Как правило, не ставятся индивидуально. Наиболее сложная геометрия для визуализации. На старых машинах может не прорисовываться.


Примеры: Трава, камни, растения.

prop_static (en) Статичная геометрия - не перемещаемые модели. Не содержат физических свойств, кроме столкновений, не разбиваются. Не имеют соединений и анимации. Отбрасывают тени. Нересурсоемкая геометрия для визуализации.


Примеры: трубы, светильники, камни, телефонные столбы.

prop_physics (en) Модели с внедрёнными физическими свойствами. Перемещаются и соударяются с помощью системы физики твердого тела. Прикрепляются к другим физическим объектам с помощью шарниров или других способов сцепления. Разбиваются, если получат достаточно повреждений, указанных в настройках. Отбрасывают динамические тени. Ресурсоёмки для перемещений и визуализации. Работают хуже с настройкой sv_turbophysics.


Примеры: бочки, мелкий мусор, мебель.

prop_ragdoll (en) Скелеты физического пропа с ragdoll-физикой. Обладают всеми свойствами физического пропа, а также могут использовать физику ragdoll. Ресурсоёмки для передвижения и визуализации.


Примеры: Трупы, части картонных коробок, матрасы.

prop_dynamic (en) Модели, которые могут быть размещены по иерархии, имеют суставы и проигрывают анимацию. Разбиваются, если получат достаточно повреждений, указанных в настройках. Прикрепляются к другим объектам. Отбрасывают динамические тени. Обрабатываются тяжелее статичной геометрии, но легче физической.


Примеры: Роботы, техника, анимированные модели.

prop_physics_multiplayer (en) Физический проп, использующий упрощённую физическую систему столкновений в многопользовательских играх. Даёт меньшую нагрузку на сеть, чем стандартный физический проп, разгружая канал многопользовательской игры. Работают лучше с настройкой sv_turbophysics (en).
prop_physics_override (en) Специальный тип, используемый для изменения встроенных в модель свойств. Нагружает так же, как и prop_physics.
prop_dynamic_override (en) Специальный тип, используемый для преобразования моделей prop_static в prop_dynamic. Нагружает так же, как и prop_dynamic.

Примеры некоторых пропов можно посмотреть на SDK-карте mapsrc\sdk_prop_types.vmf.

Ограничения в использовании

Чтобы не перегружать карту, в Source встроен ограничитель производительности используемых моделей. Например, у вас стоит физическая бочка, значит не должно быть такой же статичной бочки, если нет задачи сделать именно так. Если вы используете неправильный тип модели, то игра удаляет её с карты.

В редакторе Hammer (en), в Model browser, на вкладке "info" есть три флажка. Это: "physics" (физика), "static" (статика), и "dynamic" (динамика)

  • Если стоит "physics", модель может быть только prop_physics или prop_ragdoll, или же prop_dynamic_override.
  • "Static" используется только с prop_static.

Если Вы используете неправильный тип модели prop_static, то получите ошибку компиляции в журнале :

Error! prop_static using model "[model]", which must be used on a dynamic entity (i.e. prop_physics). Deleted.

или:

Error! To use model "[model]"
	with prop_static, it must be compiled with $staticprop!
Error loading studio model "[model]"!

Вы получите консольную ошибку в игре, если поместите prop_physics не как физику:

prop_physics at [x] [y] [z] uses model [model], which has no propdata which means it must be used on a prop_static. DELETED.

Подменяемые объекты мира

prop_dynamic_override (en) 
Большинство моделей будет работать с prop_dynamic, за исключением физических моделей. Если Вы хотите использовать физическую модель без всей её физики, используйте prop_dynamic_override (en).
prop_physics_override (en) 
Проп, который может имитировать физические данные (en). Объект мира prop_physics_override (en) позволяет вносить эти данные в редакторе карт (en), и использовать модели как физические объекты.

Создание пропов

Специальный qc (en)-код сделает вашу модель подходящей для некоторых типов пропов, и неподходящей для других.

prop_detail prop_static prop_dynamic prop_physics prop_ragdoll
$staticprop (en) Да Да Опционально Опционально Нет
prop_data (en) Нет Нет Нет Да Да
$collisionjoints (en) Нет Нет Опционально Нет Да
$collisionmodel (en) Нет Опционально Опционально Да Нет

Примечания: "Да" или "Нет" означает, что проп может быть удалён из игры, либо просто не работать, если сделан неправильно. "Опционально" означает, что код будет работать и, как правило, это хорошее решение. Кликните по ссылке для инструкций по использованию соответствующего .qc кода и что он делает.

Prop_detail модели могут использовать материалы только с UnlitGeneric (en) шейдером. Смотри Detail props (en) для более полной информации.

$staticprop обладает эффектом разрушения всех костей(связей) и уничтожает все скелетные анимации. Если проп не требует костей (связей) или анимации, staticprop стоит выбрать для оптимизации. В Hammer's Model browser, отмеченный флажок "static" означает, что $staticprop может быть использован.

Особенности

prop_detail

  • Можно разместить десятки тысяч на карте (Лимит для Left 4 Dead - 64000)
  • Могут быть моделями (en) или спрайтами. Спрайты прорисовываются быстрее.
  • Могут помещаться в редакторе карт (en) или путём добавления свойства материала %detailtype в файл .vmt, что заставляет Vbsp (en) автоматически генерировать их для конкретных материалов (описано ниже).
  • С ними невозможны столкновения.
  • Светятся постоянным цветом (для оптимизации)
  • Никак не влияют на освещение.
  • Автоматически исчезают на определённом расстоянии от игрока (управляется консольными переменными cl_detaildist и cl_detailfade).
  • Весьма вероятно, что не будут прорисовываться на слабых ПК.
  • Необходимо использовать модели, скомпилированные с помощью $staticprop в файле .qc (en).
  • Не нагружают сеть + используют мало памяти.
  • Не являются настоящими объектами мира, не имеют входов и выходов.
  • Не могут иметь анимацию.
  • Не могут быть присоединены иерархически к другим объектам мира.
  • С точки зрения видимости, считаются точками.

prop_static

  • На карте их могут быть тысячи.
  • Помещаются в редакторе карт (en).
  • С ними возможны столкновения.
  • Оказывают влияние на карты освещения в мире – могут отбрасывать тени, на них могут быть отброшены тени.
  • Вершины светятся как стандартные модели.
  • Используют систему LOD (en).
  • Пользователь определяет, будет ли предмет прорисовываться на слабом железе.
  • Расстояние исчезновения может задаваться в редакторе Hammer.
  • Могут использоваться модели, скомпилированные с помощью $staticprop в файле .qc.
  • Не нагружают сеть + используют мало памяти.
  • Не являются настоящими объектами мира, не имеют входов и выходов.
  • Могут не иметь анимации или суставов.
  • Не прикрепляются иерархически к другим объектам мира.
  • Используют выпуклую оболочку объекта, оптимальную с точки зрения видимости.

prop_dynamic

  • На карте их могут быть сотни.
  • Помещаются в редакторе карт (en).
  • Могут иметь столкновения, связанные с ними.
  • Не влияют на карты освещения в мире, но могут отбрасывать динамические тени.
  • Вершины светятся как в стандартных моделях.
  • Используют LOD.
  • Прорисовываются на слабом железе.
  • Расстояние исчезновения может задаваться в Hammer.
  • Могут использоваться модели, которые не компилировались с $staticprop.
  • Могут быть анимированы.
  • Имеют низкую (но не нулевую) нагрузку на сеть + используют память, как и любой объект мира.
  • Являются настоящими объектами мира с входами и выходами.
  • Могут быть иерархически присоединены к другим объектам мира.
  • Используют выпуклую оболочку объекта, оптимальную с точки зрения видимости.
  • С точки зрения видимости они считаются коробками.

prop_physics

  • На карте их может быть от десятков до сотен, в зависимости от сложности.
  • Могут помещаться в редакторе карт (en).
  • Могут иметь столкновения, связанные с ними.
  • Не влияют на карты освещения в мире, но могут отбрасывать динамические тени.
  • Вершины светятся как в стандартных моделях.
  • Используют систему LOD.
  • Расстояние исчезновения может задаваться в Hammer.
  • Быстрее пропадают на слабом железе, если не изменять настройки.
  • Могут использоваться модели, которые не компилировались с $staticprop.
  • Могут иметь анимацию.
  • Имеют низкую (но не нулевую) нагрузку на сеть + используют много памяти (как и любой объект мира).
  • Являются настоящими объектами мира с входами и выходами.
  • Не могут быть иерархически прикреплены к другим объектам мира.
  • Могут подвергаться воздействию других физических объектов мира.
  • Используют выпуклую оболочку объекта, оптимальную с точки зрения видимости.
  • С точки зрения видимости они считаются коробками.
  • Дополнительные характеристики?

prop_ragdoll

  • Тоже самое, что и prop_physics, но могут использовать скелеты физических кукол.
  • Весьма сильно нагружают сеть.

См. также