Ru/Source 2/Docs/Level Design/Visibility: Difference between revisions

From Valve Developer Community
< Ru‎ | Source 2‎ | Docs
Jump to navigation Jump to search
(Created page with "{{otherlang2 |en=https://developer.valvesoftware.com/wiki/Half-Life:_Alyx_Workshop_Tools/Level_Design/Visibility }} {{HLATools page|leveldesign=1}} It's important to ensure t...")
 
 
(46 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{otherlang2
{{lang|Half-Life: Alyx Workshop Tools/Level Design/Visibility|title=Видимость}}
|en=https://developer.valvesoftware.com/wiki/Half-Life:_Alyx_Workshop_Tools/Level_Design/Visibility
{{ACategory|Half-Life: Alyx Workshop Tools}} {{ACategory|Half-Life: Alyx Workshop Tools/Level Design}}
}}
{{subpage|{{L|Half-Life: Alyx Workshop Tools}}|{{L|Half-Life: Alyx Workshop Tools/Level Design|Дизайн уровней}}}}
{{HLATools page|leveldesign=1}}


It's important to ensure that you have the correct geometry going to the visibility processor in order to compile an efficient "vis" solution for your maps. The vis solution in Half-Life: Alyx works on an inside/outside algorithm and tries to figure out what's "inside" the map when doing visibility calculations. Effectively anything inside will render and anything outside will be dropped.
Важно убедиться, что у вас есть правильная геометрия, идущая к процессору видимости для того, чтобы скомпилировать эффективное "vis" решение для ваших карт. Решение Vis в Half-Life:Alyx работает по внутреннему/внешнему алгоритму и пытается выяснить, что находится "внутри" карты при выполнении расчетов видимости. Фактически всё, что находится внутри, будет отображаться, а всё, что находится снаружи, будет отброшено.


== Inside vs outside ==
== Внутри VS снаружи ==


The visbuilder will attempt to automatically determine which spaces are inside and outside the level. The primary factor it uses to do this is visibility of front-facing and back-facing geometry. In general, spaces with direct view of sufficient front-facing geometry and limited enough view of back-facing geometry will be marked inside. Then as visbuilder runs, any lines of sight passing through outside space will be eliminated. This is done to compensate for not having any constraints on how levels are constructed. Levels will often include geometry that isn't closed or have geometry that overlaps in some way. These cases should be handled without forcing the system to store visibility info below floors or terrain just because some valid geometry is poking through those surfaces. When this algorithm fails it is most often due to unintended holes in the input geometry. It's important to check the input geometry before looking for other problems (use vis preview in Hammer). In general, you should think of Source2 visibility as two-way. Every visible space should also look like a valid space to put the camera.
Visbuilder попытается автоматически определить, какие пространства находятся внутри и за пределами уровня. Основным фактором, который он использует для этого, является видимость передней и задней поверхностей. В общем, пространства с прямым видом достаточной геометрии лицевой стороны и достаточно ограниченным видом геометрии лицевой стороны будут отмечены внутри. Затем, когда работает visbuilder, любые линии обзора, проходящие через внешнее пространство, будут устранены. Это сделано, чтобы компенсировать отсутствие каких-либо ограничений на построение уровней. Уровни часто включают геометрию, которая не является закрытой или имеет геометрию, которая каким-то образом перекрывается. Эти случаи следует обрабатывать, не заставляя систему хранить информацию о видимости под этажами или местностью только потому, что через эти поверхности пробивается некоторая допустимая геометрия. Когда этот алгоритм терпит неудачу, это чаще всего происходит из-за непреднамеренных отверстий во входной геометрии. Важно проверить геометрию ввода, прежде чем искать другие проблемы (используйте предварительный просмотр в Hammer). В общем, вы должны думать о видимости Source 2 как о двусторонней. Каждое видимое пространство также должно выглядеть как действительное пространство для размещения камеры.


== Basic usage ==
== Основное использование ==


World geometry built in Hammer by default will block visibility. This can be disabled with the '''Exclude from VIS''' option in the Object Properties of the mesh object.
Геометрия мира, построенная в Hammer по умолчанию, блокирует видимость. Это можно отключать с помощью опции '''Исключить из VIS (Exclude from VIS)''' в свойствах объекта (Object Properties).


