Func occluder (CSS SDK)

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

Оригинал Func_occluder

Описание

Объект func_occluder используется для динамического контроля видимости Prop-объектов на карте, и используется для оптимизации карт, скрывая объекты, которые находятся за ним.

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

  • Этот объект обновляется в каждом раунде. Это означает что любые изменения объекта НЕ будут наследоваться в последующих раундах. Удаление объекта во время игры лишае возможности контролировать объект.
  • Объект должен быть установлен там, где будет использоваться.
  • На карте может быть установлено множество этих объектов
  • Объект НЕ делит пространство карты на листья (Leaves) для BSP-дерева.
  • При использовании этого объекта могут активно расходоваться ресурсы CPU компьютеров игроков, потому что постоянно проверяется видимость Prop-объектов сквозь этот объект. Неправильное применение этого объекта может существенно снизить быстродействие карты. Смотрите пункт "Как работает этот объект".
  • Объект не задерживает пуль, через него можно свободно проходить и он не уменьшает область видимости для ботов. Он используется только для динамического контроля видимости Prop-объектов на карте.
  • Объект должен быть покрыт материалом tools/toolsoccluder.
  • Объект не должен иметь на себе DISPLACEMENT-поверхностей.
  • Объект может иметь любую форму и может состоять из любого количества брашей. Но чем сложнее конструкция этого объекта, тем сложнее расчёты во время игры.
  • Объект скрывает Prop-объекты, но не скрывает Lightmap-тени и динамические тени.
  • Для настройки объектов func_occluder используется объект worldspawn.

Ошибки

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

Как работает этот объект

Объект func_occluder работает по следующему принципу:

  • вокруг объекта func_occluder, в том направлении куда смотрит игрок, ищутся абсолютно все "prop_" объекты и отбираются только те, размер которых подходит для того, чтобы быть скрытыми;
  • проверяется: можно ли видеть "Bounding Box" каждого отобранного объекта через объект func_occluder; каждый "prop_" объект имеет вокруг себя так называемый "Bounding Box" – это габаритный параллелепипед вокруг всех точек модели Prop-объектов;
  • видимые объекты будут рисоваться, а невидимые будут скрыты.

Очень важно осознавать как работает объект func_occluder и в каких случаях его лучше всего применять. Неправильное или неуместное применение объекта func_occluder может повлечь за собой снижение производительности карты.

Объекты func_occluder уместно размещать внутри стен, за которыми игроки точно не смогут ничего увидеть.

Эффективность использования объекта func_occluder может быть достигнута только в том случае, когда скрываемые объекты используют много видеопамяти на свои текстуры и/или состоят из большого количества полигонов. Таким образом при помощи объекта func_occluder можно уменьшить нагрузку на видеокарту, ценой увеличения нагрузки на центральный процессор. Используйте объект func_occluder только тогда, когда это действительно необходимо.

Движок Source не даёт гарантии, что будет использоваться абсолютно любой объект func_occluder, находящийся в поле зрения игрока. В целях сокращения нагрузки на центральный процессор, объекты func_occluder будут использоваться в зависимости от их размеров и удалённости от игрока.

Заметки

