This article relates to the game "Half-Life: Alyx". Click here for more information.
This article relates to the workshop tools for "Half-Life: Alyx". Click here for more information.
This article's documentation is for Source 2. Click here for more information.

Видимость

From Valve Developer Community
Jump to: navigation, search
English Русский 简体中文

INFO: Перевод страницы не завершен! The translation of the page is not completed!

Важно убедиться, что у вас есть правильная геометрия, идущая к процессору видимости для того, чтобы скомпилировать эффективное "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 - 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/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/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.

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

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

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

vis_enable 0/1 Toggle the precomputed visibility system. vis_enable 1 is the default, vis_enable 0 disables the PVS.
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.
vis_debug_record_start Starts recording the camera frustum for playback.
vis_debug_record_stop Stops recording the camera.
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.
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.
vis_debug_lock Toggle locking vis LOS origin to current camera position on/off.
vis_debug_currentcluster Prints the current cluster number to the console.
vis_debug_dumpvisibleclusters Prints the list of visible clusters to the console.
vis_debug_drawcluster Add cluster # to visualization, (-1) to clear.

Просмотр vis в Hammer

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

Visibility-128485606.png

Смотрите Load Compiled Vis Data для загрузки данных 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 на основе его позиции.