[[File:Visibility-129991461.png|thumb|left|caption|450px|Exclude from VIS can be used on Hammer meshes to skip visibility checking.]]{{clr}}
[[File:Visibility-129991461.png|thumb|left|caption|450px|Exclude from VIS можно использовать в мешах Hammer для пропуска проверки видимости.]]{{clr}}


Conversely, every ''entity'' type will not block visibility calculations by default, including the "prop_" types. This includes prop_static models which are often too small to block any reasonable amount of visibility so it is skipped entirely. Any prop_static geometry that you wish to be included in the vis solution must by marked as '''Vis Occluder.'''
Каждый тип 'энтити' не будет блокировать вычисления видимости по умолчанию, включая типы "prop_". Это касается моделей prop_static, которые частенько слишком малы, чтобы блокировать разумное количество видимости за собой, поэтому они полностью пропускаются. Любая геометрия prop_static, которую вы хотите включить в решение vis, должна быть помечена как '' 'Vis Occluder.' ''


[[File:Visibility-129991462.png|thumb|left|caption|450px|Using the Vis Occluder option makes a prop block visibility]]{{clr}}
[[File:Visibility-129991462.png|thumb|left|caption|450px|Использование опции Vis Occluder позволяет пропу блокировать видимость за собой ]]{{clr}}


Various material types, mostly "tools" textures can also modify behavior of the geometry it is applied to.
Различные типы материалов, в основном текстуры "инструменты", также могут изменять поведение геометрии, к которой они применяются.


[[File:Visibility-129991465.png|class=confluence-embedded-image|Hammer material browser filtered by tools]]{{clr}}
[[File:Visibility-129991465.png|class=confluence-embedded-image|Браузер материалов Hammer, который использует фильтр "tools" для поиска инструментов]]{{clr}}


Some of the most common tool materials that effect on visibility are:
Вот некоторые из наиболее распространенных материалов-инструментов, влияющих на видимость:


* '''tools/visblocker''' - Surfaces textured with this tool texture will delete any lines of sight when they hit the surface. This is useful to block unwanted (but real) lines of sight due to holes in the map. If you see a case where some hole in the level is actually allowing visibility to some other part of the map file that shouldn't be visible you can use visblocker to block those lines of sight. It does not have to perfectly seal the hole.
* '''tools/visblocker''' - Поверхности, текстурированные с помощью этой текстуры, удалят все линии обзора, когда они коснутся поверхности. Это полезно для блокировки нежелательных (но реальных) линий обзора из-за дыр в карте. Если вы видите случай, когда какая-то дыра в уровне фактически позволяет видеть какую-то другую часть карты, которая не должна быть видимой, вы можете использовать visblocker, чтобы заблокировать эти линии обзора. Не обязательно идеально заделывать отверстие.
* '''tools/toolsskybox''' - Surfaces textured with this tool texture will form valid lines of sight. When voxelizing the world, voxels get subdivided when they contain geometry. If the only geometry in a voxel is toolsskybox, the voxelization will stop at a more coarse resolution. This improves performance of the visibility compiler.
* '''tools/toolsskybox''' - Поверхности, текстурированные с помощью этой текстуры инструмента, образуют допустимые линии обзора. При вокселизации мира воксели подразделяются, если они содержат геометрию. Если единственной геометрией в вокселе является toolsskybox, вокселизация остановится на более грубом разрешении. Это повышает производительность компилятора видимости.
* '''tools/toolsnodraw''' - Surfaces textured with this tool texture will function like normal visible surfaces. The only exception is the inside/outside test. In that test toolsnodraw will be effectively ignored. So if there aren't other bits of visible geometry from a volume, that volume may be eliminated from the PVS.
* '''tools/toolsnodraw''' - Поверхности, текстурированные с помощью этой текстуры инструмента, будут функционировать как обычные видимые поверхности. Единственным исключением является внутренний/внешний тест. В этом тесте toolsnodraw будет эффективно игнорироваться. Таким образом, если в объеме нет других элементов видимой геометрии, этот объем может быть исключен из PVS.


== Viewing vis in game ==
== Просмотр vis в игре ==