Модели игроков тоже являются Prop-объектами, поэтому тоже будут скрываться объектом func_occluder, однако оружие, находящееся в руках игроков, не скрывается. Эту особенности можно применять против читерства на вашей карте, делая жизнь читерам ещё сложнее.

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

  • r_occlusion - (0 или 1, по умолчанию 1) включить/выключить использование объектов func_occluder;
  • r_visocclusion (0 или 1, по умолчанию 0) скрыть/показать объекты func_occluder, а так же того, что они делают; красным цветом будут отмечены все prop-объекты, которые не скрыты, а зелёным – те, которые скрыты;
  • r_occlusionspew (0 или 1, по умолчанию 0) включить/выключить отображение эффективности использования объектов func_occluder; в консоли будет выводиться отношение количества скрытых Prop-объектов, к общему количеству обрабатываемых Prop-объектов;
  • r_occludermincount (по умолчанию 0) минимальное количество объектов func_occluder, которые будут обрабатываться одновременно; 0 – количество не ограничено, но лимитируется размерами объектов func_occluder, которые видит игрок; (см. консольную команду "r_occluderminarea");
  • r_occludeemaxarea (от 0.0 до 100.0, по умолчанию 0) используется для определения максимального количества пикселей на экране, которое могут занимать Prop-объекты, для того чтобы обрабатываться (скрываться) объектами func_occluder; например: размер экрана 1024x768, поэтому на экране всего 1024 * 768 = 786432 пикселей; если "r_occludeemaxarea = 50", то Prop-объект будет обрабатываться только в том случае, если он будет занимать на экране меньше чем 786432 / 2 = 393216 пикселей, в противном случае такой Prop-объект не будет обрабатываться (скрываться); если "r_occludeemaxarea = 100", то любой Prop-объект сможет быть скрыт объектами func_occluder; если "r_occludeemaxarea = 0", то используется значение по умолчанию; в редакторе Hammer это значение настраивается в свойствах объекта worldspawn: Main menu > Map > Map Properties... > свойство "Max Occluder Area";
  • r_occluderminarea (по умолчанию 0) эта команда используется совершенно по-другому, нежели команда "r_occludeemaxarea"; используется для определения минимального размера, который должны иметь объекты func_occluder на экране игрока, для того чтобы использоваться игрой для скрывания Prop-объектов; настраивая значение для этой команды, можно регулировать расстояние от игрока, на котором будут работать объекты func_occluder; в редакторе Hammer это значение настраивается в свойствах объекта worldspawn: Main menu > Map > Map Properties... > свойство "Min Occluder Area".

Параметры

Initial State – состояние объекта (Неактивен/Активен).

  • Initial State – состояние объекта в начале каждого раунда (Включен/Выключен);

Inputs

  • Activate – активизировать объект (заставить его работать);
  • Deactivate – деактивировать объект;
  • Toggle – переключить состояние объекта (Включен/Выключен);

Карта

csssdk_func_occluder.vmf

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

  • func_occluder
  • func_button
  • func_detail
  • prop_static
  • prop_physics
  • prop_door_rotating
  • prop_ragdoll
  • logic_auto
  • point_servercommand

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

На карте расставлено несколько объектов prop_static, раскидано несколько объектов prop_physics и положен один prop_ragdoll. Между точкой появления игрока и большинством из этих объектов находится пульт управления объектом func_occluder и сам невидимый объект func_occluder, вставленный в большую раму посреди карты. На пульте три кнопки. Первая кнопка включает и выключает объект func_occluder. Вторая кнопка включает и выключает режим отображения работы объекта func_occluder. Третья кнопка включает и выключает суровые настройки объекта func_occluder.

Включите объект func_occluder, если он ещё не включен, и нажмите вторую кнопку на пульте. Включится режим отображения работы объекта func_occluder. Объект func_occluder будет рисоваться белым цветом, зелёным цветом - "Bounding Box" у скрытых объектов, а красным – у отображаемых. Не нажимая на третью кнопку побегайте по карте и посмотрите как работает объект func_occluder. Обязательно постреляйте из своего оружия и посмотрите, что использованные гильзы пуль тоже скрываются объектом func_occluder. Теперь нажмите на третью кнопку пульта и сравните разницу с тем что будет если её отжать. При нажатии на третью кнопку пульта выполняется консольная команда "r_occludeemaxarea", которая используется для отладки объектов func_occluder. В своих картах ни в коем случае не используйте эту консольную команду! В этой карте-примере она используется в учебных целях и только для того, чтобы показать возможности использования объекта func_occluder. Так вот, если нажать на третью кнопку пульта, то радиус действия объекта func_occluder увеличится и начнут скрываться даже довольно крупные объекты – такие как деревья. Отойдите от пульта немного назад и опустите "зрение" немного вниз. Можете заметить, что даже когда дерево находится в поле зрения игрока, но игрок не может его видеть – оно всё равно скрывается.

Функции "r_occludeemaxarea" и "r_occluderminarea" нельзя использовать на ваших картах, но вы всегда можете настроить эти параметры через объект worldspawn, указав в свойствах "Min Occluder Area" и "Max Occluder Area" нужные вам значения. Для того чтобы найти объект worldspawn нужно в редакторе Hammer открыть меню: Main menu > Map > Map Properties...

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