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

Ru/Areaportal: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
m (Multipage removal)
 
(56 intermediate revisions by 10 users not shown)
Line 1: Line 1:
{{Lang|Areaportal|title = Areaportal}}
{{LanguageBar|title = Портал областей}}


[[Image:areaportal_simple_open.jpg|200px|right|thumb|caption|Открытый ареапортал (зелёный контур).]][[Image:areaportal_simple_closed.jpg|200px|right|thumb|caption|Закрытый ареапортал.]]
[[File:Toolsareaportal.gif|left|link=]]
[[File:areaportal_simple_open.jpg|200px|right|thumb|caption|Открытый портал областей (зелёный контур).]][[File:areaportal_simple_closed.jpg|200px|right|thumb|caption|Закрытый areaportal.]]


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


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


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


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


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


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


* связаны с сущностью <code>[[func_areaportal]]</code>.
==Конструкция==
* должны состоять только из одного браша. Areaportal'ы из более чем одного браша будут выдавать ошибку компиляции [[vbsp]].
[[File:areaportal_simple_ex1.jpg|200px|right|thumb|caption|Конструкция основного портала областей.]]
* должны использовать материал <code>tools\toolsareaportal</code>, покрывающий все стороны их браша.
* не должны содержать [[displacement|деформации]], иначе будет выдана ошибка vbsp.
* должны использоваться для запечатывания всех зон, с которыми соприкасаются, чтобы избежать [[leak|утечек]].
* объём, а не отдельные поверхности. Хотя, Areaportal'ы могут быть любого размера, обычно они состоят из тонких брашей по размеру зон (дверных проёмов), которые они соединяют.
* создают новый [[visleaf]] по своему объёму.
* можно настроить на открытие или закрытие в зависимости от [[Inputs and Outputs|логики сущности]] или путем присоединения их к сущности двери.


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


Сущность <code>[[func_areaportalwindow]]</code> ведёт себя как обычный Areaportal, с добавлением затухания и закрытия в зависимости от удалённости игрока. Это позволяет избежать "резкого" открытия Areaportalа.
{{Placement Tip|Если портал областей связан с наименованной дверью, убедитесь, что он тоньше, чем сама модель двери, иначе её не будет видно, когда портал будет закрыт.}}


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


[[Image:areaportal_simple_ex1.jpg|200px|right|thumb|caption|Construction of a basic areaportal.]]
Открытые порталы (не важно, открыты они всегда, или же по команде) ведут себя, как шторки для видимой сквозь них геометрии. Подобно окну дома, движок отрисовывает только те {{L|visleaves|области видимости}}, которые непосредственно видны через портал. То есть, область за ним обрезается по размеру окна, уменьшая величину отображаемой геометрии и улучшая производительность. Вдобавок ко всему, часть модели (prop) вообще не отрисовывается, когда она видна под ''усечённым конусом'' (или видимым углом). Это делает открытые порталы весьма полезными для управления видимостью геометрии моделей.


# Create the areaportal volume with a single [[brush]] solid, completely sealing the space between the two areas that you wish to control. (Multiple areaportals side-by-side can do this if necessary. Avoid giving more than six sides to any single areaportal entity.)
[[File:areaportal_culling_top.jpg|thumb|Открытый Areaportal сильно ограничивает видимость модели.]]
# If the areaportal is connecting two areas like a doorway, make the areaportal brush the size of the opening, and the thickness the same as the walls it is connecting. If the areas are open areas, such as an outdoor section, the thickness can be of any size (grid sizes of 8, 16, 32, etc. are typical).
# Apply the <code>[[Tool textures#Optimisation|tools\toolsareaportal]]</code> material to all faces of the brush.
# [[Entity Creation|Tie the brush]] to a [[func_areaportal]] or [[func_areaportalwindow]] entity.
# Set the ''Initial State'' keyvalue so that it doesn't end up blocking visibility when it shouldn't. If you wish to link it to a named door, set the ''Initial State'' of the portal to the same initial state as the door, and put the name of the door in the ''Name of Linked Door'' keyvalue of the portal. When the door is closed the ''Initial State'' of the areaportal should be Closed too, and vice versa.


{{Placement Tip|When linking an areaportal to a named door, make sure it is thinner than the door model itself to ensure the latter will be rendered when closed.}}
Благодаря таким преимуществам в производительности, порталы областей часто используются в состоянии ''всегда открыт''. Всегда открытый портал создаётся путём установки ключа "Initial State" (изначальное состояние) объекта {{Ent|func_areaportal}} в значение «Open» (открыт). Открытые порталы используются на входе в другие области, содержащие большое число областей видимости и геометрии. Например, такой портал, размещённый в конце коридора, выходящего на более широкое пространство, может дать существенный прирост производительности. Пока игрок смотрит сквозь дверь изнутри, будут отрисовываться только те области видимости с геометрией, которые видны непосредственно через проём.


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