The engine can perform a recording of the camera position for visibility debugging. When the recording is played back, the PVS debug visualization will animate that recorded camera and update the visualization in real time. For example, you can use this to see what happens to your vis as you walk down a corridor. You can then fly out and examine the PVS from a different perspective.
Движок может выполнять запись положения камеры для отладки (debug) видимости. Когда запись воспроизводится, визуализация отладки PVS анимирует записанную камеру и обновит визуализацию в режиме реального времени. Например, вы можете использовать это, чтобы увидеть, что происходит с вашим лицом, когда вы идете по коридору. Затем вы можете вылететь и изучить PVS с другой перспективы.


The following console commands can be used:
Можно использовать следующие консольные команды:


{| class="wikitable"
{| class="wikitable"
|-
|-
| '''vis_enable 0/1'''
| '''vis_enable 0/1'''
| Toggle the precomputed visibility system. ''vis_enable 1'' is the default, ''vis_enable 0'' disables the PVS.
| Переключить предварительно вычисленную систему видимости. ''vis_enable 1'' is the default, ''vis_enable 0'' отключает PVS.
|-
|-
| '''vis_debug_show'''
| '''vis_debug_show'''
| This will show the PVS debug visualization. The camera position is rendered as a red sphere, the frustum is rendered in white and visible clusters are rendered as green wireframe outlines. You can independently move your camera and spectate the recorded PVS debug visualization.
| Это покажет визуализацию отладки PVS. Положение камеры визуализируется в виде красной сферы, усеченный конус — в белом, а видимые кластеры — в виде зеленых контуров каркаса. Вы можете самостоятельно перемещать камеру и наблюдать за записанной визуализацией отладки PVS.
|-
|-
| '''vis_debug_record_start'''
| '''vis_debug_record_start'''
| Starts recording the camera frustum for playback.
| Начинает запись усеченного конуса камеры для воспроизведения.
|-
|-
| '''vis_debug_record_stop'''
| '''vis_debug_record_stop'''
| Stops recording the camera.
| Останавливает запись.
|-
|-
| '''vis_debug_find_los'''
| '''vis_debug_find_los'''
| This will find any lines of sight between the current position of the recorded camera (the cluster containing the recorded camera is draw in red) and the position of the actual camera (that cluster is drawn in blue). The lines of sight connecting these two cluster volumes will be drawn in yellow. This tells you why the PVS thinks the recorded camera position can see another position.
| Это найдет любые линии обзора между текущим положением записанной камеры (кластер, содержащий записанную камеру, нарисован красным) и положением фактической камеры (этот кластер нарисован синим цветом). Линии обзора, соединяющие эти два объема кластера, будут нарисованы желтым цветом. Это говорит вам, почему PVS считает, что записанное положение камеры может видеть другое положение.
|-
|-
| '''vis_debug_tracelos'''
| '''vis_debug_tracelos'''
| Use this to fix things that should be visible from the current camera position, but aren't. It will trace a grid of rays covering the current screen and update the vis to include any new lines of sight found. These lines of sight are recorded in your los.bin file for future map compiles.
| Используйте это, чтобы исправить вещи, которые должны быть видны из текущей позиции камеры, но не видны. Он проследит сетку лучей, покрывающих текущий экран, и обновит вид, чтобы включить все новые найденные линии обзора. Эти линии обзора записываются в ваш файл los.bin для будущих компиляций карты.
|-
|-
| '''vis_debug_lock'''
| '''vis_debug_lock'''
| Toggle locking vis LOS origin to current camera position on/off.
| Включить/выключить блокировку относительно источника LOS до текущей позиции камеры.
|-
|-
| '''vis_debug_currentcluster'''
| '''vis_debug_currentcluster'''
| Prints the current cluster number to the console.
| Выводит текущий номер кластера на консоль.
|-
|-
| '''vis_debug_dumpvisibleclusters'''
| '''vis_debug_dumpvisibleclusters'''
| Prints the list of visible clusters to the console.
| Выводит список видимых кластеров на консоль.
|-
|-
| '''vis_debug_drawcluster'''
| '''vis_debug_drawcluster'''
| Add cluster # to visualization, (-1) to clear.
| Добавить номер кластера к визуализации, (-1) для очистки.
|}
|}


== Viewing vis in Hammer ==
== Просмотр vis в Hammer ==


Use '''Visibility contributors view''' to toggle any geometry that does not contribute to vis. This mode hides any geometry that will not block vis and make it easier to spot errors in your levels. For further examples, load up the released maps from the game that shipped with the tools.
Используйте '''Visibility contributors view''', чтобы переключать любую геометрию, которая не влияет на vis. Этот режим скрывает любую геометрию, которая не будет блокировать визы и облегчит обнаружение ошибок на ваших уровнях. Для дальнейших примеров загрузите выпущенные карты из игры, которые поставляются вместе с SDK.


