Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

Ru/Areaportal: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
m (Multipage removal)
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Language subpage}}
{{LanguageBar|title = Портал областей}}
 
[[File:Toolsareaportal.gif|left|link=]]
[[File:Toolsareaportal.gif|left|link=]]
[[File:areaportal_simple_open.jpg|200px|right|thumb|caption|Открытый areaportal (зелёный контур).]][[File:areaportal_simple_closed.jpg|200px|right|thumb|caption|Закрытый areaportal.]]
[[File:areaportal_simple_open.jpg|200px|right|thumb|caption|Открытый портал областей (зелёный контур).]][[File:areaportal_simple_closed.jpg|200px|right|thumb|caption|Закрытый areaportal.]]


''Areaportal'' (ареа-портал) — [[brush entity|брашевая сущность]], {{Ent|func_areaportal}}, {{Ent|func_areaportalwindow}}, которую можно использовать для 'изолирования' [[visleaf:ru|листьев]] и управления видимостью.
{{this is a|объёмный объект мира|name=ПорталОбластей(Areaportal)}} Объекты {{Ent|func_areaportal}}, {{Ent|func_areaportalwindow}} можно использовать для 'изолирования' {{L|visleaf|областей видимости}} и управления обзором.


Ареа-порталы служат двум разным целям: усечению геометрии и удалению целых областей из отрисовки.
Порталы областей служат двум разным целям: усечению геометрии и удалению целых областей из отрисовки.


Ареа-порталы похожи на дверные проёмы, которые либо открыты, либо закрыты. Когда Areaportal закрыт, он блокирует видимость геометрии и объектов, расположенных в области за ним. Когда он открыт, геометрия становится видимой. Ареа-порталы можно динамически открывать и закрывать во время игры. Обычно, они настраиваются на открытие и закрытие набором брашей {{Ent|trigger_multiple}} с помощью [[Inputs and Outputs|системы ввода/вывода]] или связыванием с сущностью [[Doors|двери]].
Порталы областей похожи на дверные проёмы, которые либо открыты, либо закрыты. Когда Areaportal закрыт, он блокирует видимость геометрии и объектов, расположенных в области за ним. Когда он открыт, геометрия становится видимой. Порталы областей можно динамически открывать и закрывать во время игры. Обычно, они настраиваются на открытие и закрытие набором объектов {{Ent|trigger_multiple}} с помощью {{L|Inputs and Outputs|системы ввода/вывода}} или связыванием с объектом {{L|Doors|двери}}.


==Свойства==
==Свойства==
[[File:Areaportal trainstation04.jpg|200px|thumb|right|caption|trigger_multiple можно использовать для открытия и закрытия ареа-порталов, чтобы скрывать зоны на уровне.]]
[[File:Areaportal trainstation04.jpg|200px|thumb|right|caption|trigger_multiple можно использовать для открытия и закрытия порталов областей, чтобы скрывать зоны на уровне.]]


Ареа-порталы:
Порталы областей:
* связаны с сущностью {{Code|func_areaportal}};
* связаны с объектом {{Code|func_areaportal}};
* должны состоять только из одного браша. Иначе, они будут выдавать ошибку компиляции [[vbsp]];
* должны состоять только из одного элемента карты. Иначе, они будут выдавать ошибку компиляции {{L|vbsp}};
* должны использовать материал <code>tools\toolsareaportal</code>, покрывающий все стороны браша;
* должны использовать материал <code>tools\toolsareaportal</code>, покрывающий все стороны элемента карты;
* не должны содержать [[displacement|деформированных поверхностей]], иначе будет выдана ошибка vbsp;
* не должны содержать {{L|displacement|деформированных поверхностей}}, иначе будет выдана ошибка vbsp;
* должны использоваться для запечатывания всех зон, с которыми соприкасаются, чтобы избежать [[leak|утечек]];
* должны использоваться для запечатывания всех зон, с которыми соприкасаются, чтобы избежать {{L|leak|утечек}};
* это объём, а не отдельные поверхности. Ареа-порталы могут быть любого размера, но обычно они состоят из тонких брашей по размеру зон (дверных проёмов), которые они соединяют;
* это объём, а не отдельные поверхности. Порталы областей могут быть любого размера, но обычно они состоят из тонких элементов карты по размеру зон (дверных проёмов), которые они соединяют;
* создают новый [[visleaf|вис-лист]] по своему объёму;
* создают новую {{L|visleaf|область видимости}} по своему объёму;
* можно настроить на открытие или закрытие, в зависимости от [[Inputs and Outputs|логики сущности]], или путём преобразования их в сущность двери.  
* можно настроить на открытие или закрытие, в зависимости от {{L|Inputs and Outputs|логики поведения объекта}}, или путём преобразования их в объект двери.  


