Func areaportalwindow (CSS SDK)

Материал из CSM Wiki
Версия от 19:15, 14 октября 2009; Kogemyaka (обсуждение | вклад) (→‎Смотрите также)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Оригинал Areaportal и Func_areaportalwindow

Описание

Для лучшего понимания этого объекта, изучите объект func_areaportal. Объект func_areaportalwindow используется для контроля видимости отдельных частей карты, автоматически открывая или закрывая невидимую перегородку (портал) между ними.

Объект func_areaportalwindow используется для оптимизации карт. Находясь вдалеке от окна, часть карты, находящаяся по ту сторону окна, не будет отображаться. Благодаря этому увеличивается быстродействие карты.

Принцип работы объекта func_areaportal основан на прозрачности окна. Чем дальше от окна будет находиться игрок, тем менее прозрачно оно будет. Удалившись от окна на достаточное расстояние, окно станет полностью непрозрачным, и та часть карты, которая находится за окном не будет отображаться до тех пор, пока игрок вновь не приблизится к окну.

Особенности использования

  • Этот объект обновляется в каждом раунде. Это означает что любые изменения объекта НЕ будут наследоваться в последующих раундах. Удаление объекта во время игры закрывает портал до начала следующего раунда.
  • Объект должен быть установлен там, где будет использоваться.
  • На карте может быть установлено множество этих объектов
  • Объект представляет из себя обыкновенный HINT-браш, но который может контролироваться и иметь состояние открыт/закрыт. По этой причине этот объект делит пространство карты на листья (Leaves) для BSP-дерева, и использовать его нужно с учётом всех особенностей использования HINT-брашей.
  • При использовании этого объекта активно расходуются ресурсы CPU компьютеров игроков, потому что постоянно проверяется видимость частей карты сквозь этот объект. Неправильное применение этого объекта может существенно снизить быстродействие карты.
  • Объект не задерживает пуль, через него можно свободно проходить и он не уменьшает область видимости для ботов. Он используется только для отсечения невидимых частей карты.
  • В игре CS:S этот объект ДОЛЖЕН использоваться ТОЛЬКО совместно с дверями. Список доступных классов дверей в движке Source:
  • Объект должен быть покрыт материалом tools/toolsareaportal.
  • Объект не должен иметь на себе DISPLACEMENT-поверхностей.
  • Объект должен иметь простую форму и не должен состоять из нескольких брашей.
  • Если этот объект разделяет некоторые части карты, но при этом эти части карты всё равно смогут друг друга "видеть", то карта будет скомпилирована неправильно компилятором VBSP.

Ошибки

Не обнаружены.

Заметки

Объект func_areaportal не обязательно должен быть покрыт материалом tools/toolsareaportal, но с этим материалом объекты func_areaportal легко будут видны и различимы в редакторе Hammer.

Для отладки порталов предусмотрены следующие консольные команды:

  • r_DrawPortals – (0 или 1, по умолчанию 0) скрыть/показать порталы;
  • r_PortalTestEnts – (0 или 1, по умолчанию 1) проверять видимость через портал всех функциональных объектов (entity) для игрока; проверка выполняется только тогда, когда портал открыт; эта опция отнимает ОЧЕНЬ много процессорного времени, что может очень сильно снизить быстродействие карты; принцип действия этой функции схож с принципом действия объекта func_occluder, только в отличие от объекта func_occluder, этот объект проверяет видимость абсолютно всех ближайших функциональных объектов (entity), а не только Prop-объектов; вы не должны отключать эту функцию во благо своей карте, потому что изменения коснутся всех последующих карт на сервере, идущих следом за вашей;
  • r_portalscloseall – (0 или 1, по умолчанию 0) закрыть все порталы на карте; после вызова этой команды ни один портал не сможет быть открыт; эта команда, совместно с командой "r_portalsopenall" используется для проверки скорости загрузки/выгрузки дополнительных материалов из видеопамяти при закрытии/открытии порталов, имитируя самые неблагоприятные игровые условия;
  • r_portalsopenall – (0 или 1, по умолчанию 0) открыть все порталы на карте; после вызова этой команды ни один портал не сможет быть закрыт; эта команда, совместно с командой "r_portalscloseall" используется для проверки скорости загрузки/выгрузки дополнительных материалов из видеопамяти при закрытии/открытии порталов, имитируя самые неблагоприятные игровые условия.

Советы

В игре CS:S не используйте объект func_areaportalwindow в игровом пространстве карты. Потому что те игроки, которые будут находиться возле окна смогут видеть через него, а те игроки, которые будут находиться вдалеке от окна не смогут через него видеть. Это даёт очень весомое преимущество одним игрокам над другими.