[[File:Visibility-128485606.png]]
[[File:Visibility-128485606.png]]


See [[Half-Life:_Alyx_Workshop_Tools/Level_Design/Load_Compiled_Vis_Data|Load Compiled Vis Data]] to load vis cluster data in Hammer.
Смотрите {{L|Half-Life:_Alyx_Workshop_Tools/Level_Design/Load_Compiled_Vis_Data|Load Compiled Vis Data}} для загрузки данных vis кластера в Hammer.


[[File:Visibility-128485607.png]]
[[File:Visibility-128485607.png]]


== Best practices/common issues ==
== Рекомендации/общие проблемы ==


The rest of this article will focus on some of the more common issues and also best practices.
Остальная часть этой статьи будет сосредоточена на некоторых наиболее распространенных проблемах, а также на передовых методах.


=== Avoid holes in vis contributing geometry at the level boundary ===
=== Избегайте дыр в vis, влияющих на геометрию на границе уровня ===


Although its not completely necessary, vis will produce the best results if there is a sealed shell of vis contributing geometry around the level that cleanly defines the boundary of the level. Holes in this geometry may cause vis to enclose extra empty space around the hole. Typically the '''Toolsskybox''' material is used to define the boundary of the level where it would otherwise be open to the skybox.
Хотя это не совсем необходимо, vis даст лучшие результаты, если вокруг уровня есть запечатанная оболочка из vis, создающая геометрию, которая четко определяет границу уровня. Отверстия в этой геометрии могут привести к тому, что vis будет окружать пустое пространство вокруг отверстия. Обычно материал Toolsskybox используется для определения границы уровня, на котором в противном случае он был бы открыт для skybox.


[[File:Visibility-128485608.png|thumb|left|caption|450px|A hole in the boundary geometry of the level causing vis to extend into empty space.]]{{clr}}
[[File:Visibility-128485608.png|thumb|left|caption|450px|Дыра в геометрии границы уровня, из-за которой vis расширяется в пустое пространство.]]{{clr}}


=== Do not use SkyVisBlocker ===
=== Не используйте SkyVisBlocker ===


The material '''skyvisblocker''' is deprecated and should not be used. You must use '''toolsskybox''' texture to enclose parts of the level which are considered "open" to the the skybox, and '''visblocker''' should be used to block lines of sight without otherwise effecting the vis results. As an optimization, the skybox will not render in scenes that do not use '''toolsskybox'''.
Материал '''skyvisblocker''' устарел и не должен использоваться. Вы должны использовать текстуру '''toolsskybox''', чтобы заключить части уровня, которые считаются "открытыми" в Skybox, а '''visblocker''' следует использовать для блокировки линий обзора, не влияя иным образом на результаты vis. В качестве оптимизации Skybox не будет отображаться в сценах, в которых не используются '''toolsskybox'''.


[[File:Visibility-128485609.png|thumb|left|caption|450px|skyvisblocker is being used to seal the level instead of tooksskybox causing unexpected results. Note the large clusters on the left which are outside of the world.]]{{clr}}
[[File:Visibility-128485609.png|thumb|left|caption|450px|skyvisblocker используется для запечатывания уровня вместо tooksskybox, что приводит к неожиданным результатам. Обратите внимание на большие скопления слева, которые находятся за пределами мира.]]{{clr}}


=== Use Solid Block Light carefully ===
=== Используйте Solid Block Light с осторожностью ===


The "Solid Block Light" material, or '''toolssolidblocklight''' is a solid but invisible surface that also blocks light. Effectively this is functionally the same as '''toolsnodraw''' but also blocks light. For example, a location where a roof over a building should block sunlight from casting light into the interior but a player can also throw grenades onto the roof.
Материал '''Solid Block Light''' или '''toolssolidblocklight''' - это твердая, но невидимая поверхность, которая также блокирует свет. Фактически это функционально то же самое, что и toolsnodraw, но также блокирует свет. Например, место, где крыша над зданием должна блокировать попадание солнечного света внутрь помещения, но игрок также может бросать гранаты на крышу.