===areaportal_window===
===areaportal_window===
Сущность {{Ent|func_areaportalwindow}} ведёт себя как обычный ареа-портал, с добавлением затухания и закрытия в зависимости от удалённости игрока. Это позволяет избежать «резкого» открытия ареа-портала.
Объект {{Ent|func_areaportalwindow}} ведёт себя как обычный портал областей, с добавлением затухания и закрытия в зависимости от удалённости игрока. Это позволяет избежать «резкого» открытия портала областей.


==Конструкция==
==Конструкция==
[[File:areaportal_simple_ex1.jpg|200px|right|thumb|caption|Конструкция основного ареа-портала.]]
[[File:areaportal_simple_ex1.jpg|200px|right|thumb|caption|Конструкция основного портала областей.]]


# Создайте объём из одного [[brush|браша]], полностью запечатав пространство между двумя зонами, которыми вы желаете управлять. Это может быть несколько ареа-порталов, соприкасающихся гранями. Не создавайте порталы с более, чем шестью сторонами.
# Создайте объём портала областей из одного {{L|brush|элемента карты}}, полностью запечатав пространство между двумя зонами, которыми вы желаете управлять. Это может быть несколько порталов областей, соприкасающихся гранями. Не создавайте порталы с более, чем шестью сторонами.
# Если портал соединяет две области, например, дверной проём, сделайте браш размером с него, и такой же толщиной, как и стены, с которыми он соприкасается. Если область представляет собой открытое пространство, то толщина может быть любой (типичные размеры сетки: 8, 16, 32 и т. д.).
# Если портал соединяет две области, например, дверной проём, сделайте элемент карты размером с него, и такой же толщиной, как и стены, с которыми он соприкасается. Если область представляет собой открытое пространство, то толщина может быть любой (типичные размеры сетки: 8, 16, 32 и т. д.).
# Наложите материал {{Ent|Tool textures#Optimisation|tools\toolsareaportal}} на все грани браша.
# Примените материал {{Ent|Tool textures#Optimisation|tools\toolsareaportal}} ко всем граням элемента карты.
# [[Entity creation|Преобразуйте браш]] в сущность {{Ent|func_areaportal}} или {{Ent|func_areaportalwindow}}.
# {{L|Entity creation|Преобразуйте элемент карты}} в объект {{Ent|func_areaportal}} или {{Ent|func_areaportalwindow}}.
# Установите значение ключа ''Initial State'' (изначальное состояние) так, чтобы оно не блокировало видимость, когда этого не должно быть. Если нужно связать портал с наименованной дверью, установите его ''Initial State'' в то же состояние, что и для двери, и внесите имя двери в строку портала ''Name of Linked Door'' (имя связываемой двери). Если дверь закрыта, изначальное состояние портала также должно быть закрытым, и наоборот.
# Установите значение ключа ''Initial State'' (изначальное состояние) так, чтобы оно не блокировало видимость, когда этого не должно быть. Если нужно связать портал с наименованной дверью, установите его ''Initial State'' в то же состояние, что и для двери, и внесите имя двери в строку портала ''Name of Linked Door'' (имя связываемой двери). Если дверь закрыта, изначальное состояние портала также должно быть закрытым, и наоборот.


{{Placement Tip|Если ареа-портал связан с наименованной дверью, убедитесь, что он тоньше, чем сама модель двери, иначе её не будет видно, когда портал будет закрыт.}}
{{Placement Tip|Если портал областей связан с наименованной дверью, убедитесь, что он тоньше, чем сама модель двери, иначе её не будет видно, когда портал будет закрыт.}}


==Влияние на производительность==
==Влияние на производительность==
<div style="text-align:center">[[File:areaportal_culling_engine1.jpg|350px|caption|Отрисовка каркаса ареа-портала в движке. Рисуется только та геометрия листьев, которая видна через ареа-портал.]] [[File:areaportal_culling_engine2.jpg|350px|caption|Та же сцена с отключённым ареа-порталом. Отрисовывается вся геометрия листьев.]]</div>
<div style="text-align:center">[[File:areaportal_culling_engine1.jpg|350px|caption|Отрисовка каркаса портала областей в движке. Рисуется только та геометрия областей видимости, которая видна через портал областей.]] [[File:areaportal_culling_engine2.jpg|350px|caption|Та же сцена с отключённым порталом областей. Отрисовывается вся геометрия областей видимости.]]</div>