Параметры

  • Rendered Window – Brush-объект, используемый для рисования окна;
  • Foreground Brush-entity - Brush-объект, используемый в качестве основы для окна "Rendered Window"; этот объект отображается при любом состоянии объекта "Rendered Window", поэтому этот объект должен быть покрыт прозрачным материалом – например стекла, чтобы можно было через него смотреть; во время работы объекта func_areaportalwindow, этот объект автоматически помещается в центр объекта "Rendered Window", однако его модель столкновений остаётся на том месте, где находился объект в редакторе Hammer, поэтому в качестве объекта "Foreground Brush-entity" должен использоваться Brush-объект без модели столкновений;
  • Fade Start Distance – максимальное расстояние от окна "Rendered Window", на котором его прозрачность равна "Translucency limit";
  • Fade End Distance – минимальное расстояние до окна "Rendered Window", на котором оно полностью не прозрачно; на этом расстоянии портал открывается или закрывается автоматически;
  • Translucency limit – (от 0.0 до 1.0) какая минимальная прозрачность может быть у окна "Rendered Window"; 0.0 – полностью прозрачен; 1.0 – полностью не прозрачен;
  • Portal Version (Read-Only) – (всегда должно быть равно 1) версия порталов, используемая в движке; нельзя изменять.

Карта

csssdk_func_areaportalwindow.vmf

Используются объекты

  • func_areaportalwindow
  • func_areaportal
  • func_button
  • func_detail
  • func_brush
  • prop_physics
  • prop_static
  • prop_door_rotating
  • logic_auto
  • point_servercommand
  • env_cubemap

Описание карты

Эта карта достаточно сложна для изучения. Для понимания принципа построения карты вы должны легко ориентироваться в пространстве карты и свободно использовать 3D-вид редактора Hammer для навигации по карте. В описании карты будут подробно рассмотрены детали создания карты.

Игроки появляются в небольшом помещении с двумя окнами и дверью. Окна созданы при помощи объектов func_areaportalwindow. Для дверей поставлен объект func_areaportal. На крышу здания можно попасть по лестнице снаружи здания, а так же по ящикам, поставленным на улице.


Объекты func_areaportalwindow не нужно активировать, поэтому окна начинают работать сразу в начале каждого раунда. Если вы уже изучили объект func_areaportal или познакомились с картой-примером csssdk_func_areaportal.vmf, то скорей всего знаете как отображаются порталы во время игры. Нажмите кнопку на пульте, чтобы включить отображение порталов.

Большое окно в стене имеет не простую конструкцию и состоит из трёх частей.

  • brush1 (func_brush) – объект, который будет использоваться в качестве окна и менять свою прозрачность. Для этого объекта выбран полосатый материал, чтобы лучше было видно, а так же включена модель столкновений с окружающими объектами. Этот объект поставлен на то место, где будет отображаться окно.
  • brush1_foreground (func_brush) – объект, который будет основой окна. Этот объект будет отображаться постоянно, независимо от прозрачности окна brush1. Для этого объекта выбран материал стекла, чтобы через стекло можно было видеть часть карты, находящуюся за ним. Для этого объекта выключена модель столкновений с окружающими объектами, потому что будет использоваться модель столкновений окна brush1. Этот объект поставлен далеко за пределами стен здания, потому что он автоматически будет поставлен в место расположения объекта brush1.
  • Объект func_areaportalwindow находится прямо внутри объекта brush1. Это правило, которое нужно соблюдать, чтобы на ваших картах не появлялись артефакты и окна не исчезали сами по себе: объект func_areaportalwindow должен быть размещён внутри окна "Rendered Window".

Обратите внимание, что толщина объекта brush1 равна 2 юнита, а толщина объекта brush1_foreground равна 3 юнита. Это тоже правило, которое нужно соблюдать: объект "Foreground Brush-entity" должен быть толще, чем объект "Rendered Window". Если не соблюдать это правило, то при полностью непрозрачном окне "Rendered Window", объект "Foreground Brush-entity" не будет отображаться, что будет очень заметно игрокам.

Окно на потолке состоит из двух частей:

  • brush2 (func_breakable_surf) – объект, который будет использоваться в качестве окна и менять свою прозрачность. Так как этот объект имеет класс func_breakable_surf, то он был создан по всем правилам создания объектов func_breakable_surf, а значит у него будет отображаться только одна сторона, на которой наложен прозрачный материал стекла. Объект brush2 – это разрушаемое стекло, однако в игре этот объект не меняет своего вида, хоть осколки битого стекла всё же и летят.
  • Объект func_areaportalwindow закрывает собой всё отверстие в потолке, нарушая таким образом правило: объект func_areaportalwindow должен быть размещён внутри окна "Rendered Window". К чему приводит подобная оплошность вы можете посмотреть сами - на месте окна появится уже знакомый артефакт.

Возможно, вы уже обратили внимание, что в правой верней части экрана постоянно отображается информация об используемой видеопамяти "Texture memory usage". Использование порталов очень помогает снизить количество необходимой видеопамяти, уменьшая требования к мощности компьютера для игры на вашей карте. При тестировании вашей карты на максимальных настройках старайтесь избегать показателей "Texture memory usage" свыше 100 МБ, потому что далеко не у всех игроков есть видеокарта с количеством видеопамяти больше 128 МБ. Как правило, грамотно созданная карта не использует одновременно свыше 100 МБ текстур. Побегайте по крыше, чтобы в достаточной мере осознать последствия неправильного использования объекта func_areaportalwindow.

Смотрите также