It should not be used in empty space where no vis clusters should be generated. The '''toolsblocklight''' material can be used to block light (cast shadows) without adding vis clusters.
Его не следует использовать в пустом пространстве, где не должны создаваться кластеры vis. Материал '''toolsblocklight''' можно использовать для блокировки света (отбрасывания теней) без добавления кластеров vis.


[[File:Visibility-128485610.png|thumb|left|caption|450px|Using toolssolidblocklight outside the level causing unwanted vis clusters to be added.]]{{clr}}
[[File:Visibility-128485610.png|thumb|left|caption|450px|Использование toolssolidblocklight за пределами уровня, вызывающее добавление нежелательных кластеров vis.]]{{clr}}


=== Avoid outward facing geometry at level bounds ===
=== Избегайте геометрии наружу на границах уровня ===


Geometry making up the outer shell of the level should always be facing inwards. If parts of the outer shell are facing outwards it will not only have similar effects as a hole, but may also generate additional undesired lines of sight and cause vis to further fill empty space.
Геометрия, образующая внешнюю оболочку уровня, всегда должна быть обращена внутрь. Если части внешней оболочки обращены наружу, это не только будет иметь такой же эффект, как дыра, но также может создавать дополнительные нежелательные линии обзора и заставлять вис еще больше заполнять пустое пространство.


[[File:Visibility-128485611.png|thumb|left|caption|450px|An outward facing wall at the edge of the level resulting in vis filling empty space]]{{clr}}
[[File:Visibility-128485611.png|thumb|left|caption|450px|Стена, обращенная наружу на краю уровня, в результате чего vis заполняет пустое пространство.]]{{clr}}


=== Avoid vis contributors extending through the level bounds ===
=== Избегайте выхода участков за пределы уровня ===


Geometry which contributes to vis shouldn't poke through the outer shell of the level. Similar to outward facing geometry this can result in undesired lines of sight and cause vis to fill empty space.
Геометрия, которая способствует визуализации, не должна выходить за пределы внешней оболочки уровня. Как и в случае с обращенной наружу геометрией, это может привести к нежелательным линиям обзора и заполнению пустого пространства vis.


[[File:Visibility-128485612.png|thumb|left|caption|450px|A building roof poking through the boundary of the level resulting in extra spacing being added.]]{{clr}}
[[File:Visibility-128485612.png|thumb|left|caption|450px|Крыша здания выходит за границу уровня, что приводит к добавлению дополнительных интервалов.]]{{clr}}


=== Avoid placing objects outside the level ===
=== Избегайте размещения объектов за пределами уровня ===


If you have created a sealed level boundary, ideally all geometry which is not part of the 3D skybox should be within the shell of the level even it it does not contribute to vis. Objects that are outside the shell will be culled by vis in an undesirable manner with part or all of the object being removed.
Если вы создали герметичную границу уровня, в идеале вся геометрия, которая не является частью 3D-скайбокса, должна находиться внутри оболочки уровня, даже если она не влияет на vis. Объекты, находящиеся за пределами оболочки, будут отбракованы vis нежелательным образом с удалением части или всего объекта.


[[File:Visibility-128485613.png|thumb|left|caption|450px|The entire water tower object is outside the visible region of the map and does not show up in game and should probably be in the skybox based on its position.]]{{clr}}
[[File:Visibility-128485613.png|thumb|left|caption|450px|Весь объект водонапорной башни находится за пределами видимой областью карты и не появляется в игре, вероятно этот объект следует использовать в Skybox на основе его позиции.]]{{clr}}

Latest revision as of 22:15, 8 February 2025

English (en)Русский (ru)中文 (zh)Translate (Translate)

Важно убедиться, что у вас есть правильная геометрия, идущая к процессору видимости для того, чтобы скомпилировать эффективное "vis" решение для ваших карт. Решение Vis в Half-Life:Alyx работает по внутреннему/внешнему алгоритму и пытается выяснить, что находится "внутри" карты при выполнении расчетов видимости. Фактически всё, что находится внутри, будет отображаться, а всё, что находится снаружи, будет отброшено.

Внутри VS снаружи