Открытые порталы (не важно, открыты они всегда, или же по команде) ведут себя, как шторки для видимой сквозь них геометрии. Подобно окну дома, движок отрисовывает только те [[visleaves|листья]], которые непосредственно видны через портал. То есть, область за ним обрезается по размеру окна, уменьшая величину отображаемой геометрии и улучшая производительность. Вдобавок ко всему, часть модели (prop) вообще не отрисовывается, когда она видна под ''усечённым конусом'' (или видимым углом). Это делает открытые порталы весьма полезными для управления видимостью геометрии моделей.
Открытые порталы (не важно, открыты они всегда, или же по команде) ведут себя, как шторки для видимой сквозь них геометрии. Подобно окну дома, движок отрисовывает только те {{L|visleaves|области видимости}}, которые непосредственно видны через портал. То есть, область за ним обрезается по размеру окна, уменьшая величину отображаемой геометрии и улучшая производительность. Вдобавок ко всему, часть модели (prop) вообще не отрисовывается, когда она видна под ''усечённым конусом'' (или видимым углом). Это делает открытые порталы весьма полезными для управления видимостью геометрии моделей.


[[File:areaportal_culling_top.jpg|thumb|Открытый Areaportal сильно ограничивает видимость модели.]]
[[File:areaportal_culling_top.jpg|thumb|Открытый Areaportal сильно ограничивает видимость модели.]]


Благодаря таким преимуществам в производительности, ареа-порталы часто используются в состоянии ''всегда открыт''. Всегда открытый портал создаётся путём установки ключа "Initial State" (изначальное состояние) сущности {{Ent|func_areaportal}} в значение «Open» (открыт). Открытые порталы используются на входе в другие области, содержащие большое число листов и геометрии. Например, такой портал, размещённый в конце коридора, выходящего на более широкое пространство, может дать существенный прирост производительности. Пока игрок смотрит сквозь дверь изнутри, будут отрисовываться только те листья с геометрией, которые видны непосредственно через проём.
Благодаря таким преимуществам в производительности, порталы областей часто используются в состоянии ''всегда открыт''. Всегда открытый портал создаётся путём установки ключа "Initial State" (изначальное состояние) объекта {{Ent|func_areaportal}} в значение «Open» (открыт). Открытые порталы используются на входе в другие области, содержащие большое число областей видимости и геометрии. Например, такой портал, размещённый в конце коридора, выходящего на более широкое пространство, может дать существенный прирост производительности. Пока игрок смотрит сквозь дверь изнутри, будут отрисовываться только те области видимости с геометрией, которые видны непосредственно через проём.


===Излишества===
===Излишества===
Будьте осторожны, и не создавайте слишком много видимых порталов. Каждый из них съедает ресурсы, и если портал отсекает недостаточно деталей, отрисовка сцены без него ускорится!
Будьте осторожны, и не создавайте слишком много видимых порталов. Каждый из них съедает ресурсы, и если портал отсекает недостаточно деталей, отрисовка сцены без него ускорится!


На скомпилированной карте ареа-порталы не образуют брашей, поэтому нет ограничений на их размер. Это может быть полезно, когда у вас переполненный BSP и вы используете множество Hint-брашей.
На скомпилированной карте порталы областей не образуют элементов мира, поэтому нет ограничений на их размер. Это может быть полезно, когда у вас переполненный BSP и Вы используете множество Hint-брашей.


==Компиляция==
==Компиляция==
[[File:AreaPortalLeakFig.jpg|300px|right|thumb|caption|Вид сверху на утечку ареа-портала (слева) и полностью герметичную область (справа).]]
[[File:AreaPortalLeakFig.jpg|300px|right|thumb|caption|Вид сверху на утечку портала областей (слева) и полностью герметичную область (справа).]]


Жизненно важно, чтобы любые зоны, которые должен изолировать ареа-портал, не [[leak|перетекали]] друг в друга. Как и при обычных утечках, область карты считается изолированной от другой только тогда, когда она полностью окружена простыми брашами (не являющимися сущностями, кроме брашей ареа-порталов), без промежутков. Если области соединены по-разному, каждая из них должна быть заполнена ареа-порталом.
Жизненно важно, чтобы любые зоны, которые должен изолировать портал областей, не {{L|leak|перетекали}} друг в друга. Как и при обычных утечках, область карты считается изолированной от другой только тогда, когда она полностью окружена простыми элементами карты (не являющимися объектами, кроме объёмов порталов областей), без промежутков. Если области соединены по-разному, каждая из них должна быть заполнена порталом областей.


