Func areaportal (CSS SDK)

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Оригинал Hint_brush Areaportal Func_areaportal

Описание

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

Объект func_areaportal используется для оптимизации карт. Закрыв портал, часть карты, находящаяся по ту сторону портала, не будет отображаться. Благодаря этому увеличивается быстродействие карты. Принцип работы объекта func_areaportal очень похож на принцип отпирания/запирания дверей, поэтому в движке Source есть возможность привязки объекта 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" используется для проверки скорости загрузки/выгрузки дополнительных материалов из видеопамяти при закрытии/открытии порталов, имитируя самые неблагоприятные игровые условия.

Советы

Не используйте один объект func_areaportal сразу с несколькими дверями. Если открыть хотя бы одну дверь, то портал откроется. Портал закроется, когда закроется хотя бы одна дверь, даже если другие двери останутся открытыми.

Начинайте заниматься расстановкой объектов func_areaportal после того, как создадите свою карту. Как уже говорилось ранее, объект func_areaportal используется для оптимизации карт.

Параметры

  • Initial State – состояние объекта в начале каждого раунда (Включен/Выключен);
  • Linked Door Name или Name of Linked Door — имя объекта-двери, который будет использоваться совместно с порталом; если указано это свойство, то свойство "Initial State" не будет использоваться; список доступных классов дверей в движке Source:
    • func_door
    • func_door_rotating
    • prop_door_rotating
  • Portal Version (Read-Only) – (всегда должно быть равно 1) версия порталов, используемая в движке; нельзя изменять.

Inputs

  • Open – открыть портал;
  • Close – закрыть портал;
  • Toggle – переключить состояние портала (Открыт/Закрыт).

Карта

csssdk_func_areaportal.vmf

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

  • func_areaportal
  • func_button
  • func_detail
  • prop_physics
  • prop_static
  • func_door_rotating
  • prop_door_rotating
  • func_door
  • logic_auto
  • point_servercommand

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

Игроки появляются в небольшом помещении с большим проёмом в стене, через который можно свободно выходить на улицу или входить в дом. В этом проёме расположен основной портал, состояние которого будет изменяться при помощи кнопок пульта. В дом ведут три двери, имеющие разные классы - func_door_rotating, prop_door_rotating, func_door. Для каждой двери был поставлен отдельный объект func_areaportal. В отверстии на потолке так же установлен объект func_areaportal, покрывающий отверстие полностью. На крышу здания можно попасть по лестницам внутри и снаружи здания, а так же по ящикам, поставленным на улице.

Поначалу все двери закрыты, а значит и закрыты все порталы для них, а основой портал открыт. Нажмите на правую кнопку пульта, чтобы включить отображение порталов. Порталы будут обведены бирюзовым цветом. Первое на что стоит обратить внимание – это то, что порталы выглядят плоскими, хотя в редакторе Hammer они были созданы объёмными. Дело в том, что движок Source выбирает в качестве портала только одну грань объекта func_areaportal. Это упрощает расчёты видимости и позволяет легко манипулировать порталами. Угадать какую именно грань движок возьмёт в качестве портала практически невозможно, поэтому объекты func_areaportal нужно ставить всегда наверняка, избегая проблем в будущем. Так же обратите внимание, что в редакторе Hammer для всех дверей был создан свой объект func_areaportal, но в игре некоторые порталы объединились в один большой, и образовали портал непрямоугольной формы. Объёдинённые порталы увеличивают быстродействие карты. Открытые порталы обводятся прямоугольником. Побегав немного по карте (всё ещё со включенной правой кнопкой пульта) вы можете понаблюдать за порталами.

Пришло время понять, как работают порталы. Нажмите левую кнопку пульта. Это приведёт к закрытию основного портала. В том месте где установлен основной портал и на месте отверстия в потолке сразу появится артефакт. Этот артефакт всегда появляется в той части экрана, которая не обновляется, а это означает, что движок Source ничего в этом месте не рисует, увеличивая тем самым быстродействие карты. Не забывайте, что через проём в стене или отверстие в потолке всё ещё можно свободно выйти на улицу. Выйдите на улицу и понаблюдайте за работой закрытых порталов. Обратите внимание, что находясь на улице артефакт, описанный ранее, не проявляет себя. Вместо артефакта видно небо. Это всё потому, что игрок находится на улице и видит небо (Skybox), а небо рисуется всегда, когда игрок может его видеть.

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

Осталось разобраться с дверями. Если вы уже многократно нажимали на кнопки, то вернитесь к тому моменту, когда основной портал закрыт (когда видны артефакты), и включите отображение порталов, используя правую кнопку на пульте. Три объёдинённых портала отсекают всё, что находится за ними. Но у самой левой двери портал не был объединён и поэтому наиболее интересен для рассмотрения. Откройте самую левую дверь, находясь внутри или снаружи помещения. Результат скорей всего будет для вас неожиданностью, если вы посмотрите через основной портал в то время пока дверь остаётся открытой. Тот участок карты, который находится за дверью будет отображён, в то время как невидимая часть карты так и останется невидимой. Объяснить это явление не так то просто – значительно проще вам посмотреть всё самим на примере.

На этой карте были допущены грубые ошибки использования объекта func_areaportal, чтобы вы не допускали таких же ошибок в будущем. Разберём эти ошибки.

  • Объект func_areaportal, размещённый в отверстии крыши, поставлен неправильно. Во-первых, он не нужен, и установлен на карту только в учебных целях. Во-вторых, он покрывает своим объёмом всю поверхность отверстия крыши, что приводит к багам движка Source – невозможности определить наверняка: должны рисоваться полигоны внутри него, или нет. Выглядит это как мигание полигонов, когда они то отображаются, то не отображаются. К тому же, устанавливая этот func_areaportal, мы не можем знать какая его грань будет взята в качестве портала, и поэтому рискуем получить непредсказуемые результаты работы этого объекта во время игры.
  • Объекты func_areaportal сделаны правильно только для одной двери - func_door. Эта дверь находится левее всех на карте и не объединяет свой портал с другими. Объекты func_areaportal для остальных дверей созданы неправильно. Это опять же объясняется тем, что мы не можем знать какую грань объекта func_areaportal будет взята в качестве портала и рискуем получить на своей карте новую порцию артефактов. Так как объект func_areaportal используются в основном только совместно с дверями, то объект func_areaportal должен быть всегда подогнан под размеры двери.

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