Visbuilder попытается автоматически определить, какие пространства находятся внутри и за пределами уровня. Основным фактором, который он использует для этого, является видимость передней и задней поверхностей. В общем, пространства с прямым видом достаточной геометрии лицевой стороны и достаточно ограниченным видом геометрии лицевой стороны будут отмечены внутри. Затем, когда работает visbuilder, любые линии обзора, проходящие через внешнее пространство, будут устранены. Это сделано, чтобы компенсировать отсутствие каких-либо ограничений на построение уровней. Уровни часто включают геометрию, которая не является закрытой или имеет геометрию, которая каким-то образом перекрывается. Эти случаи следует обрабатывать, не заставляя систему хранить информацию о видимости под этажами или местностью только потому, что через эти поверхности пробивается некоторая допустимая геометрия. Когда этот алгоритм терпит неудачу, это чаще всего происходит из-за непреднамеренных отверстий во входной геометрии. Важно проверить геометрию ввода, прежде чем искать другие проблемы (используйте предварительный просмотр в Hammer). В общем, вы должны думать о видимости Source 2 как о двусторонней. Каждое видимое пространство также должно выглядеть как действительное пространство для размещения камеры.

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

Геометрия мира, построенная в Hammer по умолчанию, блокирует видимость. Это можно отключать с помощью опции Исключить из VIS (Exclude from VIS) в свойствах объекта (Object Properties).

Exclude from VIS можно использовать в мешах Hammer для пропуска проверки видимости.

Каждый тип 'энтити' не будет блокировать вычисления видимости по умолчанию, включая типы "prop_". Это касается моделей prop_static, которые частенько слишком малы, чтобы блокировать разумное количество видимости за собой, поэтому они полностью пропускаются. Любая геометрия prop_static, которую вы хотите включить в решение vis, должна быть помечена как 'Vis Occluder.'

Использование опции Vis Occluder позволяет пропу блокировать видимость за собой

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

Браузер материалов Hammer, который использует фильтр "tools" для поиска инструментов

Вот некоторые из наиболее распространенных материалов-инструментов, влияющих на видимость:

  • tools/visblocker - Поверхности, текстурированные с помощью этой текстуры, удалят все линии обзора, когда они коснутся поверхности. Это полезно для блокировки нежелательных (но реальных) линий обзора из-за дыр в карте. Если вы видите случай, когда какая-то дыра в уровне фактически позволяет видеть какую-то другую часть карты, которая не должна быть видимой, вы можете использовать visblocker, чтобы заблокировать эти линии обзора. Не обязательно идеально заделывать отверстие.
  • tools/toolsskybox - Поверхности, текстурированные с помощью этой текстуры инструмента, образуют допустимые линии обзора. При вокселизации мира воксели подразделяются, если они содержат геометрию. Если единственной геометрией в вокселе является toolsskybox, вокселизация остановится на более грубом разрешении. Это повышает производительность компилятора видимости.
  • tools/toolsnodraw - Поверхности, текстурированные с помощью этой текстуры инструмента, будут функционировать как обычные видимые поверхности. Единственным исключением является внутренний/внешний тест. В этом тесте toolsnodraw будет эффективно игнорироваться. Таким образом, если в объеме нет других элементов видимой геометрии, этот объем может быть исключен из PVS.

Просмотр vis в игре

Движок может выполнять запись положения камеры для отладки (debug) видимости. Когда запись воспроизводится, визуализация отладки PVS анимирует записанную камеру и обновит визуализацию в режиме реального времени. Например, вы можете использовать это, чтобы увидеть, что происходит с вашим лицом, когда вы идете по коридору. Затем вы можете вылететь и изучить PVS с другой перспективы.

Можно использовать следующие консольные команды:

vis_enable 0/1 Переключить предварительно вычисленную систему видимости. vis_enable 1 is the default, vis_enable 0 отключает PVS.
vis_debug_show Это покажет визуализацию отладки PVS. Положение камеры визуализируется в виде красной сферы, усеченный конус — в белом, а видимые кластеры — в виде зеленых контуров каркаса. Вы можете самостоятельно перемещать камеру и наблюдать за записанной визуализацией отладки PVS.
vis_debug_record_start Начинает запись усеченного конуса камеры для воспроизведения.
vis_debug_record_stop Останавливает запись.
vis_debug_find_los Это найдет любые линии обзора между текущим положением записанной камеры (кластер, содержащий записанную камеру, нарисован красным) и положением фактической камеры (этот кластер нарисован синим цветом). Линии обзора, соединяющие эти два объема кластера, будут нарисованы желтым цветом. Это говорит вам, почему PVS считает, что записанное положение камеры может видеть другое положение.
vis_debug_tracelos Используйте это, чтобы исправить вещи, которые должны быть видны из текущей позиции камеры, но не видны. Он проследит сетку лучей, покрывающих текущий экран, и обновит вид, чтобы включить все новые найденные линии обзора. Эти линии обзора записываются в ваш файл los.bin для будущих компиляций карты.
vis_debug_lock Включить/выключить блокировку относительно источника LOS до текущей позиции камеры.
vis_debug_currentcluster Выводит текущий номер кластера на консоль.
vis_debug_dumpvisibleclusters Выводит список видимых кластеров на консоль.
vis_debug_drawcluster Добавить номер кластера к визуализации, (-1) для очистки.