Понять это поможет воображаемый аквариум с водой и несколькими отверстиями по краям. Ареа-портал должен заполнить каждое из этих отверстий, иначе область будет утекать, выдавая ошибку [[leak|утечки]] в [[vbsp]].
Понять это поможет воображаемый аквариум с водой и несколькими отверстиями по краям. Портал областей должен заполнить каждое из этих отверстий, иначе область будет утекать, выдавая ошибку {{L|leak|утечки}} в {{L|vbsp}}.


'''Ареа-порталы должны изолировать ''каждый'' вход в зону. [[func_detail|Браши-детали]], полупрозрачные текстуры и [[displacement|деформации]] не могут изолировать область, и будут создавать утечки, препятствующие запуску карты. Если компилятор сможет найти лазейку между двумя основными поверхностями любого портала, будет выдана утечка портала.'''
'''Порталы областей должны изолировать ''каждый'' вход в зону. {{L|func_detail|объекты детали}}, полупрозрачные текстуры и {{L|displacement|деформированные поверхности}} не могут изолировать область, и будут создавать утечки, препятствующие запуску карты. Если компилятор сможет найти лазейку между двумя основными поверхностями любого портала, будет выдана утечка портала.'''


===Обнаружение ошибок компиляции===
===Обнаружение ошибок компиляции===
Ошибки компиляции ареа-порталов выводятся функцией [[vbsp|VBSP]]. Если произойдёт утечка, вы увидите это:
Ошибки компиляции порталов областей выводятся функцией {{L|vbsp|VBSP}}. Если произойдёт утечка, Вы увидите это:


  Brush <brush number>: areaportal brush doesn't touch two areas
  Brush <brush number>: areaportal brush doesn't touch two areas
  done
  done
