Маппинг и SDK

Картоделие KF2: что такое Precomputed Visibility

Вокруг Precomputed Visibility в картоделии для Killing Floor 2 много путаницы. Статья пересказывает короткий гайд, объясняющий, что это такое, зачем нужно и как настраивать в SDK.

Что это

Precomputed Visibility отсекает (выгружает) геометрию, объекты и источники света, которых игрок не видит. Например, когда игрок стоит перед стеной, всё за ней отсекается, что сокращает отрисовываемую геометрию в сцене и повышает производительность. В отличие от Dynamic Occlusion Culling, который делает это автоматически во время игры, Precomputed Visibility сохраняет информацию в самом уровне.

Зачем использовать

Dynamic Occlusion Culling автоматически отсекает невидимые объекты, но не бесплатно: каждый отсечённый объект требует инструкции, а чем их больше, тем дольше работает поток рендеринга и ниже частота кадров. При правильной настройке Precomputed Visibility отсекает примерно 50-80% скрытой геометрии, остальное доделывает Dynamic Occlusion Culling.

Настройка

Документация Unreal Engine 3 советует накрыть всю игровую зону одним Precomputed Visibility Volume. Для SDK KF2 автор обнаружил, что так результат плохой, а время построения света зря заметно растёт. Вместо этого используйте сочетание полос и боксов размером не менее 256x256x256, эффективно покрывающих всю игровую зону.

  • Все места, куда может попасть игрок, должны быть полностью покрыты объёмами, иначе геометрия может отсекаться там, где не должна.
  • Утапливайте объёмы на несколько единиц в пол или землю, чтобы система правильно определяла покрываемую поверхность.
  • После расстановки объёмов убедитесь, что функция включена в World Properties.

Отладка и просмотр статистики

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

  • TogglePrecomputedVisibility включает и отключает использование данных precomputed visibility.
  • ShowPrecomputedVisibility включает и отключает отладочную визуализацию ячеек.

Ячейки Precomputed Visibility Визуализация ячеек precomputed visibility.

Чтобы увидеть цифры:

  1. Откройте окно Log: View > Browser Windows > Log, чтобы видеть, включены ли ваши команды.

Окно Log В окне Log видны результаты команд.

  1. Установите конфигурацию окна просмотра с вертикальным разделением: View > Viewport Configuration > 1x1 Vertical Split.
  2. Выполните stat initviews и нажмите Shift+L, чтобы вывести информацию InitViews.

Вывод stat initviews Три значения, за которыми нужно следить.

Оставайтесь внутри ячеек Precomputed Visibility, иначе данные будут неточными. При правильной настройке значение "Statically occluded primitives" должно составлять 50-80% от значения "Occluded primitives".

Чтобы измерить, сколько времени рендеринга вы экономите на кадр, выполните ToggleOcclusion, отключив Precomputed Visibility: значение "Occlusion Result" вырастет. Выполните команду снова, чтобы включить, и вычтите. Даже экономия в 5-6 миллисекунд - хороший результат.

Включение функции в World Properties Включите Precomputed Visibility в World Properties и визуализацию отсечения в ортографических видах.

В оригинале также была ссылка на пример карты.

Вопросы и ответы

Что такое Precomputed Visibility?
Функция, которая сохраняет в уровне, какая геометрия, объекты и свет скрыты из каждой точки, и заранее отсекает их, уменьшая отрисовываемую геометрию и повышая производительность.
Сколько она должна отсекать?
При правильной настройке она отсекает 50-80% скрытой геометрии, остальное берёт на себя Dynamic Occlusion Culling.
Какого размера делать объёмы?
Автор использует полосы и боксы не меньше 256x256x256 единиц, покрывающие всю игровую зону и утопленные на несколько единиц в пол.