<div style="text-align:center;">[[Image:areaportal_culling_engine1.jpg|350px|caption|In-engine wireframe rendering of an areaportal. Only world geometry that is in visleaves seen through the areaportal are rendered.]] [[Image:areaportal_culling_engine2.jpg|350px|caption|The same scene with the areaportal disabled. All geometry in the connected visleaves are rendered.]]</div>
На скомпилированной карте порталы областей не образуют элементов мира, поэтому нет ограничений на их размер. Это может быть полезно, когда у вас переполненный BSP и Вы используете множество Hint-брашей.


Open areaportals (whether they're always open, or triggered to open) have a behavior of culling geometry that is visible through the areaportal. Similar to looking through an open window of a house, only the [[visleaves]] that are directly visible through the areaportal will be rendered by the engine. In this way, the geometry in the next area is roughly 'culled' to the size of the window, decreasing the amount of geometry rendered, and increasing performance. On top of this, model (prop) geometry is not rendered at all unless part of the model is directly visible through the ''view frustum'' (or visible angle) of the areaportal. This makes open areaportals very useful to control visibility of model geometry.
==Компиляция==
[[File:AreaPortalLeakFig.jpg|300px|right|thumb|caption|Вид сверху на утечку портала областей (слева) и полностью герметичную область (справа).]]


[[Image:areaportal_culling_top.jpg|thumb|An open areaportal tightly culls model visibility.]]
Жизненно важно, чтобы любые зоны, которые должен изолировать портал областей, не {{L|leak|перетекали}} друг в друга. Как и при обычных утечках, область карты считается изолированной от другой только тогда, когда она полностью окружена простыми элементами карты (не являющимися объектами, кроме объёмов порталов областей), без промежутков. Если области соединены по-разному, каждая из них должна быть заполнена порталом областей.


Due to these performance benefits, areaportals are often used in an ''always-open'' state. An always-open areaportal is created by setting the "Initial State" keyvalue on the <code>[[func_areaportal]]</code> entity to "Open". Always-open areaportals are used at the openings to other areas containing large amounts of visleaves and geometry. For example, simply placing an always-open areaportal at the end of the hallway that opens into a wider expanse can produce a substantial performance gain. While the player is inside, looking out of the doorway, only the geometry that is in the each leaf directly visible through the doorway will be drawn.
Понять это поможет воображаемый аквариум с водой и несколькими отверстиями по краям. Портал областей должен заполнить каждое из этих отверстий, иначе область будет утекать, выдавая ошибку {{L|leak|утечки}} в {{L|vbsp}}.


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


Care must be taken to avoid having too many areaportals visible simultaneously. There is processing cost for each, and if portals are not culling enough detail drawing the scene without them becomes faster!
===Обнаружение ошибок компиляции===
 
Ошибки компиляции порталов областей выводятся функцией {{L|vbsp|VBSP}}. Если произойдёт утечка, Вы увидите это:
Areaportals don't form brushes in a compiled map, so don't count towards the brush lump's size limit. This can be useful when you have an incredibly full BSP and are using plenty of hints.
 
== Compilation ==
 
[[Image:AreaPortalLeakFig.jpg|300px|right|thumb|caption|Top view of an areaportal leak (left), and a fully sealed area (right).]]
 
It is vital that any areas that an areaportal is supposed to seal off don't [[leak]] into each other. Just as with regular leaks, an area of the map is only considered sealed from another if it is completely surrounded by world (non-entity) brushes (with the exception of areaportal brushes), without gaps. If there are multiple ways that areas connect, each must be filled with an areaportal.
 
It may help to imagine a fish tank filled with water with several holes in it's sides. An areaportal must fill each of those holes, or the area will leak, generating a [[leak]] error by [[vbsp]].
 
'''Areaportals must be used to seal ''every'' entrance to the area. [[func_detail|func_detail brushes]], translucent textures, and [[displacement]]s cannot seal an area, and will generate leaks that prevent the map from running. If the compiler can still find a way between the two main surfaces of any one portal, it will report a portal leak.'''
 
=== Spotting compile errors ===
 
Areaportal compile errors are output by [[vbsp|VBSP]]. If a leak occurs, you will see this:


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


These error messages are sometimes not as easy to spot as normal [[leak]] error messages, but when it comes to locating the leak in the map, vbsp will generate a [[Leak#Finding_leaks|pointfile]] to help you, just as for regular geometry leaks.
{{bug|Если на вашей карте нет таких объектов, как, например, info_player_start, порталы областей (да и, в общем, остальная часть карты) будут создавать странные утечки. Чтобы этого избежать, убедитесь, что на вашей карте есть хотя бы один обхект.}}
 
{{bug|If your map has no entities in it, for example, an info_player_start, areaportals (and the rest of the map, for that matter) will create unusual leaks. To fix this, be sure to have at least one kind of entity within your map.}}
 
{{tip|The [[glview]] application can be used to display areaportals, which as draw as gray surfaces.}}
 
=== Areaportals and water ===
[[Image:areaportal_water.jpg||thumb|200px|right|When constructing areaportals with water, two separate areaportals must be used.]]


One other tricky aspect of using areaportals is that they are not allowed to cross water boundaries, like the water surface. To accomplish this, you will need to divide the portal into two - one areaportal above the water surface, and another areaportal below it - so that they both meet at the water plane.
{{tip|Приложение {{L|glview}} можно использовать для отображения порталов областей, которые будут показаны как серые поверхности. (''Инструмент устарел, и не рекомендуется к использованию'').}}


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


For optimization reasons, areaportals that share the same plane (are aligned) are automatically merged by the engine. If this behavior is unwanted, simply ensure the areaportal brushes are not along the same plane. This is usually as simple as shrinking or moving one of the areaportals slightly in the editor so they are no longer aligned. Even one grid unit is sufficient to avoid an automatic merge.
Другой сложностью является то, что порталы областей не должны пересекать водную поверхность. Для этого нужно создавать два портала: один - над водой, другой - под водой, и так, чтобы они оба сошлись над водной плоскостью.


{{tip|You can see if areaportals are being merged in the engine by using the <code>r_DrawPortals 1</code> console command.}}
=== Объединение ===
По соображениям оптимизации, порталы областей, которые находятся в одной плоскости (выровнены), автоматически объединяются движком. Если такое объединение нежелательно, просто сдвиньте объёмы порталов относительно плоскости. Для этого достаточен сдвиг всего лишь на одну единицу сетки.


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


[[Image:Areaportal-areas.png|frame|right|Visibility between leaf one and two is unaffected.]]
== Сквозной взгляд ==
[[File:Areaportal-areas.png|frame|right|Видимость между первой и второй областями видимости остаётся неизменной.]]


Areaportals only cull ''between'' the areas that they seal off. Consider the image to the right: while the contents of the building are culled away as you would expect, visibility between [[visleaf]] one and two is unaffected because they are connected to each other via the sides of the building.
Порталы областей отсекают только те области, ''между'' которыми они расположены. Посмотрите на рисунок справа: отбрасываются только помещения внутри здания, а видимость между первой и второй {{L|visleaf|областью видимости}} сохраняется, поскольку они соединены по краям.


This can be fixed by creating two further areaportals on either side of the building.{{clr}}
Это можно исправить, поставив два портала областей по краям здания.


== Console commands ==
{{clr}}


You can debug and test portals in-game, using some portal-specific [[console]] variables:
== Консольные команды ==


;r_DrawPortals 0/1
Вы можете отлаживать и тестировать порталы прямо в игре, используя некоторые специфичные для них {{L|console|консольные}} переменные:
: Outlines any portal border surface (between two areas) in green when set to "1". Sometimes more than one portal is condensed into one. If the portal belonging to it is open, a second green box is also drawn, showing what the visibility on the other side is clipped to.
;mat_wireframe 0/1/2/3
: Draws geometry in wireframe mode, making it easy to see the effects of areaportals in the level. When debugging areaportals, you should typically use mat_wireframe set to "1" or "2", as the "3" setting can hide geometry that is actually rendering.
;r_portalscloseall 0/1
: Setting this to "1" forces all areaportals closed (so that they cannot be opened). Overrides <code>r_portalsopenall 1</code>. (Try this if portals don't seem to be doing anything. It can tell you whether the problem is just that the portals aren't closing properly.)
{{note|This command does not exist in: {{Tf2}} {{Csgo}}}}
;r_portalsopenall 0/1
: Setting this to "1" forces all areaportals open (so that they cannot be closed).


{{tip|Use the <code>BindToggle</code> console command to allow a single key to be used to toggle a console variable.}}
; r_DrawPortals 0/1
: Если установлено значение "1", границы портала (между двумя областями) окрашиваются в зелёный цвет. Иногда несколько порталов объединяются в один. Если портал открыт, рисуется вторая зелёная коробка, показывающая отсекаемое пространство.
; mat_wireframe 0/1/2/3
: Рисует геометрию в виде каркаса, что позволяет легко видеть эффекты порталов областей на карте. Лучше всего использовать значения "1" или "2", так как параметр "3" может скрыть фактически отрисовываемую геометрию.
; r_portalscloseall 0/1
: Значение "1" принудительно закрывает все порталы (без возможности их открыть). Отменяется переменной <code>r_portalsopenall 1</code>. (Пробуйте это, когда кажется, что порталы зависли. Помогает понять, глючит ли их закрывание.)
{{Note|Этой команды не существует в: {{Tf2}} {{Csgo}}}}
; r_portalsopenall 0/1
: Значение "1" принудительно открывает все порталы (без возможности их закрыть).


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


Areaportals are very useful in multiplayer games. Their creation is identical to those in single-player games, but their function and usage is slightly different. With multiple players in a game server, there is less control of when an areaportal is going to be open, and level performance needs to be optimized for ''worst case'' scenarios (i.e. when all visible portals are open). Because of this, in most cases, 'always open' areaportals are placed most often, followed by areaportals linked to doors, and then areaportals controlled by triggers. In worst case scenarios, well-crafted 'always open' areaportals will increase performance more than portals that are designed to be triggered.
== В многопользовательском режиме ==
Порталы областей весьма полезны в многопользовательских играх. Они создаются таким же образом, как и в однопользовательских играх, но с некоторыми отличиями в функциях и использовании. При наличии на сервере нескольких игроков, управляемость открыванием порталов ослабевает, поэтому производительность уровня должна быть оптимизирована под ''худшие сценарии'' (например, когда все видимые порталы открыты). Соответственно, сначала размещайте 'всегда открытые' порталы, потом порталы, связанные с дверями, а затем порталы, управляемые триггерами. В запущенных случаях, хорошо продуманные 'всегда открытые' порталы повысят производительность больше, чем управляемые.


An [[func_areaportalwindow| areaportal window]] can also be used seal structures in multiplayer, but are less useful because they can create gameplay imbalances in competitive multiplayer games. A player inside the structure that is near the areaportal window would be able to see any players outside, but players farther away outside would not be able to see the player inside.
{{L|func_areaportalwindow|Портальные окна}} также могут использоваться в мультиплеере, но здесь они менее полезны, так как могут создавать игровой дисбаланс. Игрок внутри помещения, находясь рядом с порталом окна, может видеть всех игроков вовне, а игроки вовне видеть его не могут.


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


Areaportals are similar to [[occluder]]s in that they help control visibilty. The main differences between them are:
* Окклюдеры скрывают только геометрию моделей (prop). Порталы областей скрывают все объекты.
* Порталы областей должны полностью запечатывать область (не допускать {{L|leak|утечки}}), в то время как окклюдеры могут стоять где угодно внутри области.
* Окклюдеры более затратны на объект, чем открытые порталы областей.
* Окклюдеры имеют элементы управления размером объектов, которые они будут скрывать, в зависимости от площади экрана.


* Occluders only hide model (prop) geometry that is behind them. Areaportals hide all types of objects.
{{Note|Объёмы порталов областей и окклюдеров не должны пересекаться (соприкасаться), иначе они будут работать неправильно.}}
* Areaportals must fully seal areas (allow no [[leak]]s), while occluders can be free-standing inside areas.
* Occluders are more expensive per object than open areaportals.
* Occluders have controls for the size of objects they will hide, based upon screen area.


{{note|Brushes in areaportal and occluder entities should not intersect (touch) each other, and will not function correctly if they do.}}
== См. также ==
* {{Ent|func_areaportal}} / {{Code|{{L|CAreaPortal}}}}
* {{Ent|func_areaportalwindow}}
* {{Code|{{L|CAreaPortalOneWay}}}} (C++ code for new entity)
* {{L|Controlling Geometry Visibility and Compile Times|Управление видимостью геометрии и временем компиляции}}
* {{L|Leak|Утечки}}
* {{L|Visleaf|Область видимости}}


== See also ==
{{ACategory|Level Design}}
{{ACategory|Glossary}}


* [[func_areaportal]] / <code>[[CAreaPortal]]</code>
* [[func_areaportalwindow]]
* <code>[[CAreaPortalOneWay]]</code> (C++ code for new entity)
* [[Controlling Geometry Visibility and Compile Times]]
* [[Leak]]
* [[Visleaf]]


[[Category:Level Design]][[Category: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.