(''Браш <номер браша> не касается двух областей'').
(''Элемент карты <номер>: объём портала областей не касается двух областей'').
Порой, такие сообщения обнаружить труднее, чем сообщения об [[leak|утечке]], но vbsp создаёт [[Leak#Finding_leaks|pointfile]], который делает поиск местоположения утечки порталов таким же простым, как и поиск обычных утечек геометрии.
Порой, такие сообщения обнаружить труднее, чем сообщения об {{L|leak|утечке}}, но vbsp создаёт [[Leak#Finding_leaks|pointfile]], который делает поиск местоположения утечки порталов таким же простым, как и поиск обычных утечек геометрии.


{{Bug:ru|Если на вашей карте нет таких сущностей, как, например, info_player_start, ареа-порталы (да и, в общем, остальная часть карты) будут создавать странные утечки. Чтобы этого избежать, убедитесь, что на вашей карте есть хотя бы одна сущность.}}
{{bug|Если на вашей карте нет таких объектов, как, например, info_player_start, порталы областей (да и, в общем, остальная часть карты) будут создавать странные утечки. Чтобы этого избежать, убедитесь, что на вашей карте есть хотя бы один обхект.}}


{{Tip:ru|Приложение [[glview]] можно использовать для отображения ареа-порталов, которые будут показаны как серые поверхности. (''Инструмент устарел, и не рекомендуется к использованию'').}}
{{tip|Приложение {{L|glview}} можно использовать для отображения порталов областей, которые будут показаны как серые поверхности. (''Инструмент устарел, и не рекомендуется к использованию'').}}


=== Ареа-порталы и вода ===
=== Порталы областей и вода ===
[[File:areaportal_water.jpg||thumb|200px|right|Создавая ареа-порталы с водой, нужно использовать два отдельных ареа-портала.]]
[[File:areaportal_water.jpg||thumb|200px|right|Создавая порталы областей с водой, нужно использовать два отдельных портала областей.]]


Другой сложностью является то, что ареа-порталы не должны пересекать водную поверхность. Для этого нужно создавать два портала: один - над водой, другой - под водой, и так, чтобы они оба сошлись над водной плоскостью.
Другой сложностью является то, что порталы областей не должны пересекать водную поверхность. Для этого нужно создавать два портала: один - над водой, другой - под водой, и так, чтобы они оба сошлись над водной плоскостью.


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


{{Tip:ru|Чтобы посмотреть, объединены или нет порталы в движке, наберите в консоли команду <code>r_DrawPortals 1</code>.}}
{{tip|Чтобы посмотреть, объединены или нет порталы в движке, наберите в консоли команду <code>r_DrawPortals 1</code>.}}


== Сквозной взгляд ==
== Сквозной взгляд ==
[[File:Areaportal-areas.png|frame|right|Видимость между первым и вторым листом остаётся неизменной.]]
[[File:Areaportal-areas.png|frame|right|Видимость между первой и второй областями видимости остаётся неизменной.]]


Ареа-порталы отсекают только те области, ''между'' которыми они расположены. Посмотрите на рисунок справа: отбрасываются только помещения внутри здания, а видимость между первым и вторым [[visleaf|листом]] сохраняется, поскольку они соединены по краям.
Порталы областей отсекают только те области, ''между'' которыми они расположены. Посмотрите на рисунок справа: отбрасываются только помещения внутри здания, а видимость между первой и второй {{L|visleaf|областью видимости}} сохраняется, поскольку они соединены по краям.


Это можно исправить, поставив два ареа-портала по краям здания.
Это можно исправить, поставив два портала областей по краям здания.


{{clr}}
{{clr}}
Line 92: Line 93:
== Консольные команды ==
== Консольные команды ==


Вы можете отлаживать и тестировать порталы прямо в игре, используя некоторые специфичные для них [[console|консольные]] переменные:
Вы можете отлаживать и тестировать порталы прямо в игре, используя некоторые специфичные для них {{L|console|консольные}} переменные:


; r_DrawPortals 0/1
; r_DrawPortals 0/1
: Если установлено значение "1", границы портала (между двумя областями) окрашиваются в зелёный цвет. Иногда несколько порталов объединяются в один. Если портал открыт, рисуется вторая зелёная коробка, показывающая отсекаемое пространство.
: Если установлено значение "1", границы портала (между двумя областями) окрашиваются в зелёный цвет. Иногда несколько порталов объединяются в один. Если портал открыт, рисуется вторая зелёная коробка, показывающая отсекаемое пространство.
; mat_wireframe 0/1/2/3
; mat_wireframe 0/1/2/3
: Рисует геометрию в виде каркаса, что позволяет легко видеть эффекты ареа-порталов на карте. Лучше всего использовать значения "1" или "2", так как параметр "3" может скрыть фактически отрисовываемую геометрию.
: Рисует геометрию в виде каркаса, что позволяет легко видеть эффекты порталов областей на карте. Лучше всего использовать значения "1" или "2", так как параметр "3" может скрыть фактически отрисовываемую геометрию.
; r_portalscloseall 0/1
; r_portalscloseall 0/1
: Значение "1" принудительно закрывает все порталы (без возможности их открыть). Отменяется переменной <code>r_portalsopenall 1</code>. (Пробуйте это, когда кажется, что порталы зависли. Помогает понять, глючит ли их закрывание.)
: Значение "1" принудительно закрывает все порталы (без возможности их открыть). Отменяется переменной <code>r_portalsopenall 1</code>. (Пробуйте это, когда кажется, что порталы зависли. Помогает понять, глючит ли их закрывание.)
Line 104: Line 105:
: Значение "1" принудительно открывает все порталы (без возможности их закрыть).
: Значение "1" принудительно открывает все порталы (без возможности их закрыть).


{{Tip:ru|Используйте консольную команду <code>BindToggle</code>, чтобы разрешить переключать консольные переменные одной клавишей.}}
{{tip|Используйте консольную команду <code>BindToggle</code>, чтобы разрешить переключать консольные переменные одной клавишей.}}


== В многопользовательском режиме ==
== В многопользовательском режиме ==
Ареа-порталы весьма полезны в многопользовательских играх. Они создаются таким же образом, как и в однопользовательских играх, но с некоторыми отличиями в функциях и использовании. При наличии на сервере нескольких игроков, управляемость открыванием порталов ослабевает, поэтому производительность уровня должна быть оптимизирована под ''худшие сценарии'' (например, когда все видимые порталы открыты). Соответственно, сначала размещайте 'всегда открытые' порталы, потом порталы, связанные с дверями, а затем порталы, управляемые триггерами. В запущенных случаях, хорошо продуманные 'всегда открытые' порталы повысят производительность больше, чем управляемые.
Порталы областей весьма полезны в многопользовательских играх. Они создаются таким же образом, как и в однопользовательских играх, но с некоторыми отличиями в функциях и использовании. При наличии на сервере нескольких игроков, управляемость открыванием порталов ослабевает, поэтому производительность уровня должна быть оптимизирована под ''худшие сценарии'' (например, когда все видимые порталы открыты). Соответственно, сначала размещайте 'всегда открытые' порталы, потом порталы, связанные с дверями, а затем порталы, управляемые триггерами. В запущенных случаях, хорошо продуманные 'всегда открытые' порталы повысят производительность больше, чем управляемые.


[[func_areaportalwindow|Портальные окна]] также могут использоваться в мультиплеере, но здесь они менее полезны, так как могут создавать игровой дисбаланс. Игрок внутри помещения, находясь рядом с порталом окна, может видеть всех игроков вовне, а игроки вовне видеть его не могут.
{{L|func_areaportalwindow|Портальные окна}} также могут использоваться в мультиплеере, но здесь они менее полезны, так как могут создавать игровой дисбаланс. Игрок внутри помещения, находясь рядом с порталом окна, может видеть всех игроков вовне, а игроки вовне видеть его не могут.


== Относительно окклюдеров ==
== Относительно окклюдеров ==
Ареа-порталы похожи на [[occluder|окклюдеры]] в том смысле, что они помогают управлять видимостью. Их основные отличия:
Порталы областей похожи на {{L|occluder|окклюдеры}} в том смысле, что они помогают управлять видимостью. Их основные отличия:


* Окклюдеры скрывают только геометрию моделей (prop). Ареа-порталы скрывают все объекты.
* Окклюдеры скрывают только геометрию моделей (prop). Порталы областей скрывают все объекты.
* Ареа-порталы должны полностью запечатывать область (не допускать [[leak|утечки]]), в то время как окклюдеры могут стоять где угодно внутри области.
* Порталы областей должны полностью запечатывать область (не допускать {{L|leak|утечки}}), в то время как окклюдеры могут стоять где угодно внутри области.
* Окклюдеры более затратны на объект, чем открытые ареа-порталы.
* Окклюдеры более затратны на объект, чем открытые порталы областей.
* Окклюдеры имеют элементы управления размером объектов, которые они будут скрывать, в зависимости от площади экрана.
* Окклюдеры имеют элементы управления размером объектов, которые они будут скрывать, в зависимости от площади экрана.


{{Note|Браши ареа-порталов и окклюдеров не должны пересекаться (соприкасаться), иначе они будут работать неправильно.}}
{{Note|Объёмы порталов областей и окклюдеров не должны пересекаться (соприкасаться), иначе они будут работать неправильно.}}


== См. также ==
== См. также ==
* {{Ent|func_areaportal}} / {{Code|[[CAreaPortal]]}}
* {{Ent|func_areaportal}} / {{Code|{{L|CAreaPortal}}}}
* {{Ent|func_areaportalwindow}}
* {{Ent|func_areaportalwindow}}
* {{Code|[[CAreaPortalOneWay]]}} (C++ code for new entity)
* {{Code|{{L|CAreaPortalOneWay}}}} (C++ code for new entity)
* [[Controlling Geometry Visibility and Compile Times|Управление видимостью геометрии и временем компиляции]]
* {{L|Controlling Geometry Visibility and Compile Times|Управление видимостью геометрии и временем компиляции}}
* [[Leak|Утечки]]
* {{L|Leak|Утечки}}
* [[Visleaf|Листы]]
* {{L|Visleaf|Область видимости}}
 
{{ACategory|Level Design}}
{{ACategory|Glossary}}
 
 
{{stub}}

Latest revision as of 04:38, 12 July 2024

English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)
Toolsareaportal.gif
Открытый портал областей (зелёный контур).
Закрытый areaportal.

ПорталОбластей(Areaportal) - это объёмный объект мира, доступно для всех игр на движке Source Source. Объекты func_areaportal, func_areaportalwindow можно использовать для 'изолирования' областей видимости(en) и управления обзором.

Порталы областей служат двум разным целям: усечению геометрии и удалению целых областей из отрисовки.

Порталы областей похожи на дверные проёмы, которые либо открыты, либо закрыты. Когда Areaportal закрыт, он блокирует видимость геометрии и объектов, расположенных в области за ним. Когда он открыт, геометрия становится видимой. Порталы областей можно динамически открывать и закрывать во время игры. Обычно, они настраиваются на открытие и закрытие набором объектов trigger_multiple с помощью системы ввода/вывода(en) или связыванием с объектом двери(en).

Свойства

trigger_multiple можно использовать для открытия и закрытия порталов областей, чтобы скрывать зоны на уровне.

Порталы областей:

  • связаны с объектом func_areaportal;
  • должны состоять только из одного элемента карты. Иначе, они будут выдавать ошибку компиляции vbsp(en);
  • должны использовать материал tools\toolsareaportal, покрывающий все стороны элемента карты;
  • не должны содержать деформированных поверхностей(en), иначе будет выдана ошибка vbsp;
  • должны использоваться для запечатывания всех зон, с которыми соприкасаются, чтобы избежать утечек(en);
  • это объём, а не отдельные поверхности. Порталы областей могут быть любого размера, но обычно они состоят из тонких элементов карты по размеру зон (дверных проёмов), которые они соединяют;
  • создают новую область видимости(en) по своему объёму;
  • можно настроить на открытие или закрытие, в зависимости от логики поведения объекта(en), или путём преобразования их в объект двери.

areaportal_window

Объект func_areaportalwindow ведёт себя как обычный портал областей, с добавлением затухания и закрытия в зависимости от удалённости игрока. Это позволяет избежать «резкого» открытия портала областей.

Конструкция

Конструкция основного портала областей.
  1. Создайте объём портала областей из одного элемента карты(en), полностью запечатав пространство между двумя зонами, которыми вы желаете управлять. Это может быть несколько порталов областей, соприкасающихся гранями. Не создавайте порталы с более, чем шестью сторонами.
  2. Если портал соединяет две области, например, дверной проём, сделайте элемент карты размером с него, и такой же толщиной, как и стены, с которыми он соприкасается. Если область представляет собой открытое пространство, то толщина может быть любой (типичные размеры сетки: 8, 16, 32 и т. д.).
  3. Примените материал Tool textures#Optimisation tools\toolsareaportal ко всем граням элемента карты.
  4. Преобразуйте элемент карты(en) в объект func_areaportal или func_areaportalwindow.
  5. Установите значение ключа Initial State (изначальное состояние) так, чтобы оно не блокировало видимость, когда этого не должно быть. Если нужно связать портал с наименованной дверью, установите его Initial State в то же состояние, что и для двери, и внесите имя двери в строку портала Name of Linked Door (имя связываемой двери). Если дверь закрыта, изначальное состояние портала также должно быть закрытым, и наоборот.
PlacementTip.gifСовет по размещению:Если портал областей связан с наименованной дверью, убедитесь, что он тоньше, чем сама модель двери, иначе её не будет видно, когда портал будет закрыт.

Влияние на производительность

Отрисовка каркаса портала областей в движке. Рисуется только та геометрия областей видимости, которая видна через портал областей. Та же сцена с отключённым порталом областей. Отрисовывается вся геометрия областей видимости.

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

Открытый Areaportal сильно ограничивает видимость модели.

Благодаря таким преимуществам в производительности, порталы областей часто используются в состоянии всегда открыт. Всегда открытый портал создаётся путём установки ключа "Initial State" (изначальное состояние) объекта func_areaportal в значение «Open» (открыт). Открытые порталы используются на входе в другие области, содержащие большое число областей видимости и геометрии. Например, такой портал, размещённый в конце коридора, выходящего на более широкое пространство, может дать существенный прирост производительности. Пока игрок смотрит сквозь дверь изнутри, будут отрисовываться только те области видимости с геометрией, которые видны непосредственно через проём.

Излишества

Будьте осторожны, и не создавайте слишком много видимых порталов. Каждый из них съедает ресурсы, и если портал отсекает недостаточно деталей, отрисовка сцены без него ускорится!

На скомпилированной карте порталы областей не образуют элементов мира, поэтому нет ограничений на их размер. Это может быть полезно, когда у вас переполненный BSP и Вы используете множество Hint-брашей.

Компиляция

Вид сверху на утечку портала областей (слева) и полностью герметичную область (справа).

Жизненно важно, чтобы любые зоны, которые должен изолировать портал областей, не перетекали(en) друг в друга. Как и при обычных утечках, область карты считается изолированной от другой только тогда, когда она полностью окружена простыми элементами карты (не являющимися объектами, кроме объёмов порталов областей), без промежутков. Если области соединены по-разному, каждая из них должна быть заполнена порталом областей.

Понять это поможет воображаемый аквариум с водой и несколькими отверстиями по краям. Портал областей должен заполнить каждое из этих отверстий, иначе область будет утекать, выдавая ошибку утечки(en) в vbsp(en).

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

Обнаружение ошибок компиляции

Ошибки компиляции порталов областей выводятся функцией VBSP(en). Если произойдёт утечка, Вы увидите это:

Brush <brush number>: areaportal brush doesn't touch two areas
done

(Элемент карты <номер>: объём портала областей не касается двух областей). Порой, такие сообщения обнаружить труднее, чем сообщения об утечке(en), но vbsp создаёт pointfile, который делает поиск местоположения утечки порталов таким же простым, как и поиск обычных утечек геометрии.

Icon-Bug.pngБаг:Если на вашей карте нет таких объектов, как, например, info_player_start, порталы областей (да и, в общем, остальная часть карты) будут создавать странные утечки. Чтобы этого избежать, убедитесь, что на вашей карте есть хотя бы один обхект.  [нужно проверить в ?]
Tip.pngСовет:Приложение glview(en) можно использовать для отображения порталов областей, которые будут показаны как серые поверхности. (Инструмент устарел, и не рекомендуется к использованию).

Порталы областей и вода

Создавая порталы областей с водой, нужно использовать два отдельных портала областей.

Другой сложностью является то, что порталы областей не должны пересекать водную поверхность. Для этого нужно создавать два портала: один - над водой, другой - под водой, и так, чтобы они оба сошлись над водной плоскостью.

Объединение

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

Tip.pngСовет:Чтобы посмотреть, объединены или нет порталы в движке, наберите в консоли команду r_DrawPortals 1.

Сквозной взгляд

Видимость между первой и второй областями видимости остаётся неизменной.

Порталы областей отсекают только те области, между которыми они расположены. Посмотрите на рисунок справа: отбрасываются только помещения внутри здания, а видимость между первой и второй областью видимости(en) сохраняется, поскольку они соединены по краям.

Это можно исправить, поставив два портала областей по краям здания.

Консольные команды

Вы можете отлаживать и тестировать порталы прямо в игре, используя некоторые специфичные для них консольные(en) переменные:

r_DrawPortals 0/1
Если установлено значение "1", границы портала (между двумя областями) окрашиваются в зелёный цвет. Иногда несколько порталов объединяются в один. Если портал открыт, рисуется вторая зелёная коробка, показывающая отсекаемое пространство.
mat_wireframe 0/1/2/3
Рисует геометрию в виде каркаса, что позволяет легко видеть эффекты порталов областей на карте. Лучше всего использовать значения "1" или "2", так как параметр "3" может скрыть фактически отрисовываемую геометрию.
r_portalscloseall 0/1
Значение "1" принудительно закрывает все порталы (без возможности их открыть). Отменяется переменной r_portalsopenall 1. (Пробуйте это, когда кажется, что порталы зависли. Помогает понять, глючит ли их закрывание.)
Note.pngПримечание:Этой команды не существует в: Team Fortress 2 Counter-Strike: Global Offensive
r_portalsopenall 0/1
Значение "1" принудительно открывает все порталы (без возможности их закрыть).
Tip.pngСовет:Используйте консольную команду BindToggle, чтобы разрешить переключать консольные переменные одной клавишей.

В многопользовательском режиме

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

Портальные окна(en) также могут использоваться в мультиплеере, но здесь они менее полезны, так как могут создавать игровой дисбаланс. Игрок внутри помещения, находясь рядом с порталом окна, может видеть всех игроков вовне, а игроки вовне видеть его не могут.

Относительно окклюдеров

Порталы областей похожи на окклюдеры(en) в том смысле, что они помогают управлять видимостью. Их основные отличия:

  • Окклюдеры скрывают только геометрию моделей (prop). Порталы областей скрывают все объекты.
  • Порталы областей должны полностью запечатывать область (не допускать утечки(en)), в то время как окклюдеры могут стоять где угодно внутри области.
  • Окклюдеры более затратны на объект, чем открытые порталы областей.
  • Окклюдеры имеют элементы управления размером объектов, которые они будут скрывать, в зависимости от площади экрана.
Note.pngПримечание:Объёмы порталов областей и окклюдеров не должны пересекаться (соприкасаться), иначе они будут работать неправильно.

См. также


Неполная

This article or section is a stub. You can help by expanding it.