Просмотр vis в Hammer

Используйте Visibility contributors view, чтобы переключать любую геометрию, которая не влияет на vis. Этот режим скрывает любую геометрию, которая не будет блокировать визы и облегчит обнаружение ошибок на ваших уровнях. Для дальнейших примеров загрузите выпущенные карты из игры, которые поставляются вместе с SDK.

Visibility-128485606.png

Смотрите Load Compiled Vis Data(en) для загрузки данных vis кластера в Hammer.

Visibility-128485607.png

Рекомендации/общие проблемы

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

Избегайте дыр в vis, влияющих на геометрию на границе уровня

Хотя это не совсем необходимо, vis даст лучшие результаты, если вокруг уровня есть запечатанная оболочка из vis, создающая геометрию, которая четко определяет границу уровня. Отверстия в этой геометрии могут привести к тому, что vis будет окружать пустое пространство вокруг отверстия. Обычно материал Toolsskybox используется для определения границы уровня, на котором в противном случае он был бы открыт для skybox.

Дыра в геометрии границы уровня, из-за которой vis расширяется в пустое пространство.

Не используйте SkyVisBlocker

Материал skyvisblocker устарел и не должен использоваться. Вы должны использовать текстуру toolsskybox, чтобы заключить части уровня, которые считаются "открытыми" в Skybox, а visblocker следует использовать для блокировки линий обзора, не влияя иным образом на результаты vis. В качестве оптимизации Skybox не будет отображаться в сценах, в которых не используются toolsskybox.

skyvisblocker используется для запечатывания уровня вместо tooksskybox, что приводит к неожиданным результатам. Обратите внимание на большие скопления слева, которые находятся за пределами мира.

Используйте Solid Block Light с осторожностью

Материал Solid Block Light или toolssolidblocklight - это твердая, но невидимая поверхность, которая также блокирует свет. Фактически это функционально то же самое, что и toolsnodraw, но также блокирует свет. Например, место, где крыша над зданием должна блокировать попадание солнечного света внутрь помещения, но игрок также может бросать гранаты на крышу.

Его не следует использовать в пустом пространстве, где не должны создаваться кластеры vis. Материал toolsblocklight можно использовать для блокировки света (отбрасывания теней) без добавления кластеров vis.

Использование toolssolidblocklight за пределами уровня, вызывающее добавление нежелательных кластеров vis.

Избегайте геометрии наружу на границах уровня

Геометрия, образующая внешнюю оболочку уровня, всегда должна быть обращена внутрь. Если части внешней оболочки обращены наружу, это не только будет иметь такой же эффект, как дыра, но также может создавать дополнительные нежелательные линии обзора и заставлять вис еще больше заполнять пустое пространство.

Стена, обращенная наружу на краю уровня, в результате чего vis заполняет пустое пространство.

Избегайте выхода участков за пределы уровня

Геометрия, которая способствует визуализации, не должна выходить за пределы внешней оболочки уровня. Как и в случае с обращенной наружу геометрией, это может привести к нежелательным линиям обзора и заполнению пустого пространства vis.

Крыша здания выходит за границу уровня, что приводит к добавлению дополнительных интервалов.

Избегайте размещения объектов за пределами уровня

Если вы создали герметичную границу уровня, в идеале вся геометрия, которая не является частью 3D-скайбокса, должна находиться внутри оболочки уровня, даже если она не влияет на vis. Объекты, находящиеся за пределами оболочки, будут отбракованы vis нежелательным образом с удалением части или всего объекта.

Весь объект водонапорной башни находится за пределами видимой областью карты и не появляется в игре, вероятно этот объект следует использовать в Skybox на основе его позиции.